Sprint 3 - Proyecto Final

Descripción del Proyecto

Para el proyecto final se propuso hacer un fruit ninja en WebGL en 3D. Para soportar 3D quiero modificar la mecánica del juego.

En la versión que planeo crear el jugador se encuentra en un salón. El jugador se puede mover al rededor del salón como si estuviese en un first-person shooter. El objetivo del jugador es prevenir que los objetos (frutas) que estén cayendo del techo toquen el suelo. Para lograr esto el jugador debe desplazarse al rededor del salón e ir pegándole (click) a los objetos que están cayendo. Como en la versión original, el jugador solo puede dejar caer 3 veces un objeto al piso. Así mismo, existen objetos que al destruirse causan que el jugador pierda automáticamente (bombas).

Estado Actual

Luego de haber agregado la habitación y el movimiento de la cámara con mouse + AWSD en el Sprint 2, para el Sprint 3 me dedique a agregar la mecánica básica del juego. Esto implica generar frutas de forma aleatoria que caigan del techo, agregarle una espada al usuario que siga sus movimientos, poder interactuar con la espada a través del teclado (animación de ataque de espada), y poder detectar cuando la espada logre cortar a una fruta. El código se encuentra aquí. Un demo funcional se puede encontrar acá. La misma página se utiliza para mostrar la versión más actual del código. Se crearon releases en el repositorio de Github para marcar los cambios hechos entre sprints. Este corresponde al release llamado sprint-3.

Código de Interés

La implementación de la generación de frutas se concentró en las clases: Scene (para dibujarlas), Fruit (indica que buffers y texturas se utilizan en el dibujo), Target (Manejó de posicionamiento de la fruta y si otro objeto hizo contacto con ella), Game (genera multiples frutas). De estas clase, la implementación más interesante fue la que se hizo en la clase Game y Target.

En la clase Target se desarrolla la lógica relacionada a el movimiento e interacción con la fruta.

Primero, tenemos el constructor que define atributos básicos de un target:



Luego, la primera función importante es fall, que se llama cada vez que se quiere que la fruta baje un poquito:



Nótese que nos movemos en el eje Z ya que como definimos la cámara, arriba y abajo está definido es respecto a este eje.

Por otro lado, el método maintainInBoundary garantiza que la fruta no traspase el piso.

En la clase Game, creamos muchos de estos targets y vamos llamando a la función fall en cada uno de ellos por cada update en el hilo principal.



Finalmente, en scene, dibujamos todos los targets que nos retorna el juego teniendo en cuenta su posición actual.


Bitácora de Tiempos

Teniendo en cuenta la descripción de las tareas presentadas anteriormente, el tiempo que se dispuso para cada una, y lo que realmente me tomé se muestran a continuación.
  1. Tarea: Prevenir que el usuario se pudiese salir de la habitación (que las paredes de la habitación no se puedan traspasar)
    Tiempo Estimado: 1 hora
    Tiempo consumido: 45 minutos
  2. Tarea: Generar frutas de forma aleatoria que caigan del techo
    Tiempo estimado: 3 horas
    Tiempo consumido: 3 horas
  3. Tarea: Agregarle una espada al usuario que siga sus movimientos
    Tiempo estimado: 3 horas
    Tiempo consumido: 3 horas
  4. Tarea: Poder interactuar con la espada a través del teclado (animación de ataque de espada)
    Tiempo estimado: 6 horas
    Tiempo consumido: 5 horas
  5. Detectar cuando la espada logre cortar a una fruta
    Tiempo estimado: 2 horas
    Tiempo consumido: 5 horas

Comentarios

Entradas populares de este blog

Texturas

Ejemplo Processing P5.js

Sprint 4 - Proyecto Final