Taula de continguts:

2 jugadors competitius VS joc de temps: 4 passos
2 jugadors competitius VS joc de temps: 4 passos

Vídeo: 2 jugadors competitius VS joc de temps: 4 passos

Vídeo: 2 jugadors competitius VS joc de temps: 4 passos
Vídeo: ПОЧЕМУ Я ЖДУ L4D3 2024, De novembre
Anonim
Joc de cronometratge competitiu contra 2 jugadors
Joc de cronometratge competitiu contra 2 jugadors

Necessitarà:

1. Digilent Basys 3, placa FPGA (o qualsevol altra FPGA)

2. Una versió relativament actualitzada de Vivado o d'algun altre entorn VHDL

3. Un ordinador que pot executar el programa esmentat.

Pas 1: el joc mateix

El mateix joc
El mateix joc

Com interactua l’SFM amb els mòduls.

Com jugar

Per començar, premeu el botó central. Això farà que aparegui "99", que representa la salut del jugador dos, a la pantalla de set segments. A continuació, els LED s’il·luminaran seqüencialment de dreta a esquerra. Això forma una barra de poder. Un cop plena la barra d’alimentació, es reinicia. L’objectiu del jugador és fer girar el seu interruptor quan la barra és tan alta com sigui possible. Com més LED s’encenguin, més dany es fa al jugador dos al jugador dos. Després que el jugador un gira el seu interruptor, el dany causat es dedueix de la salut del jugador dos. Aleshores, passa al torn del jugador dos. Ara, el número que es mostra representa la salut del jugador i la barra d’alimentació s’omple d’esquerra a dreta. Un cop el jugador dos fa el seu moviment, es dedueix el dany i torna al torn del jugador. Es repeteix fins que un jugador arriba a 0 punts de vida. S'adjunta el vídeo d'aquest funcionament.

Pas 2: FSM

FSM
FSM
FSM
FSM
FSM
FSM
FSM
FSM

Aquest joc és essencialment una gran màquina d'estats finits, en què es produeix una lògica complexa basada en l'estat en què es troba el FSM.

Estat 1: menú El primer estat és la pantalla del menú, que és un dels estats més senzills. Inclou la pantalla de set segments que mostra la paraula "JUGAR" i el botó que fa que comenci el joc. El botó, BTN, ens condueix al següent estat, que és el torn del jugador.

Estat 2: el torn del jugador Un

El torn del jugador un activa un senyal que fa que la pantalla de set segments mostri la salut del jugador dos. S’encén un altre senyal per activar un registre de desplaçament importat d’un altre mòdul que hem creat (Pone.vhd). Aquest registre de desplaçament fa que els LED s’il·luminin com ho faria un manòmetre creixent en altres jocs i, després, es restabliria a 0 quan arribi a la quantitat màxima de LED que es podria encendre. S'actualitza a la vora ascendent del rellotge obtinguda de barclock.vhd, que es modifica a partir d'un fitxer de laboratori en préstec. Vam fer que la barra del jugador un comencés per la dreta i que s’omplís cap a l’esquerra, perquè el commutador del jugador un també es troba a l’esquerra (per a una experiència d’usuari intuïtiva). Quan es commuta l’interruptor, l’estat passa al jugador amb un deducció i la quantitat de LED actiu es guarda en un senyal.

Estat 3: deducció del jugador un El senyal amb la quantitat de LED actiu determina la quantitat de salut que es dedueix. Això es fa tenint un altre registre de desplaçament (deductor1.vhd) que en lloc d’incrementar els LED, els disminueix. Això disminueix a la vora ascendent d'un dels mòduls div de rellotge que hem prestat i modificat (downcounterclock.vhd). Just quan s’apaga un LED, es dedueix un punt de salut de la salut total del jugador dos. Si durant aquest procés, el jugador dos arriba a 0 punts de vida, ens aturem i passem immediatament a l'estat "Joc finalitzat". En cas contrari, un cop el vector LED arriba a "0000000000000000", passem al torn del jugador dos.

Estat 4: torn del jugador dos El torn del jugador dos és exactament igual que el torn del jugador un, tret que el registre de desplaçament corresponent (Ptwo.bhd) va d’esquerra a dreta i l’interruptor es troba al costat dret del tauler. S’activa un senyal perquè la pantalla de salut del jugador 1. Un cop el commutador 2 està actiu, es passa al torn de deducció del jugador dos.

Fase 5: Deducció del jugador dos Igual que el torn del jugador dos, el jugador dos dedueix actua molt com un jugador dedueix. La principal diferència és que el registre de desplaçament que controla l’apagada del LED va en la direcció oposada, que és una modificació fàcil de fer un cop tingueu el deducció del jugador que funciona correctament.

