[ Foro de Pascal ]

Juego Memoria Pascal

19-Dec-2013 08:54
Mauricio Morales
10 Respuestas

Buenas amigos del foro.

Necesito hacer un programa para un juego de memoria.


19-Dec-2013 19:33
oscar gomez

hola, el juego lo resolvio el profesor nacho hace algunos años , he buscado en los links de años pasados pero ya no aparece, ojala el profesor te pueda hechar una mano feliz navidad


20-Dec-2013 05:32
Mauricio Morales

Gracias Oscar, si me gustaria tener ayuda con este programa

Ojala el profesor pueda hecharme una mano con esto

Saludos


20-Dec-2013 22:17
Nacho Cabanes (+83)

¿A qué te refieres con "juego de memoria"?  ¿El de destapar dos cartas, si son iguales desaparecen y si son distintas se vuelven a voltear?


20-Dec-2013 22:21
Mauricio Morales

correcto, podria ser con cartas o sino con nombres de personas.

O algo similar

Gracias Profesor


23-Dec-2013 17:38
Nacho Cabanes (+83)

Vamos con ello. Vamos a empezar por el pseudocódigo, que ayude a ver la lógica que habría que imitar, y a partir de ahí, vamos convirtiendo a Pascal los fragmentos que necesites.

La lógica del juego podría ser algo como


Generar serie de nombres (array, por ejemplo)
Desordenar serie de nombres
Repetir:
    Mostrar serie restante ("boca abajo": sin dejar ver valores)
    Dejar que el usuario escoja 2
    Mostrar esos dos (y hacer una pausa)
    Si los dos son iguales, eliminarlos de la serie
Hasta que serie = vacía


No es difícil convertir eso en un programa de consola (texto) que permita adivinar nombres. En modo gráfico es más trabajoso, así que yo lo haría (en todo caso) en una segunda fase, cuando te salga bien en modo consola.

Las únicas dos cosas que me parecen un poco más complejas son:

- Desordenar un array, que no es algo trivial, pero hay algoritmos que lo hacen de forma sencilla.

- Eliminar elementos de la serie, que se puede hacer llevando un contador de lo que queda en el array, o bien usando una estructura dinámica (un "StringList", si te lo permiten), o bien con un segundo array paralelo en el que se marque qué está adivinado y qué no lo está (podría ser un array de booleanos).


24-Dec-2013 15:56
Luis Torres (+18)

Saludos al profesor Nacho Cabanes. Muy interesante todo, pero tengo una duda en la generación de los nombres, ¿cómo los genera?, ¿serán nombres que existan en nuestro vocabulario o solo cadenas de caracteres sin sentido?


24-Dec-2013 19:58
Nacho Cabanes (+83)

Lo habitual es que los nombres sean palabras prefijadas, para que sea más fácil de memorizar por el jugador.

Se podría crear un array de nombres así:


var  
  palabras: array [1..4] of string[20] = ('gato', 'perro', 'tigre','oso');


Y esas palabras son las que se duplicarían, se mostrarían y posteriormente se irían borrando, a medida que el usuario las acertase.


24-Dec-2013 21:11
oscar gomez

Ante todo FELIZ NAVIDAD al profesor nacho cabanes y a los compañeros.
en relacion al tema y en especial al ultimo post del profe, te puedo añadir que deberias buscar una vez tengas el arrays de nosmbres planteado por el profesor, el llamado algoritmo deFisher-Yates te ayudara para que obtengas un vector aleatorio desordenado y asi poder formar tus parejas para el juego, un saludo.


24-Dec-2013 21:16
Luis Torres (+18)

    Ok, pero creo que esa sentencia no se puede ejecutar en Turbo Pascal, sino en FreePascal.

Saludos.


24-Dec-2013 23:00
Nacho Cabanes (+83)

Efectivamente, el algoritmo de Fisher-Yates es uno de los más simples y rápidos para desordenar un vector.

Y sí, esa forma de definir un array con valores iniciales es válida en las últimas versiones de Turbo Pascal para DOS, como mínimo en Turbo Pascal 7 (y Borland Pascal 7), y de ahí lo "heredó" Free Pascal.

Mira, esto es un fragmento del ejemplo de "Low", en la ayuda contextual de Turbo Pascal 7:


 type
  TDay = (Monday, Tuesday, Wednesday, Thursday,
    Friday, Saturday, Sunday);

 const
  DayName: array[TDay] of string [3] = (
    'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');


(Comprobado: esa forma de inicializar arrays no es válida en Turbo Pascal 5.5 ni en TP6, pero sí en TP7)

(¡Felices fiestas!)






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)