11. Control de Flujo 2: Iteraciones.. Sirve para tomar decisiones de todo tipo. Sirve para evaluar...
-
Upload
fabian-san-miguel -
Category
Documents
-
view
7 -
download
1
Transcript of 11. Control de Flujo 2: Iteraciones.. Sirve para tomar decisiones de todo tipo. Sirve para evaluar...
11. Control de Flujo 2: Iteraciones.
Sirve para tomar decisiones de todo tipo. Sirve para evaluar condiciones, ej: extremos de la
pantalla. En videojuegos típicamente usado para la IA de enemigos.
if( enemigo.distancia( protagonista ) < dist_min)enemigo.atacar();
elseenemigo.patrullar();
Usado cuando se tiene un número finito de valores para una variable.
Típicamente usado para el diseño de menús.
Típicamente usado para el manejo de estados. (usando Enum)
switch(estado){
case ST_UP:protagonista.MoverUp();break;
case ST_LEFT:protagonista.MoverLeft();break;
case ST_RIGHT:protagonista.MoverRight();break;
case ST_DOWN:protagonista.MoverDown();break;
case ST_SHOOT:protagonista.Disparar()break;
default:break;
}
Iteraciones
Usado para cuando se itera “mientras” se cumpla una condición.
Ejemplo: Un recolector de recursos, recolectará mientras hayan recursos.
Típicamente usado en el ciclo principal del videojuego.
while( <condicion> ){
< sentencias >;}
while( continuar ){
captarTeclas();protagonista.Mover();moverEnemigos();aplicarFisica();
}
Usado para iterar un número finito de veces. Típicamente utilizado para iterar un conjunto
determinado de elementos, donde se conoce el nº de los elementos.
for(<iniciar contador>; <condicion>; <iterar contador>){
<sentencias>;}
Usado para iterar un número finito de veces. Típicamente utilizado para iterar un conjunto
determinado de elementos, donde se conoce el nº de los elementos.
for(int i=0; i<n; i++){
<sentencias>;}
Usado para iterar un número finito de veces. Típicamente utilizado para iterar un conjunto
determinado de elementos, donde se conoce el nº de los elementos.
for(int i=0; i<enemigos.size(); i++){
Enemigo en = enemigos.get(i);en.Mover();
}
Usado para quebrar el flujo normal de una iteración y terminar ésta.
Usado para terminar una iteración cuando se ha cumplido una condición.
for(int i=0; i<enemigos.size(); i++)
{
Enemigo en = enemigos.get(i);
if(bala.isColision(en))
{
bala.Morir();
en.Morir();
break;
}
}
Usado para quebrar el flujo normal de una iteración y continuar con la próxima iteración.
Usado para no realizar el flujo normal de la iteración cuando se cumpla una condición.
for(int i=0; i<personajes.size(); i++){
Personaje p = personajes.get(i);
if(p.getColor() == color)continuar;
if(myBala.isColision(personaje.get(i))){
bala.Morir();p.Morir();break;
}}
Lo primero es asignar qué estados puede tener cada casilla.
enum Casilla{
CROSS,CIRCLE,NONE
};
Tendremos un tablero que lo podremos usar con los siguientes métodos:
//Constructor del tablero, con un ancho y largo específicopublic Tablero(int width, int height);
//Obtiene la marca asignada a una casilla x, ypublic Casilla getMarcaCasilla(int x, int y);
//Cambia la marca asignada a una casillapublic void setMarcaCasilla(Casilla marca, int x, int y)
Debemos crear una función que inicialice el tablero y que sirva para resetearlo cuando queramos iniciar un nuevo juego.
void Resetear(){
…}
Finalmente debemos determinar si un jugador ha ganado una partida
bool isFinalizado(Casilla tipo){
// verificar en eje x// verificar en eje y// verificar en diagonales
}
Ejercicio:
Crear función que determine dado un cierto estado del tablero, si es que puede ganar un jugador o no.
bool PuedeGanar(Casilla tipo);