Etapa 6: final del joc Si en qualsevol moment qualsevol jugador arriba a zero de salut, el joc canvia a aquest estat. Res de fantasia. Si es prem un BTN, la salut es restablirà a 99 i l'estat tornarà al menú, començant de manera efectiva el joc.

Pas 3: mòduls

Mòduls
Mòduls

Diagrama de caixa negra per al joc

Downcounterclock (basat en el mòdul clk_div.vhd de Bryan Mealy):

Aquest és el rellotge que controla la sincronització dels deductors. La constant anomenada max_count és 3 vegades més que la constant max_count de barclock. Això farà que els deductors siguin 3 vegades més lents que la velocitat de la barra.

Barclock - (basat en el mòdul clk_div.vhd de Bryan Mealy):

Aquest rellotge gestiona la sincronització dels indicadors de potència, que vam augmentar ràpidament per afegir dificultat al joc. Aquest temps es pot ajustar al vostre gust, augmentant la velocitat fent que la constant max_count sigui un nombre més gran o disminuint fent que max_count sigui un nombre més petit. Sseg_dec - (Escrit per Bryan Mealy): aquest mòdul pren un número de 8 bits com a entrada, que descodifica, convertint el número al seu equivalent decimal i, a continuació, surt a la pantalla de set segments. Perquè aquest fitxer funcioni, heu d’assegurar-vos que les vostres restriccions coincideixen amb les nostres.

Pone:

Es tracta d’un registre de desplaçament que desplaça els bits cap a l’esquerra, afegint un bit calent perquè sembli que el manòmetre augmenta. Quan tots els bits estan calents, tots els bits es restableixen a "0" i el cicle torna a començar.

Ptwo:

Aquesta és una versió invertida del mòdul P1.

Deductor1:

Es tracta d’una combinació d’un registre de desplaçament i un restador. El registre de desplaçament va en la direcció oposada del registre de desplaçament de P1, indicant una deducció. Això també resta 1 de la salut del jugador 2 per a cada cicle de rellotge, de manera que amb la combinació d’aquestes dues funcions, semblarà que la salut de l’adversari disminueix 1 per cada led de la barra de salut que baixa.

Deductor2: es tracta d’una versió invertida del mòdul Deductor1.

PlayDecoder (prestat i modificat lleugerament de la seva 133 instrucció de ekchen35649): s'utilitza a l'estat del menú per mostrar la paraula "PLAY" al decodificador de set segments.

Pas 4: prova

Aquest joc es va inspirar originalment en un dels minijocs de Kirby. És un simple joc de dos jugadors que es pot jugar en un tauler Basys 3 o en qualsevol FPGA.

Pas 1: materials necessaris

Necessitareu: Digilent Basys 3, placa FPGA (o qualsevol altra) Una versió relativament actualitzada de Vivado o algun altre entorn vhdl Un ordinador que pugui executar el programa esmentat Un cervell

Pas 2: el joc mateix

Com jugar

Per començar, premeu el botó central. Això farà que aparegui "99", que representa la salut del jugador dos, a la pantalla de set segments. A continuació, els LED s’il·luminaran seqüencialment de dreta a esquerra. Això forma una barra de poder. Un cop plena la barra d’alimentació, es reinicia. L’objectiu del jugador és fer girar el seu interruptor quan la barra és tan alta com sigui possible. Com més LED s’encenguin, més dany es fa al jugador dos al jugador dos. Després que el jugador un gira el seu interruptor, el dany causat es dedueix de la salut del jugador dos. Aleshores, passa al torn del jugador dos. Ara, el número que es mostra representa la salut del jugador i la barra d’alimentació s’omple d’esquerra a dreta. Un cop el jugador dos fa el seu moviment, es dedueix el dany i torna al torn del jugador. Es repeteix fins que un jugador arriba a 0 punts de vida. S'adjunta el vídeo d'aquest funcionament.

Per jugar, carregueu-lo en un tauler bàsic i premeu el botó central. Intenteu girar l'interruptor amb tants LEDs actius com sigui possible i, a continuació, espereu i observeu com el tauler dedueix aquests punts de la salut del vostre oponent. Després, passa-ho al teu amic i

Pas 3: FSM

Aquest joc és essencialment una gran màquina d'estats finits, en què es produeix una lògica complexa basada en l'estat en què es troba el FSM.

