Paso 6: Obstáculo actualización matriz
Lo que hace de este proyecto un juego es que tienes que evitar los obstáculos que pueden venir en las 3 posibles posiciones (posiciones de izquierda, centro y derecha). Esto significa que tenemos que hacer un seguimiento de nuestros obstáculos y enviar otros nuevos después de que pasa un cierto periodo de tiempo.
Esto significa que vamos a necesitar lo siguiente:
1) una matriz de reg para almacenar los obstáculos.
2) un contador para saber si no ha transcurrido suficiente tiempo para saber si tenemos que enviar un nuevo obstáculo.
3) una manera de generar nuevos obstáculos. (usaremos nuestro generador aleatorio)
4) una forma de moverse los "obstáculos". Tendremos que ser capaces de deshacerse de la fila inferior que "pasa" el vector de posición y también insertar nuestro nuevo obstáculo en la parte superior de la matriz de obstáculo.
1) para realizar un seguimiento de los obstáculos, utilizamos un registro llamado "TotalArray". TotalArray utiliza los índices desde 0 el índice 3 del final de los obstáculos y los ultimos 3 para lo que nos referimos como nuestra "posición". Por ejemplo: en nuestro proyecto utilizamos un TotalArray con índices desde [0:20], así que todo de 0:17 será nuestros obstáculos, y todo, desde las 18:20 será nuestra posición actual.
Es importante saber 2 cosas específicas para nuestra aplicación.
a) usted debe saber que obstáculos se interpretaron en grupos de tres. Así que cuando estamos escribiendo en la pantalla o comprobar si un obstáculo ha chocado con nuestra posición, tenemos que pensar en los índices de obstáculos 3 a la vez.
Para los 3 primeros obstáculos son TotalArray [0:2], los tres siguientes sería TotalArray [3:5] y así sucesivamente.
b) obstáculos nunca llegan a la última fila donde están los índices de posición. Esto significa que la posición de los índices 18:20 sólo tendrá un bit es un 1.
2) Este contador cuenta con posedge del tablero construido en el reloj que se toma de PIN Y2. Un parámetro también debe ser instanciado para indicar lo que debe ser el valor de contador para saber que ha transcurrido el tiempo de señalización para un nuevo obstáculo ser generado y luego poner en la parte de obstáculos de la matriz. Cuanto mayor sea el valor de este parámetro, más tiempo entre nuevos obstáculos se genera y más fácil el juego se juega.
3) nuestro generador de números aleatorios debe "devolver" un valor binario de 3 bits. Tenemos este efecto dando el módulo generador de aleatorios un reg para acceder y cambiar cuando genera un nuevo valor. Podemos tomar este reg y utilizarlo para nuestro módulo updateObstacleArray. Este valor de bit 3 corresponde el nuevo obstáculo que aparecerá en el 0:2 índices. Una cosa a tener en cuenta aquí es que no podemos tener el nuevo obstáculo sea el caso: 3' b111 porque eso significaría el usuario tendría ninguna manera de evitar el obstáculo y que no es divertido! (Somos buena gente!) Para cuidar esto en el azar generar módulo.
Hay otro caso que tenemos no podemos pasar y ese es el caso donde un obstáculo 3' b110 es seguido por un 3' b011 obstáculo porque esto también hace que un escenario de pérdida de auto. En lugar de comprobar en este caso, en lugar de otro crear una línea de 3' b000 entre cada obstáculo para que el usuario siempre pueda encontrar un camino a través de los obstáculos.
4) cuando el tiempo transcurre el parámetro constante período predefinido (de 2), tenemos que mover nuestros obstáculos. Suponiendo que no hay ninguna colisión entre un obstáculo y un valor de posición, entonces vamos a actualizar la matriz para reflejar este paso del tiempo con un nuevo obstáculo. (Volveremos a esta comprobación de colisiones.)
Tenemos que hacer un nuevo obstáculo aparecen en la fila superior de la TotalArray, deshacerse de la fila inferior de los obstáculos y todo lo empuja desde la parte superior de los obstáculos hacia abajo una fila.
Esto se logra mediante el uso de un tempArray.
...
...
Suponiendo que tiempo transcurre para que un obstáculo necesita ser generado.
REG TotalAr [0:20]
tempArray reg [0:17]
entrada randSig [0:2];
Si (obsAr [0:2] == 3' b000)
comenzar
Si primero y la parte superior de la matriz está vacía gen nuevo obsAr original obs y empuje "hacia abajo"
implica que cada obstáculo está separado por una línea horizontal vacía entre obstáculos
Si (randSig! = 3' b111)
comenzar
tempArray [3:17] < = TotalAr [0:14]; almacenar los elementos top 15
tempArray [0:2] = randSig; Creando el nuevo obstáculo de la randomsignal
TotalAr [0:17] = tempArray [0:17]; poner la nueva matriz de obstáculo detrás en el TotalArray
final
otra cosa
comenzar
tempArray [3:17] < = TotalAr [0:14];
tempArray [0:2] = 3' b000; El nuevo obstáculo de hacer una fila en blanco si hay un obstáculo en la fila superior para comenzar.
TotalAr [0:17] = tempArray [0:17];
final
final
...
...
Este código es lo que se utilizará para poner el nuevo obstáculo en la parte superior, así como bajar los viejos obstáculos de una fila.