11. Control de Flujo 2: Iteraciones.. Sirve para tomar decisiones de todo tipo. Sirve para evaluar...

Post on 07-Jan-2015

12 views 1 download

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);