(Diagrama d'estat)

Estat 1: menú

El primer estat és la pantalla del menú, que és un dels estats més senzills. Inclou la pantalla de set segments que mostra la paraula "JUGAR" i el botó que fa que comenci el joc. El botó, BTN, ens condueix al següent estat, que és el torn del jugador.

Estat 2: torn del jugador One

El torn del jugador un activa un senyal que fa que la pantalla de set segments mostri la salut del jugador dos. S’encén un altre senyal per activar un registre de desplaçament importat d’un altre mòdul que hem creat (Pone.vhd). Aquest registre de desplaçament fa que els LED s’il·luminin com ho faria un manòmetre creixent en altres jocs i, després, es restabliria a 0 quan arribi a la quantitat màxima de LED que es podria encendre. S'actualitza a la vora ascendent del rellotge obtinguda de barclock.vhd, que es modifica a partir d'un fitxer de laboratori en préstec. Vam fer que la barra del jugador un comencés per la dreta i que s’omplís cap a l’esquerra, perquè el commutador del jugador un també es troba a l’esquerra (per a una experiència d’usuari intuïtiva). Quan es commuta l’interruptor, l’estat passa al jugador amb un deducció i la quantitat de LED actiu es guarda en un senyal.

Estat 3: deducció del jugador un

El senyal amb la quantitat de LED actiu determina la quantitat de salut que es dedueix. Això es fa tenint un altre registre de desplaçament (deductor1.vhd) que en lloc d’incrementar els LED, els disminueix. Això disminueix a la vora ascendent d'un dels mòduls div de rellotge que hem prestat i modificat (downcounterclock.vhd). Just quan s’apaga un LED, es dedueix un punt de salut de la salut total del jugador dos. Si durant aquest procés, el jugador dos arriba a 0 punts de vida, ens aturem i passem immediatament a l'estat "Joc finalitzat". En cas contrari, un cop el vector LED arriba a "0000000000000000", passem al torn del jugador dos.

Estat 4: torn del jugador dos

El torn del jugador dos és exactament igual que el del jugador primer, excepte que el registre de desplaçament corresponent (Ptwo.bhd) va d’esquerra a dreta i l’interruptor es troba al costat dret del tauler. S’activa un senyal perquè la pantalla de salut del jugador 1. Un cop el commutador 2 està actiu, es passa al torn de deducció del jugador dos.

Etapa 5: Deduir el jugador dos

Igual que el torn del jugador dos, el jugador dos dedueix actua molt com un jugador dedueix. La principal diferència és que el registre de desplaçament que controla l’apagada del LED va en la direcció oposada, que és una modificació fàcil de fer quan el deducció del jugador funciona correctament.

Etapa 6: final del joc Si en qualsevol moment qualsevol jugador arriba a zero de salut, el joc canvia a aquest estat. Res de fantasia. Si es prem un BTN, la salut es restablirà a 99 i l'estat tornarà al menú, començant de manera efectiva el joc.

Caixa Negra

Pas 4: mòduls

Downcounterclock (basat en el mòdul clk_div.vhd de Bryan Mealy):

Aquest és el rellotge que controla la sincronització dels deductors. La constant anomenada max_count és 3 vegades més que la constant max_count de barclock. Això farà que els deductors siguin 3 vegades més lents que la velocitat de la barra.

Barclock - (basat en el mòdul clk_div.vhd de Bryan Mealy): aquest rellotge gestiona la sincronització dels indicadors de potència, que hem incrementat ràpidament per afegir dificultat al joc. Aquest temps es pot ajustar al vostre gust, augmentant la velocitat fent que la constant max_count sigui un nombre més gran o disminuint fent que max_count sigui un nombre més petit. Sseg_dec - (Escrit per Bryan Mealy): aquest mòdul pren un número de 8 bits com a entrada, que descodifica, convertint el número al seu equivalent decimal i, a continuació, surt a la pantalla de set segments. Perquè aquest fitxer funcioni, heu d'assegurar-vos que les vostres restriccions coincideixin amb les nostres.

Pone: es tracta d’un registre de desplaçament que desplaça els bits cap a l’esquerra, afegint un bit calent perquè sembli que el manòmetre augmenta. Quan tots els bits estan calents, tots els bits es restableixen a "0" i el cicle torna a començar.

Ptwo: Aquesta és una versió invertida del mòdul P1.

Deductor1: es tracta d’una combinació d’un registre de desplaçament i un restador. El registre de desplaçament va en la direcció oposada del registre de desplaçament de P1, indicant una deducció. Això també resta 1 de la salut del jugador 2 per a cada cicle de rellotge, de manera que amb la combinació d’aquestes dues funcions, semblarà que la salut de l’adversari disminueix 1 per cada led de la barra de salut que baixa.

Deductor2: es tracta d’una versió invertida del mòdul Deductor1.

PlayDecoder (manllevat i modificat lleugerament de ekchen35649 els seus 133 instructius):

S'utilitza a l'estat del menú per mostrar la paraula "PLAY" al decodificador de set segments.

Per fer: imatges, vídeo

Recomanat: