pakoito
22/11/2007, 01:27
Bueno, es para wartricks. Una recursiva para calcular el rango de movimiento. Os pongo el enunciado y mi resolución utilizando pseudocódigo medio C medio Pascal.
Código que permita calcular el rango movimiento de una criatura, con los siguientes extras:
-Cada criatura tiene un numero de puntos de movimiento diferente. Los costes de moverse una casilla 100ptos, en diagonal 141, cambiando los valores en función del tipo de terreno de la casilla (factor_mov).
-Tablero 10x10 almacenado en una array.
-Para marcar las casillas, un código de colores: negro fuera del rango, amarillo dentro. En las imágenes a continuación el rojo representa el rango, el amarillo el ganado con las diagonales.
http://img222.imageshack.us/img222/130/grid102ne0.jpghttp://img86.imageshack.us/img86/5130/grid103eq3.jpghttp://img86.imageshack.us/img86/4909/grid104vv4.jpghttp://img86.imageshack.us/img86/4037/grid105bg3.jpg
//Llamada a la función
.
.
.
tablero_a_negro(tablero);
movim(tablero, posicionx, posiciony, movimiento_criatura)
.
.
.
movim(tab, posx, posy, mov_cri)//todo por valor
mov_n(tab, posx, posy, mov_cri);//moverse hacia arriba, norte
mov_s(tab, posx, posy, mov_cri);
mov_e(tab, posx, posy, mov_cri);
mov_o(tab, posx, posy, mov_cri);
mov_no(tab, posx, posy, mov_cri);//movimiento en diagonal noroeste
mov_ne(tab, posx, posy, mov_cri);
mov_so(tab, posx, posy, mov_cri);
mov_se(tab, posx, posy, mov_cri);
final movim;
//ahora solamente pondré una función en línea y otra en diagonal, ya que el resto son similares cambiando un par de parámetros
mov_n(t,px,py,mov) //todo por valor
if ((mov>=(100*factor_mov)) and (py+1 <=10) and (es_amarilla_casilla(t[px,py+1]))) //si nos queda movimiento, no nos salimos del tablero y no hemos pasado por la casilla antes
y++
mov=mov-(100*factor_mov)
cambia_color(t[px,py]) //cambiamos el color de la casilla a amarillo
movim(t,px,py,mov); //llamamos a movimiento con la nueva posición para que calcule los siguientes saltos
fin mov_n;
mov_no(t,px,py,mov) //todo por valor
if ((mov>=(141*factor_mov)) and (py+1 <=10) and (px+1 <=10) (es_amarilla_casilla(t[px+1,py+1]))) //si nos queda movimiento, no nos salimos del tablero y no hemos pasado por la casilla antes
y++
x++
mov=mov-(141*factor_mov)
cambia_color(t[px,py]) //cambiamos el color de la casilla a amarillo
movim(t,px,py,mov); //llamamos a movimiento con la nueva posición para que calcule los siguientes saltos
fin mov_no
¿Creéis que funcionará? ¿correctamente? Y lo que más me preocupa...¿es demasiada carga para el micro de un teléfono móvil?
Un saludo!
Código que permita calcular el rango movimiento de una criatura, con los siguientes extras:
-Cada criatura tiene un numero de puntos de movimiento diferente. Los costes de moverse una casilla 100ptos, en diagonal 141, cambiando los valores en función del tipo de terreno de la casilla (factor_mov).
-Tablero 10x10 almacenado en una array.
-Para marcar las casillas, un código de colores: negro fuera del rango, amarillo dentro. En las imágenes a continuación el rojo representa el rango, el amarillo el ganado con las diagonales.
http://img222.imageshack.us/img222/130/grid102ne0.jpghttp://img86.imageshack.us/img86/5130/grid103eq3.jpghttp://img86.imageshack.us/img86/4909/grid104vv4.jpghttp://img86.imageshack.us/img86/4037/grid105bg3.jpg
//Llamada a la función
.
.
.
tablero_a_negro(tablero);
movim(tablero, posicionx, posiciony, movimiento_criatura)
.
.
.
movim(tab, posx, posy, mov_cri)//todo por valor
mov_n(tab, posx, posy, mov_cri);//moverse hacia arriba, norte
mov_s(tab, posx, posy, mov_cri);
mov_e(tab, posx, posy, mov_cri);
mov_o(tab, posx, posy, mov_cri);
mov_no(tab, posx, posy, mov_cri);//movimiento en diagonal noroeste
mov_ne(tab, posx, posy, mov_cri);
mov_so(tab, posx, posy, mov_cri);
mov_se(tab, posx, posy, mov_cri);
final movim;
//ahora solamente pondré una función en línea y otra en diagonal, ya que el resto son similares cambiando un par de parámetros
mov_n(t,px,py,mov) //todo por valor
if ((mov>=(100*factor_mov)) and (py+1 <=10) and (es_amarilla_casilla(t[px,py+1]))) //si nos queda movimiento, no nos salimos del tablero y no hemos pasado por la casilla antes
y++
mov=mov-(100*factor_mov)
cambia_color(t[px,py]) //cambiamos el color de la casilla a amarillo
movim(t,px,py,mov); //llamamos a movimiento con la nueva posición para que calcule los siguientes saltos
fin mov_n;
mov_no(t,px,py,mov) //todo por valor
if ((mov>=(141*factor_mov)) and (py+1 <=10) and (px+1 <=10) (es_amarilla_casilla(t[px+1,py+1]))) //si nos queda movimiento, no nos salimos del tablero y no hemos pasado por la casilla antes
y++
x++
mov=mov-(141*factor_mov)
cambia_color(t[px,py]) //cambiamos el color de la casilla a amarillo
movim(t,px,py,mov); //llamamos a movimiento con la nueva posición para que calcule los siguientes saltos
fin mov_no
¿Creéis que funcionará? ¿correctamente? Y lo que más me preocupa...¿es demasiada carga para el micro de un teléfono móvil?
Un saludo!