Pikmen
Mientras viajaba por el universo, un extraterrestre ha caído en un planeta desconocido al averiarse su nave espacial. Aqui conoce unas criaturas llamadas pikmen, las cuales le ayudan a reparar su nave, buscando las partes que se esparcieron al caer al planeta.
Detalles de Implementación
El juego esta implementado en C++ y la librería SDL, SDL_IMAGE y SDL_GFX. Si usas ubuntu, por ejemplo, puedes instalar estas librerias desde los repositorios (libsdl-image1.2-dev, libsdl1.2-dev, libsdl-gfx1.2-dev).
Primera entrega (Semana 4)
fuentes: iapv.tar.gz
Segunda Entrega (semana 8)
Para esta entrega, implementamos búsqueda de caminos, y máquina de estados.
Fuentes: pikmen.tar.gz
Video: pikmen.mpeg
Segunda Entrega - Segunda versión
Para esta versión, ya funciona el calculo de caminos, y los personajes son capaces de recorrer el grafo en base a estos calculos. Fuentes: pikmen-2.2.tar.bz2
Tercera entrega
Codigo Fuente: pikmen_3.tar.gz
Videos: videos para video.tar.gz
Informe: informe 3.pdf
- Controles del juego:
- Mover al personaje principal: flechas del teclado
- Saltar: barra espaciadora
- Mostrar el grafo de caminos y de olores: tecla p
- Mostrar el rastro de olor: tecla o
- Mostrar los sonidos: letra i
- Hacer que los pikmens sigan al jugador principal: hacer click izquierdo cerca de ellos
- Hacer que los pikmens dejen de seguir al persona principal: tecla q
Nuestro Secreto
Uno de los objetivos del juego es que los pikmen (los personajes verdes) reúnan las piezas de una nave. Para lograrlo, los pikmens deben mover estas piezas hasta su posición correcta. Lo primero que viene a la mente es que los pikmens ejercen una fuerza (o quizá una aceleración) sobre las piezas que están tratando de mover, y estas se muevan como reacción a esta interacción. Sin embargo, esta solución supone que los pikmen sean capaces de coordinar la dirección en la que empujan la pieza, para evitar los diferentes obstáculos que tiene el escenario, y esto no siempre es fácil, especialmente si la pieza necesita muchos personajes para ser levantada.
Nosotros decidimos resolver este problema de otra forma: haciendo que las piezas se movieran como si fueran un personaje más del juego, usando el grafo de caminos del escenario. La única condición que estas piezas tendrían para moverse es que tuvieran en sus cercanías el número necesario de pikmens en el estado correcto (tratando de mover la pieza), mientras que los pikmens simplemente hacen arrive a la pieza. Con esto se tiene la sensación de que son los personajes quienes mueven la pieza cuando, en realidad, es la pieza la que se mueve por cuenta propia.
Adicionamente, quería hacer referencia al tema de las colisiones, que a muchos nos dio dolores de cabeza. Mi solución para este problema fue sencilla: dado un punto (el objetivo) y un rectangulo (el obstaculo), un objetivo colisiona con un obstaculo ssi esta dentro del rectangulo. Con esta aproximación, solo se puede chocar de 4 formar diferentes: por arriba, por derecha, por debajo y por izquierda. El cálculo de las normales es trivial( (0,-1) (1,0) (0,1) (0,-1), respectivamente, según el sistema de coordenadas). Para determinar el lado con el que se colisiono, se mide la distancia del objetivo a cada uno de los lados del rectangulo, y la menor distancia es el indicador. También es posible saber donde debió estar la partícula por colisionar; por ejemplo, si el choque es horizontal por la izquierda: ___________
| |
| |
X----|----O |
| |
|___________|
...al momento de verificar, y reconocer, la colisión, se puede corregir inmediatamente la posición del objetivo, al mismo tiempo que se altera su velocidad (usando la normal). Es fácil notar que esta técnica no es muy sofisticada, pero en la práctica resulta ser suficiente para muchos escenarios.
