Professional Documents
Culture Documents
Fundamentos de Programacin
Otoo 2013
Proyecto Final
PAC-MAN
FECHA DE ENTREGA:
Mircoles 8 de enero de 2014
Fundamentos de Programacin 2
Proyecto Final
Objetivo:
Desarrollar un programa en C++ que simule el funcionamiento del juego Pacman (Namco,
1980), con las siguientes restricciones:
El programa ser una aplicacin de consola Win-32, el mapa y los personajes sern
representados con caracteres de texto.
Los fantasmas no perseguirn a pacman ni escaparn de l, se movern
aleatoriamente por el terreno.
El jugador pierde si es tocado por un fantasma, excepto si ha recogido una cpsula
de poder, en cuyo caso el jugador puede comer fantasmas por un tiempo
determinado.
El jugador gana si se come todos los puntos del tablero.
Requisitos:
Para desarrollar el programa se necesita los siguiente:
El archivo de encabezado consola.h utilizado en clase.
Dominio de todos los temas vistos en el curso.
Criterios de Evaluacin:
El proyecto vale el 30% de la calificacin final. Se utilizarn los siguientes criterios:
Porcentaje
5%
10%
15%
Descripcin
Asistencia a la cita programada para evaluar el proyecto
Funcionamiento del programa.
Evaluacin personal (Examen oral y prctica de programacin)
El equipo contar con 30 minutos para presentar el proyecto. Durante los primeros 5
minutos deber instalar y preparar su programa. Tendr 5 minutos para ejecutar y
demostrar el funcionamiento. Luego, cada integrante del equipo ser evaluado
personalmente con una sesin de preguntas de 5 minutos.
Fundamentos de Programacin 3
Proyecto Final
Instrucciones
El flujo del programa debe ser el siguiente:
Fundamentos de Programacin 4
Proyecto Final
Declaracin de Variables
Tanto Pacman como los fantasmas sern definidos con un nuevo tipo de variable llamado
Figura.
Este tipo de datos se definir como una estructura que contendr los siguientes datos:
Su posicin en el terreno (x, y).
El carcter que ser usado para dibujar la figura (WCHAR).
La velocidad a la que se mueve la figura (float).
El nmero de posiciones en el terreno que se calcula debera moverse (float).
La direccin en la que se mueve (ARRIBA, ABAJO, IZQUIERDA o DERECHA).
En main se deben declarar las siguientes variables:
Figura pacman;
Figura fantasmas[NUM_FANTASMAS];
bool encuentraPildora = false;
float tiempoTranscurrido = 0;
Donde NUM_FANTASMAS es una constante entera global que define cuntos fantasmas
estarn presentes en el terreno.
Deber definir globalmente una matriz de enteros,
int mapa[FILAS][COLUMNAS];
Donde FILAS y COLUMNAS son constantes enteras globales y definen el ancho y alto del
terreno.
Inicializacin
Pacman debe inicializarse al ser declarado utilizando una lista de inicializacin que
contenga:
Su posicin (x, y).
El carcter que lo representa en la pantalla (defina una constante global para
cambiar este carcter de ser necesario).
Su velocidad (tambin definida como una constante global).
El nmero de posiciones en cero.
Fundamentos de Programacin 5
Proyecto Final
Para los fantasmas escriba una funcin para crearlos. El prototipo debe ser:
Figura CreaFantasma();
La funcin debe declarar una variable de tipo Figura y establecer su posicin (x, y) en el
punto de creacin de los fantasmas (definido por constantes globales), su velocidad como
un valor aleatorio entre un valor mnimo y mximo (definidos como constantes globales) y
el nmero de posiciones para moverse en cero.
En main deber crear cada uno de los fantasmas utilizando esta funcin y guardando cada
nuevo fantasma en el arreglo fantasmas.
La matriz de enteros llamada mapa debe inicializarse leyendo los datos de un archivo
externo. Este archivo debe contener el mismo nmero de lneas que el nmero de filas de
la matriz y el mismo nmero de valores por lnea que el nmero de columnas. Por
ejemplo, si la matriz es de 4 X 5 (4 filas, 5 columnas), el archivo contendr lo siguiente:
11111
10201
10001
11111
Donde cada nmero representa:
0 punto
1 - pared
2 - pldora
Defina una funcin que lea este archivo y guarde los valores en la matriz mapa. Su
prototipo debe ser:
void LeeArchivo();
Recuerde que la matriz mapa debe ser declarada globalmente, al igual que las constantes
que definen el nmero de filas y columnas de la matriz.
Fundamentos de Programacin 6
Proyecto Final
Defina tambin una constante de tipo string que defina el nombre del archivo que ser
ledo. Por ejemplo,
const string NOMBRE_ARCHIVO = mapa.txt;
La funcin debe:
Abrir el archivo NOMBRE_ARCHIVO y verificar que se pudo abrir. Si el archivo no se
puede leer el programa debe terminar inmediatamente.
Leer del archivo todos los valores y guardarlos en la matriz.
Cada vez que se lea un valor, imprimir en pantalla el carcter correspondiente
utilizando la funcin printConsole. Por ejemplo, si la variable i recorre las filas de la
matriz y la variable j recorre las columnas se hara lo siguiente:
if (mapa[i][j] == 1)
printConsole(PARED, j, i);
Donde PARED es una constante de tipo WCHAR que define el carcter que se
utiliza para imprimir las paredes. Debe definir tambin los caracteres para la
pldora y los puntos.
Colisiones
Escriba una funcin con este prototipo:
bool Come(Figura pacman, Figura fantasmas[], bool& encuentraPildora,
float& tiempoTranscurrido);
La funcin regresa true si el jugador puede seguir jugando o false si ya perdi (se lo comi
un fantasma).
La funcin debe hacer lo siguiente:
Revisar si en la posicin donde se encuentra pacman hay un punto en la matriz
mapa (si hay un 0), en ese caso, pacman se come el punto (se coloca un -1 en la
matriz). Una vez que se lo coma, se debe buscar en la matriz si no hay ms puntos,
si no los hay, quiere decir que el jugador gana, en este caso se debe imprimir el
mensaje de que gan el jugador y regresar false para impedir que siga jugando.
Fundamentos de Programacin 7
Proyecto Final
Fundamentos de Programacin 8
Proyecto Final
Se debe verificar si en la siguiente posicin no hay una pared, esto se puede hacer
preguntando si en la matriz mapa en la siguiente posicin hay un 1, en ese caso se
abandona la funcin y la figura no se mueve.
Fundamentos de Programacin 9
Proyecto Final
Fundamentos de Programacin 10
Proyecto Final
En main se debe hacer un ciclo para actualizar cada uno de los fantasmas,
for (int i = 0; i < NUM_FANTASMAS; i++)
{
Decide(fantasmas[i]);
Mueve(fantasmas[i]);
Dibuja(fantasmas[i]);
}
Actualiza juego
Adems de actualizar a pacman y los fantasmas, se debe procesar el tiempo que dura el
efecto de la pldora, para hacerlo, defina la siguiente funcin,
void EfectoPildora(bool& encuentraPildora, float& tiempoTranscurrido);
La cual se llamar solo si encuentraPildora es igual a true.
Fundamentos de Programacin 11
Proyecto Final
Duerme
La ltima instruccin del ciclo infinito debe ser Sleep(MILISEGUNDOS); esto simula una
tasa de refresco de 30 cuadros por segundo (frames per second).