Paso 1:
La primera gran parte de VHDL que implementamos fue la lógica del juego. En este módulo, dentro de la entidad hemos creado salidas para las localizaciones de cuatro obstáculos, la puntuación, vidas izquierda y el juego de estado. De eso hemos añadido un reloj con la frecuencia deseada de 8Hz. Las constantes que hemos utilizado para crear esa frecuencia son número entero y representa la frecuencia deseada de las actualizaciones de la lógica del juego. A continuación, hemos generado una secuencia aleatoria para los obstáculos que se muestre. Por el uso de un LFSR fuimos capaces de lidiar con un generador de números pseudo-random para generar los obstáculos en el juego. Obst_out es la salida de vista y que la salida se envía al módulo de pick_a_lane que decide cuál de los cuatro carriles el obstáculo irá demasiado.
La parte siguiente es decidir si el jugador fue golpeado por un obstáculo o no. Por medio de las señales que hemos podido hacer un seguimiento de donde los jugadores y los obstáculos fueron en todo momento. A través de este pudimos también hacer un seguimiento de cuántos golpes el jugador ha hecho con el obstáculo antes de llegar el juego sobre el estado. Otro reloj fue implementado específicamente para la "lógica del juego" del circuito. Es mucho más lento que el otro reloj señales porque determina con qué frecuencia se actualizan los objetos de la pantalla y rapidez los obstáculos se mueven a través de la pantalla. Una vez que el reloj de "juego de lógica" en, pudimos crear un restablecimiento global. Este reset señal está relacionada con todos los componentes de la "lógica del juego" y la señal es alta, se pone a cero todos los elementos del juego. A continuación, crea una instancia el cuatro SRs para cuatro carriles. Las entradas obst_in a lo SRs están vinculadas a índices seleccionados arbitrariamente de número binario de 32 bits almacenado del LFSR. Las salidas de estos SRs están ligadas a la ourputs del módulo game_mechanics. Una vez que se crean instancias de cuatro SRs ponemos en un LFSR que se utiliza para generar nuevos obstáculos en los cuatro carriles de manera pseudo-random. Luego se utiliza un proceso para generar nuestra deseada "reloj" con una frecuencia de 8Hz y la señal enable_game_update sólo será alta 16 veces por segundo. A continuación, a través de una serie de if/else declaraciones, un proceso fue creado para determinar el movimiento del jugador. El jugador sólo puede mover hacia arriba o hacia abajo entre los carriles. Se ejecuta cuando se detecta un cambio en la entrada del jugador ya es cuando el usuario quiere mover a su personaje. Después se implementó el proceso de player_movement, fue necesario un proceso de detección de golpe. Este proceso es responsable de comprobar si el jugador golpea un obstáculo cuando el obstáculo entra en la "zona de jugador". Junto con este proceso de hit_detection, un proceso llamado scoring_system se puso en acción a través de un if/else instrucción que aumenta una vez por segundo. Por último, un proceso llamado check_for_game_over era necesario para completar la lógica del juego. Utilizar if/else declaraciones y utilizando el proceso de global_reset, hemos sido capaces de comprobar si el lose_state era alta o baja. Si lives_left es igual a cero, luego "Game Over".