
Ayuda con procedimiento utilizando arreglos,
Publicado por Lore (1 intervención) el 15/11/2013 17:44:49
Hola Buenas tardes, he visto que has ayudado a mucha gente y despejado muchas dudas a traves de este foro, y espero que a mi me puedas ayudar tambien, estare muy agradecida,
Tengo que crear un juego, muy similar al candy crush pero obviamente no tan sofisticado,pero muy similar, lo unico que tengo que hacer es el motor, la interfaz me la dan, y son 9 procedimientos distintos, ya he avanzado mucho, pero hay uno es particular que no se como hacerlo, y es el de evaluar una jugada valida,
te muestro la letra de todo lo que tengo que hacer para que comprendas, pero lo unico que me esta faltando es el 6.7 el resto lo tengo casi todo, exceptuando detalles que una vez finalizados todos los arreglare.
Los tipos que tengo que utilizar son los siguientes:
TipoFicha = (FichaA, FichaB, FichaC, FichaD, FichaE, FichaF, FichaG, FichaH, FichaI);
TipoEstadoCelda = record
case vacia : boolean of
true : ();
false : (ficha : TipoFicha);
end;
RangoFila = 1..MAX_FILAS;
RangoColumna = 1..MAX_COLUMNAS;
TipoTablero = Array[RangoFila, RangoColumna] of TipoEstadoCelda;
Una posición en el tablero se representa con la siguiente estructura:
TipoPosicion = record
fila : RangoFila;
columna : RangoColumna;
end;
Para representar una bloque (o conjunto de celdas) utilizaremos el tipo TipoListaPosiciones, que es un arreglo con tope que tiene las posiciones de las celdas dentro del tablero, como se muestra a continuación:
TipoListaPosiciones = record
elems : array [1..MAX_CELDAS] of TipoPosicion;
tope : 0..MAX_CELDAS;
end;
6.  Los subprogramas
El motor del juego está constituido por el siguiente conjunto de subprogramas, que trabajan sobre la estructura definida:
6.1  inicializarTableroVacio
Este procedimiento retorna en el parámetro tablero un tablero con todas las celdas vacías.
procedure inicializarTableroVacio(var tablero :TipoTablero);
6.2  llenarCeldasVacias
Este procedimiento recibe en el parámetro tablero un tablero con celdas vacías y ocupadas, y devuelve el mismo tablero, pero con las celdas vacías ocupadas con fichas seleccionadas al azar.
procedure llenarCeldasVacias(var tablero :TipoTablero);
6.3  sonAdyacentes
Esta función devuelve verdadero si y sólo si las posiciones p1 y p2 son adyacentes.
function sonAdyacentes(p1, p2 : TipoPosicion) : Boolean;
6.4  cualesBorrar
Este procedimiento recibe un tablero y devuelve (en el parámetro borrar) las posiciones de todas las celdas que pertenecen a bloques eliminables del tablero.
procedure cualesBorrar(tablero : TipoTablero; var borrar : TipoListaPosiciones);
Las celdas a borrar deben aparecer solamente una vez en la lista borrar, no importa si aparecen en uno o más bloques eliminables.
Las posiciones pueden aparecer en cualquier orden.
6.5  borrarCeldas
Este procedimiento, luego de ejecutado, deja vacías todas las celdas cuya posición se encuentre en la lista @borrar@.
procedure borrarCeldas(borrar : TipoListaPosiciones; var tablero : TipoTablero);
6.6  desplazarHaciaAbajo
Este procedimiento realiza la “caída” de las fichas que quedaron arriba de celdas que quedaron vacías por la eliminación de bloques. Más detalladamente: se desplazan hacia abajo todas las fichas que tengan celdas vacías debajo. Luego de esta operación, todas la fichas vacías quedan en la parte superior del tablero.
Observación: puede suceder que no haya que desplazar ninguna ficha.
procedure desplazarHaciaAbajo(var tablero : TipoTablero);
6.7  hayJugadaValida
Este procedimiento recibe un tablero con todas sus celdas ocupadas.
Si hay al menos una jugada válida devuelve:
verdadero en el parámetro hay y
en p1 y p2 las posiciones que determinan una jugada válida, cualquiera de todas las posibles.
Si no hay un ninguna jugada válida devuelve falso en el parámetro hay.
procedure hayJugadaValida(tablero : TipoTablero; var hay : Boolean; var p1,p2 : TipoPosicion);
6.8  intercambiar
Este procedimiento intercambia los valores de las celdas dadas por las posiciones p1 y p2 del tablero.
procedure intercambiar(p1,p2 :TipoPosicion; var tablero :TipoTablero);
6.9  esJugadaValida
Esta función devuelve verdadero si y sólo si las posiciones p1 y p2 corresponden a una jugada válida tal cómo se definió más arriba.
function esJugadaValida(p1, p2 : TipoPosicion; tablero : TipoTablero) : Boolean;
el Procedimiento 6.7 es el que me esta costando mucho, porque evalue las veces que en un juego de este estilo esta permitida una jugada valida, y son 16 veces si no me equivoco, pero no se como implementarlas y si es necesario implementarlas a todas, si me puedes ayudar , estare muy muy agradecida, espero respuesta a la brevedad
Tengo que crear un juego, muy similar al candy crush pero obviamente no tan sofisticado,pero muy similar, lo unico que tengo que hacer es el motor, la interfaz me la dan, y son 9 procedimientos distintos, ya he avanzado mucho, pero hay uno es particular que no se como hacerlo, y es el de evaluar una jugada valida,
te muestro la letra de todo lo que tengo que hacer para que comprendas, pero lo unico que me esta faltando es el 6.7 el resto lo tengo casi todo, exceptuando detalles que una vez finalizados todos los arreglare.
Los tipos que tengo que utilizar son los siguientes:
TipoFicha = (FichaA, FichaB, FichaC, FichaD, FichaE, FichaF, FichaG, FichaH, FichaI);
TipoEstadoCelda = record
case vacia : boolean of
true : ();
false : (ficha : TipoFicha);
end;
RangoFila = 1..MAX_FILAS;
RangoColumna = 1..MAX_COLUMNAS;
TipoTablero = Array[RangoFila, RangoColumna] of TipoEstadoCelda;
Una posición en el tablero se representa con la siguiente estructura:
TipoPosicion = record
fila : RangoFila;
columna : RangoColumna;
end;
Para representar una bloque (o conjunto de celdas) utilizaremos el tipo TipoListaPosiciones, que es un arreglo con tope que tiene las posiciones de las celdas dentro del tablero, como se muestra a continuación:
TipoListaPosiciones = record
elems : array [1..MAX_CELDAS] of TipoPosicion;
tope : 0..MAX_CELDAS;
end;
6.  Los subprogramas
El motor del juego está constituido por el siguiente conjunto de subprogramas, que trabajan sobre la estructura definida:
6.1  inicializarTableroVacio
Este procedimiento retorna en el parámetro tablero un tablero con todas las celdas vacías.
procedure inicializarTableroVacio(var tablero :TipoTablero);
6.2  llenarCeldasVacias
Este procedimiento recibe en el parámetro tablero un tablero con celdas vacías y ocupadas, y devuelve el mismo tablero, pero con las celdas vacías ocupadas con fichas seleccionadas al azar.
procedure llenarCeldasVacias(var tablero :TipoTablero);
6.3  sonAdyacentes
Esta función devuelve verdadero si y sólo si las posiciones p1 y p2 son adyacentes.
function sonAdyacentes(p1, p2 : TipoPosicion) : Boolean;
6.4  cualesBorrar
Este procedimiento recibe un tablero y devuelve (en el parámetro borrar) las posiciones de todas las celdas que pertenecen a bloques eliminables del tablero.
procedure cualesBorrar(tablero : TipoTablero; var borrar : TipoListaPosiciones);
Las celdas a borrar deben aparecer solamente una vez en la lista borrar, no importa si aparecen en uno o más bloques eliminables.
Las posiciones pueden aparecer en cualquier orden.
6.5  borrarCeldas
Este procedimiento, luego de ejecutado, deja vacías todas las celdas cuya posición se encuentre en la lista @borrar@.
procedure borrarCeldas(borrar : TipoListaPosiciones; var tablero : TipoTablero);
6.6  desplazarHaciaAbajo
Este procedimiento realiza la “caída” de las fichas que quedaron arriba de celdas que quedaron vacías por la eliminación de bloques. Más detalladamente: se desplazan hacia abajo todas las fichas que tengan celdas vacías debajo. Luego de esta operación, todas la fichas vacías quedan en la parte superior del tablero.
Observación: puede suceder que no haya que desplazar ninguna ficha.
procedure desplazarHaciaAbajo(var tablero : TipoTablero);
6.7  hayJugadaValida
Este procedimiento recibe un tablero con todas sus celdas ocupadas.
Si hay al menos una jugada válida devuelve:
verdadero en el parámetro hay y
en p1 y p2 las posiciones que determinan una jugada válida, cualquiera de todas las posibles.
Si no hay un ninguna jugada válida devuelve falso en el parámetro hay.
procedure hayJugadaValida(tablero : TipoTablero; var hay : Boolean; var p1,p2 : TipoPosicion);
6.8  intercambiar
Este procedimiento intercambia los valores de las celdas dadas por las posiciones p1 y p2 del tablero.
procedure intercambiar(p1,p2 :TipoPosicion; var tablero :TipoTablero);
6.9  esJugadaValida
Esta función devuelve verdadero si y sólo si las posiciones p1 y p2 corresponden a una jugada válida tal cómo se definió más arriba.
function esJugadaValida(p1, p2 : TipoPosicion; tablero : TipoTablero) : Boolean;
el Procedimiento 6.7 es el que me esta costando mucho, porque evalue las veces que en un juego de este estilo esta permitida una jugada valida, y son 16 veces si no me equivoco, pero no se como implementarlas y si es necesario implementarlas a todas, si me puedes ayudar , estare muy muy agradecida, espero respuesta a la brevedad
Valora esta pregunta


0