[ Foro de Pascal ]
Buenas amigos del foro.
Necesito hacer un programa para un juego de memoria.
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
Gracias Oscar, si me gustaria tener ayuda con este programa
Ojala el profesor pueda hecharme una mano con esto
Saludos
¿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?
correcto, podria ser con cartas o sino con nombres de personas.
O algo similar
Gracias Profesor
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).
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?
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.
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.
Ok, pero creo que esa sentencia no se puede ejecutar en Turbo Pascal, sino en FreePascal.
Saludos.
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.)