Tabla de contenido:
Video: Competitivo de 2 jugadores vs.Juego de tiempo: 4 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:43
Necesitará:
1. Digilent Basys 3, placa FPGA (o cualquier otra FPGA)
2. Una versión relativamente actualizada de Vivado o algún otro entorno VHDL
3. Una computadora que pueda ejecutar el programa mencionado.
Paso 1: el juego en sí
Cómo interactúa el FSM con los módulos.
Cómo jugar
Para comenzar, presionas el botón central. Esto hará que “99”, que representa la salud del jugador dos, se muestre en la pantalla de siete segmentos. Luego, los LED se iluminarán secuencialmente de derecha a izquierda. Esto forma una barra de poder. Una vez que la barra de energía está llena, se reinicia. El objetivo del jugador uno es activar su interruptor cuando la barra está lo más alta posible. Cuantos más LED se enciendan, más daño le hará el jugador uno al jugador dos. Después de que el jugador uno acciona su interruptor, el daño infligido se deduce de la salud del jugador dos. Luego, cambia al turno del jugador dos. Ahora, el número que se muestra representa la salud del jugador uno y la barra de energía se llena de izquierda a derecha. Una vez que el jugador dos hace su movimiento, el daño se deduce y es el turno del jugador uno nuevamente. Esto se repite hasta que un jugador llega a 0 de salud. Se adjunta video de este funcionamiento.
Paso 2: FSM
Este juego es esencialmente una gran máquina de estados finitos, en la que se produce una lógica compleja basada en el estado en el que se encuentra el FSM.
Estado 1: Menú El primer estado es la pantalla del menú, que es uno de los estados más simples. Incluye la pantalla de siete segmentos que muestra la palabra "JUGAR" y el botón que hace que el juego comience. El botón, BTN, nos lleva al siguiente estado, que es el turno del jugador uno.
Estado 2: turno del jugador uno
El turno del jugador uno activa una señal que hace que la pantalla de siete segmentos muestre la salud del jugador dos. Se enciende otra señal para activar un registro de desplazamiento importado de otro módulo que creamos (Pone.vhd). Este registro de desplazamiento hace que los LED se enciendan como lo haría un indicador de potencia en aumento en otros juegos, y luego se restablecería a 0 cuando alcance la cantidad máxima de LED que podrían encenderse. Se actualiza en el flanco ascendente del reloj obtenido de barclock.vhd, que se modifica a partir de un archivo de laboratorio prestado. Hicimos que la barra del jugador uno comenzara desde la derecha y se llenara hacia la izquierda, porque el interruptor del jugador uno también está a la izquierda (para una experiencia de usuario intuitiva). Una vez que se activa el interruptor, el estado pasa a la deducción del jugador uno, y la cantidad de LED activos se guarda en una señal.
Estado 3: el jugador uno deduce La señal con la cantidad de LED activos determina la cantidad de salud que se deduce. Esto se hace teniendo otro registro de desplazamiento (deductor1.vhd) que en lugar de incrementar los LED, los reduce. Esto disminuye en el flanco ascendente de uno de los módulos div de reloj que tomamos prestados y modificamos (downcounterclock.vhd). Justo cuando se apaga un LED, se deduce un punto de salud de la salud total del jugador dos. Si durante este proceso el jugador dos llega a 0 de salud, nos detenemos y pasamos inmediatamente al estado de "Fin del juego". De lo contrario, una vez que el vector LED llega a "0000000000000000", pasamos al turno del jugador dos.
Estado 4: Turno del jugador dos El turno del jugador dos es exactamente como el turno del jugador uno, excepto que el registro de desplazamiento (Ptwo.bhd) va de izquierda a derecha, y el interruptor está en el lado derecho del tablero. Se activa una señal para mostrar la salud del Jugador 1. Una vez que el interruptor 2 está activo, pasa al turno de deducción del Jugador Dos.
Etapa 5: Deducción del jugador dos Al igual que el turno del jugador dos, la deducción del jugador dos actúa de manera muy similar a la deducción del jugador uno. La principal diferencia es que el registro de desplazamiento que controla el apagado del LED va en la dirección opuesta, lo cual es una modificación fácil de hacer una vez que la deducción del jugador funciona correctamente.
Etapa 6: Fin del juego Si en algún momento alguno de los jugadores llega a cero, el juego cambia a este estado. Nada de exhibiciones extravagantes. Si se presiona BTN uno, entonces la salud se restablece a 99 y el estado vuelve al menú, comenzando efectivamente el juego.
Paso 3: módulos
Diagrama de caja negra para el juego
Downcounterclock (basado en el módulo clk_div.vhd de Bryan Mealy):
Este es el reloj que maneja el tiempo de los deductores. La constante denominada max_count es 3 veces más que la constante max_count de barclock. Esto hará que los deductores sean 3 veces más lentos que la velocidad de la barra.
Barclock - (basado en el módulo clk_div.vhd de Bryan Mealy):
Este reloj maneja el tiempo de los medidores de potencia, que incrementamos rápidamente para agregar dificultad al juego. Este tiempo se puede ajustar a su gusto, aumentando la velocidad haciendo que la constante max_count sea un número mayor, o disminuyéndola haciendo que max_count sea un número menor. Sseg_dec - (Escrito por Bryan Mealy): este módulo toma un número de 8 bits como entrada, que decodifica, convierte el número en su equivalente decimal y luego lo envía a la pantalla de siete segmentos. Para que este archivo funcione, debe asegurarse de que sus restricciones coincidan con las nuestras.
Pan de maíz:
Este es un registro de desplazamiento que desplaza bits a la izquierda, agregando un bit activo para que parezca que el indicador de potencia está aumentando. Cuando todos los bits están calientes, todos los bits se restablecen a "0" y el ciclo comienza de nuevo.
Ptwo:
Esta es una versión invertida del módulo P1.
Deductor1:
Esta es una combinación de un registro de desplazamiento y un resta. El registro de desplazamiento va en la dirección opuesta al registro de desplazamiento de P1, lo que indica una deducción. Esto también resta 1 de la salud del jugador 2 por cada ciclo de reloj, por lo que con la combinación de estas dos funciones, parecerá que la salud del oponente disminuye en 1 por cada led de la barra de salud que baja.
Deductor2: esta es una versión invertida del módulo Deductor1.
PlayDecoder (prestado y ligeramente modificado de ekchen35649 su 133 instructable): se utiliza en el estado del menú para mostrar la palabra "PLAY" en el decodificador de siete segmentos.
Paso 4: prueba
Este juego se inspiró originalmente en uno de los minijuegos de Kirby. Es un juego simple para dos jugadores que se puede jugar en un tablero Basys 3 o en cualquier FPGA.
Paso 1: Materiales necesarios
Necesitará: Digilent Basys 3, placa FPGA (o cualquier otra) Una versión relativamente actualizada de Vivado o algún otro entorno vhdl Una computadora que pueda ejecutar el programa mencionado Un cerebro
Paso 2: el juego en sí
Cómo jugar
Para comenzar, presionas el botón central. Esto hará que “99”, que representa la salud del jugador dos, se muestre en la pantalla de siete segmentos. Luego, los LED se iluminarán secuencialmente de derecha a izquierda. Esto forma una barra de poder. Una vez que la barra de energía está llena, se reinicia. El objetivo del jugador uno es activar su interruptor cuando la barra está lo más alta posible. Cuantos más LED se enciendan, más daño le hará el jugador uno al jugador dos. Después de que el jugador uno acciona su interruptor, el daño infligido se deduce de la salud del jugador dos. Luego, cambia al turno del jugador dos. Ahora, el número que se muestra representa la salud del jugador uno y la barra de energía se llena de izquierda a derecha. Una vez que el jugador dos hace su movimiento, el daño se deduce y es el turno del jugador uno nuevamente. Esto se repite hasta que un jugador llega a 0 de salud. Se adjunta video de este funcionamiento.
Para jugar, cárguelo en un tablero basys y presione el botón central. Intente activar el interruptor con tantos LED activos como sea posible, y luego espere y observe cómo el tablero deduce esos puntos de la salud de su oponente. Luego, dáselo a tu amigo y
Paso 3: FSM
Este juego es esencialmente una gran máquina de estados finitos, en la que se produce una lógica compleja basada en el estado en el que se encuentra el FSM.
(Diagrama de estado)
Estado 1: Menú
El primer estado es la pantalla del menú, que es uno de los estados más simples. Incluye la pantalla de siete segmentos que muestra la palabra "JUGAR" y el botón que hace que el juego comience. El botón, BTN, nos lleva al siguiente estado, que es el turno del jugador uno.
Estado 2: turno del jugador uno
El turno del jugador uno activa una señal que hace que la pantalla de siete segmentos muestre la salud del jugador dos. Se enciende otra señal para activar un registro de desplazamiento importado de otro módulo que creamos (Pone.vhd). Este registro de desplazamiento hace que los LED se enciendan como lo haría un indicador de potencia en aumento en otros juegos, y luego se restablecería a 0 cuando alcance la cantidad máxima de LED que podrían encenderse. Se actualiza en el flanco ascendente del reloj obtenido de barclock.vhd, que se modifica a partir de un archivo de laboratorio prestado. Hicimos que la barra del jugador uno comenzara desde la derecha y se llenara hacia la izquierda, porque el interruptor del jugador uno también está a la izquierda (para una experiencia de usuario intuitiva). Una vez que se activa el interruptor, el estado pasa a la deducción del jugador uno, y la cantidad de LED activos se guarda en una señal.
Estado 3: Deducción del jugador uno
La señal con la cantidad de LED activos determina la cantidad de salud que se deduce. Esto se hace teniendo otro registro de desplazamiento (deductor1.vhd) que en lugar de incrementar los LED, los reduce. Esto disminuye en el flanco ascendente de uno de los módulos div de reloj que tomamos prestados y modificamos (downcounterclock.vhd). Justo cuando se apaga un LED, se deduce un punto de salud de la salud total del jugador dos. Si durante este proceso el jugador dos llega a 0 de salud, nos detenemos y pasamos inmediatamente al estado de "Fin del juego". De lo contrario, una vez que el vector LED llega a "0000000000000000", pasamos al turno del jugador dos.
Estado 4: turno del jugador dos
El turno del jugador dos es exactamente como el turno del jugador uno, excepto que el registro de desplazamiento (Ptwo.bhd) va de izquierda a derecha, y el interruptor está en el lado derecho del tablero. Se activa una señal para mostrar la salud del Jugador 1. Una vez que el interruptor 2 está activo, pasa al turno de deducción del Jugador Dos.
Etapa 5: Deducción del jugador dos
Al igual que el turno del jugador dos, la deducción del jugador dos actúa de manera muy similar a la deducción del jugador uno. La principal diferencia es que el registro de desplazamiento que controla el apagado del LED va en la dirección opuesta, lo cual es una modificación fácil de hacer una vez que la deducción del jugador funciona correctamente.
Etapa 6: Fin del juego Si en algún momento alguno de los jugadores llega a cero, el juego cambia a este estado. Nada de exhibiciones extravagantes. Si se presiona BTN uno, entonces la salud se restablece a 99 y el estado vuelve al menú, comenzando efectivamente el juego.
Caja negra
Paso 4: módulos
Downcounterclock (basado en el módulo clk_div.vhd de Bryan Mealy):
Este es el reloj que maneja el tiempo de los deductores. La constante denominada max_count es 3 veces más que la constante max_count de barclock. Esto hará que los deductores sean 3 veces más lentos que la velocidad de la barra.
Barclock - (basado en el módulo clk_div.vhd de Bryan Mealy): este reloj maneja la sincronización de los indicadores de potencia, los cuales incrementamos rápidamente para agregar dificultad al juego. Este tiempo se puede ajustar a su gusto, aumentando la velocidad haciendo que la constante max_count sea un número mayor, o disminuyéndola haciendo que max_count sea un número menor. Sseg_dec - (Escrito por Bryan Mealy): este módulo toma un número de 8 bits como entrada, que decodifica, convierte el número en su equivalente decimal y luego lo envía a la pantalla de siete segmentos. Para que este archivo funcione, debe asegurarse de que sus restricciones coincidan con las nuestras.
Pone: este es un registro de desplazamiento que desplaza bits hacia la izquierda, agregando un bit activo para que parezca que el indicador de potencia está aumentando. Cuando todos los bits están calientes, todos los bits se restablecen a "0" y el ciclo comienza de nuevo.
Ptwo: esta es una versión invertida del módulo P1.
Deductor1: esta es una combinación de un registro de desplazamiento y un resta. El registro de desplazamiento va en la dirección opuesta al registro de desplazamiento de P1, lo que indica una deducción. Esto también resta 1 de la salud del jugador 2 por cada ciclo de reloj, por lo que con la combinación de estas dos funciones, parecerá que la salud del oponente disminuye en 1 por cada led de la barra de salud que baja.
Deductor2: esta es una versión invertida del módulo Deductor1.
PlayDecoder (prestado y ligeramente modificado de ekchen35649 su 133 instructable):
Se utiliza en el estado del menú para mostrar la palabra "PLAY" en el decodificador de siete segmentos.
Para hacer: fotos, video
Recomendado:
Tap Tap Rainbow: un juego de reacción rápida para 2 jugadores: 4 pasos (con imágenes)
Tap Tap Rainbow - un juego de reacción rápida para 2 jugadores: hace 2 semanas mi hija tuvo una idea genial para hacer un juego de reacción rápida con colores del arco iris (es una experta en arcoíris: D). Al instante me encantó la idea y empezamos a pensar en cómo convertirlo en un juego real. Tienes un arcoíris en
Sistema de timbre competitivo: 5 pasos
Sistema de timbre competitivo: El sistema de timbre competitivo diseñado en este proyecto funciona de manera similar a los sistemas de timbre utilizados en las competencias regionales y nacionales de Science Bowl. Este proyecto se inspiró en mi participación con el equipo de cuencos de ciencias de mi escuela secundaria durante tres
Aruduino LED Game Juego para dos jugadores de clic rápido: 8 pasos
Aruduino LED Game Juego para dos jugadores de clic rápido: este proyecto está inspirado en @HassonAlkeim. Si está dispuesto a echar un vistazo en profundidad, aquí hay un enlace que puede consultar https://www.instructables.com/id/Arduino-Two-Player-Fast-Button-Clicking-Game/. Este juego es una versión mejorada de Alkeim. Es un
Controlador de juego Arduino Rhythm (para mi propio juego): 6 pasos
Controlador de juego de ritmo Arduino (para mi propio juego): en este instructivo le mostraré cómo construyo este controlador de juego de ritmo desde cero. Implica habilidades básicas de carpintería, habilidades básicas de impresión 3D y habilidades básicas de soldadura. Probablemente puedas construir este proyecto con éxito si no tienes ex
Cómo desactivar un juego de bomba de tiempo: 6 pasos
Cómo desactivar un juego de bomba de tiempo: esta idea se me ocurrió de la nada. Realmente no pude encontrar nada parecido. La idea original era mucho más complicada, por lo que esta es una versión simplificada del juego, una " bomba de tiempo ". Tienes que desactivarlo antes que el reloj c