Cuprins:
Video: 2 jucători competitivi VS sincronizare joc: 4 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:45
Vei avea nevoie:
1. Digilent Basys 3, placa FPGA (sau orice alt FPGA)
2. O versiune relativ actualizată a Vivado sau a altui mediu VHDL
3. Un computer care poate rula programul menționat.
Pasul 1: Jocul în sine
Cum interacționează FSM cu modulele.
Cum se joacă
Pentru a începe, apăsați butonul din mijloc. Acest lucru va determina afișarea „99”, reprezentând sănătatea jucătorului doi, pe afișajul cu șapte segmente. Apoi, LED-urile se vor aprinde secvențial de la dreapta la stânga. Aceasta formează o bară de alimentare. Odată ce bara de alimentare este plină, se resetează. Obiectivul jucătorului unu este să-și întoarcă comutatorul atunci când bara este cât mai sus posibilă. Cu cât se aprind mai multe LED-uri, cu atât mai mult se dăunează jucătorului doi jucătorului doi. După ce jucătorul unu își răstoarnă comutatorul, daunele provocate sunt deduse din sănătatea jucătorului doi. Apoi, trece la rândul jucătorului doi. Acum, numărul afișat reprezintă starea de sănătate a jucătorului, iar bara de alimentare se umple de la stânga la dreapta. Odată ce jucătorul doi își face mișcarea, daunele sunt deduse și revin din nou la rândul jucătorului. Aceasta se repetă până când un jucător atinge 0 sănătate. Videoclipul acestei funcționări este atașat.
Pasul 2: FSM
Acest joc este în esență o mare mașină de stări finite, în care există o logică complexă bazată pe starea în care se află FSM.
Starea 1: Meniu Prima stare este ecranul meniului, care este una dintre stările mai simple. Include afișajul pe șapte segmente care afișează cuvântul „JUCĂ” și butonul care determină pornirea jocului. Butonul, BTN, ne conduce la următoarea stare, care este rândul jucătorului.
Starea 2: rândul jucătorului unu
Turnul jucătorului unu activează un semnal care face ca afișajul de șapte segmente să afișeze starea de sănătate a jucătorului doi. Un alt semnal se activează pentru a activa un registru de schimbare importat dintr-un alt modul pe care l-am creat (Pone.vhd). Acest registru de schimbare face ca LED-urile să se aprindă ca un indicator de putere în creștere în alte jocuri și apoi se va reseta la 0 când atinge cantitatea maximă de LED-uri care ar putea fi aprinse. Se actualizează pe marginea ascendentă a ceasului obținut de la barclock.vhd, care este modificat dintr-un fișier de laborator împrumutat. Am făcut ca bara jucătorului să înceapă de la dreapta și să se umple până la stânga, deoarece comutatorul jucătorului unu este, de asemenea, în stânga (pentru o experiență intuitivă a utilizatorului). Odată ce comutatorul este răsturnat, starea trece la jucător cu o deducere, iar cantitatea de LED activă este salvată într-un semnal.
Starea 3: deducerea jucătorului 1 Semnalul cu cantitatea de LED activ determină cantitatea de sănătate care se deduce. Acest lucru se face având un alt registru de schimbare (deductor1.vhd) care, mai degrabă decât crește LED-urile, le scade. Acest lucru scade pe marginea ascendentă a unuia dintre modulele div ceas pe care le-am împrumutat și le-am modificat (downcounterclock.vhd). Chiar când un LED este oprit, un punct de sănătate este dedus din sănătatea totală a jucătorului doi. Dacă în acest proces jucătorul atinge 0 sănătate, ne oprim și trecem imediat la starea „Joc terminat”. În caz contrar, odată ce vectorul LED ajunge la „0000000000000000”, trecem la rândul jucătorului doi.
Starea 4: rândul jucătorului doi Turnul jucătorului doi este exact ca rândul jucătorului unu, cu excepția registrului de schimbare a acestuia (Ptwo.bhd) merge de la stânga la dreapta, iar comutatorul se află pe partea dreaptă a tabloului. Se activează un semnal pentru a afișa starea de sănătate a Playerului 1. Odată ce comutatorul 2 este activ, acesta trece la rândul de deducere al jucătorului doi.
Etapa 5: Deducerea jucătorului doi La fel ca rândul jucătorului doi, jucătorul doi deduc acționează foarte mult ca un jucător deduce. Principala diferență constă în faptul că registrul de schimbare care controlează oprirea LED-ului merge în direcția opusă, ceea ce este o modificare ușor de realizat odată ce ai jucător, deducerea funcționează corect.
Etapa 6: Joc terminat Dacă, în orice moment, fiecare jucător atinge zero sănătate, jocul trece la această stare. Nu se afișează nimic fantezist. Dacă este apăsat unul BTN, starea de sănătate este resetată la 99, iar starea revine la meniu, începând efectiv jocul.
Pasul 3: Module
Diagrama Black Box pentru joc
Downcounterclock (bazat pe modulul clk_div.vhd de Bryan Mealy):
Acesta este ceasul care gestionează sincronizarea deductoarelor. Constanta numită max_count este de 3 ori mai mare decât constanta max_count a barclock-ului. Acest lucru va face deductorii de 3x mai lent decât viteza barei.
Barclock - (bazat pe modulul clk_div.vhd de Bryan Mealy):
Acest ceas se ocupă de sincronizarea măsurătorilor de putere, pe care am făcut-o să creștem rapid pentru a adăuga dificultăți jocului. Această sincronizare poate fi ajustată după dorința dvs., crescând viteza făcând ca numărul max_count constant să fie un număr mai mare sau scăzând-o făcând din max_count un număr mai mic. Sseg_dec - (Scris de Bryan Mealy): Acest modul ia ca intrare un număr de 8 biți, pe care îl decodifică, convertind numărul în echivalentul său zecimal, și apoi iese pe afișajul cu șapte segmente. Pentru ca acest fișier să funcționeze, trebuie să vă asigurați că constrângerile dvs. se potrivesc cu ale noastre.
Pone:
Acesta este un registru de deplasare care deplasează biții spre stânga, adăugând un bit fierbinte pentru a face să pară că indicatorul de putere crește. Când toți biții sunt fierbinți, toți biții se resetează la „0” și ciclul începe din nou.
Ptwo:
Aceasta este o versiune răsturnată a modulului P1.
Deductor1:
Aceasta este o combinație între un registru de schimbare și un subtractor. Registrul de deplasare merge în direcția opusă registrului de deplasare al lui P1, indicând o deducere. Acest lucru scade, de asemenea, 1 din sănătatea jucătorului 2 pentru fiecare ciclu de ceas, astfel încât, combinând aceste două funcții, se va părea că sănătatea adversarului scade cu 1 pentru fiecare led din bara de sănătate care coboară.
Deductor2: Aceasta este o versiune răsturnată a modulului Deductor1.
PlayDecoder (împrumutat și modificat ușor din ekchen35649 133 instructabile): Acesta este utilizat în starea meniului pentru a afișa cuvântul „PLAY” pe decodorul cu șapte segmente.
Pasul 4: Testează
Acest joc a fost inspirat inițial de unul dintre mini-jocurile de la Kirby. Este un joc simplu cu doi jucători, care poate fi jucat pe o placă Basys 3 sau pe orice FPGA.
Pasul 1: Materiale necesare
Veți avea nevoie de: Digilent Basys 3, FPGA Board (sau orice altul) O versiune relativ actualizată de Vivado sau alt mediu vhdl Un computer care poate rula programul menționat Un creier
Pasul 2: Jocul în sine
Cum se joacă
Pentru a începe, apăsați butonul din mijloc. Acest lucru va determina afișarea „99”, reprezentând sănătatea jucătorului doi, pe afișajul cu șapte segmente. Apoi, LED-urile se vor aprinde secvențial de la dreapta la stânga. Aceasta formează o bară de alimentare. Odată ce bara de alimentare este plină, se resetează. Obiectivul jucătorului unu este de a răsturna comutatorul atunci când bara este cât mai sus posibilă. Cu cât sunt mai multe LED-uri aprinse, cu atât mai mult se dăunează jucătorului doi jucătorului doi. După ce jucătorul unu își răstoarnă comutatorul, daunele provocate sunt deduse din sănătatea jucătorului doi. Apoi, trece la rândul jucătorului doi. Acum, numărul afișat reprezintă starea de sănătate a jucătorului, iar bara de alimentare se umple de la stânga la dreapta. Odată ce jucătorul doi își face mișcarea, daunele sunt deduse și revin la rândul său. Aceasta se repetă până când un jucător atinge 0 sănătate. Videoclipul acestei funcționări este atașat.
Pentru a juca jocul, încărcați-l pe o tablă de bază și apăsați butonul din mijloc. Încercați să rotiți comutatorul cu cât mai multe LED-uri active, apoi așteptați și urmăriți cum tabloul deduce aceste puncte din sănătatea adversarului. Apoi, dă-i prietenului tău și
Pasul 3: FSM
Acest joc este în esență o mare mașină de stări finite, în care există o logică complexă bazată pe starea în care se află FSM.
(Diagrama de stat)
Starea 1: Meniu
Prima stare este ecranul meniului, care este una dintre stările mai simple. Include afișajul pe șapte segmente care afișează cuvântul „JUCĂ” și butonul care determină pornirea jocului. Butonul, BTN, ne conduce la următoarea stare, care este rândul jucătorului.
Starea 2: rândul jucătorului unu
Turnul jucătorului unu activează un semnal care face ca afișajul de șapte segmente să afișeze starea de sănătate a jucătorului doi. Un alt semnal se activează pentru a activa un registru de schimbare importat dintr-un alt modul pe care l-am creat (Pone.vhd). Acest registru de schimbare face ca LED-urile să se aprindă ca un indicator de putere în creștere în alte jocuri și apoi se va reseta la 0 când atinge cantitatea maximă de LED-uri care ar putea fi aprinse. Se actualizează pe marginea ascendentă a ceasului obținut de la barclock.vhd, care este modificat dintr-un fișier de laborator împrumutat. Am făcut ca bara jucătorului să înceapă de la dreapta și să se umple până la stânga, deoarece comutatorul jucătorului unu este, de asemenea, în stânga (pentru o experiență intuitivă a utilizatorului). Odată ce comutatorul este răsturnat, starea trece la jucător cu o deducere, iar cantitatea de LED activă este salvată într-un semnal.
Starea 3: deducerea jucătorului unu
Semnalul cu cantitatea de LED activ determină cantitatea de sănătate care se deduce. Acest lucru se face având un alt registru de schimbare (deductor1.vhd) care, mai degrabă decât crește LED-urile, le scade. Acest lucru scade pe marginea ascendentă a unuia dintre modulele div ceas pe care le-am împrumutat și le-am modificat (downcounterclock.vhd). Chiar când un LED este oprit, un punct de sănătate este dedus din sănătatea totală a jucătorului doi. Dacă în acest proces jucătorul atinge 0 sănătate, ne oprim și trecem imediat la starea „Joc terminat”. În caz contrar, odată ce vectorul LED ajunge la „0000000000000000”, trecem la rândul jucătorului doi.
Starea 4: rândul jucătorului doi
Turnul jucătorului doi este exact ca rândul jucătorului unu, cu excepția registrului de schimbare a acestuia (Ptwo.bhd) merge de la stânga la dreapta, iar comutatorul este în partea dreaptă a tabloului. Se activează un semnal pentru a afișa starea de sănătate a Playerului 1. Odată ce comutatorul 2 este activ, acesta trece la rândul de deducere al jucătorului doi.
Etapa 5: Deducerea jucătorului doi
La fel ca rândul jucătorului doi, jucătorul doi deduce acționează foarte mult ca jucătorul unu deduce. Principala diferență constă în faptul că registrul de schimbare care controlează oprirea LED-ului merge în direcția opusă, ceea ce este o modificare ușor de realizat odată ce ai jucător, deducerea funcționează corect.
Etapa 6: Joc terminat Dacă, în orice moment, fiecare jucător atinge zero sănătate, jocul trece la această stare. Nu se afișează nimic fantezist. Dacă este apăsat unul BTN, starea de sănătate este resetată la 99, iar starea revine la meniu, începând efectiv jocul.
Cutie neagră
Pasul 4: Module
Downcounterclock (bazat pe modulul clk_div.vhd de Bryan Mealy):
Acesta este ceasul care gestionează sincronizarea deductoarelor. Constanta numită max_count este de 3 ori mai mare decât constanta max_count a barclock-ului. Acest lucru va face deductorii de 3x mai lent decât viteza barei.
Barclock - (bazat pe modulul clk_div.vhd de Bryan Mealy): Acest ceas se ocupă de sincronizarea indicatorilor de putere, pe care am făcut-o să creștem rapid pentru a adăuga dificultăți jocului. Această sincronizare poate fi ajustată după dorința dvs., crescând viteza făcând constanta max_count un număr mai mare sau scăzând-o făcând din max_count un număr mai mic. Sseg_dec - (Scris de Bryan Mealy): Acest modul ia ca intrare un număr de 8 biți, pe care îl decodifică, convertind numărul în echivalentul său zecimal, și apoi iese pe afișajul cu șapte segmente. Pentru ca acest fișier să funcționeze, trebuie să vă asigurați că constrângerile dvs. se potrivesc cu ale noastre.
Pone: Acesta este un registru de deplasare care deplasează biții spre stânga, adăugând un bit fierbinte pentru a face să pară că indicatorul de putere crește. Când toți biții sunt fierbinți, toți biții se resetează la „0” și ciclul începe din nou.
Ptwo: Aceasta este o versiune răsturnată a modulului P1.
Deductor1: Aceasta este o combinație dintr-un registru de schimbare și un subtractor. Registrul de deplasare merge în direcția opusă registrului de deplasare al lui P1, indicând o deducere. Acest lucru scade, de asemenea, 1 din sănătatea jucătorului 2 pentru fiecare ciclu de ceas, astfel încât, combinând aceste două funcții, se va părea că sănătatea adversarului scade cu 1 pentru fiecare led al barei de sănătate care coboară.
Deductor2: Aceasta este o versiune răsturnată a modulului Deductor1.
PlayDecoder (împrumutat și ușor modificat din ekchen35649 133 instructabile):
Acesta este utilizat în starea meniului pentru a afișa cuvântul „PLAY” pe decodorul cu șapte segmente.
De făcut: imagini, video
Recomandat:
PCB pentru 2 jucători Pong: 3 pași
PCB pentru 2 jucători Pong: În acest ghid puteți construi un joc portabil pentru 2 jucători. Acest design a fost creat în jurul codului postat pe GitHub de Onur Avun. Mi-a plăcut să creez acest proiect, sper că vă place să îl construiți
Atingeți atingeți Rainbow - un joc cu reacție rapidă pentru 2 jucători: 4 pași (cu imagini)
Tap Tap Rainbow - un joc de reacție rapidă pentru 2 jucători: acum 2 săptămâni fiica mea a avut o idee genială de a face un joc de reacție rapidă cu culori curcubeu (este un expert în curcubeu: D). Mi-a plăcut instantaneu ideea și am început să ne gândim cum o putem transforma într-un joc real. Ai un curcubeu în
Jocuri cu două jucători cu bandă LED cu tablou de scor: 10 pași
Jocuri cu două jucători cu bandă LED cu tablou de scor: În primul rând, roagă-te pe Dumnezeu pentru toate popoarele din întreaga lume, Dumnezeu poate să ne ajute și să ne dea pace în acest timp. Toți suntem închiși și nicăieri. Nu am mai multe lucrări de făcut, așa că începeți să studiați Python online și nu pot să cred că
Controler de joc wireless pentru 4 jucători de familie: 3 pași
Wireless 4 Player Family Game Controller: Acesta este un controller wireless în stil arcade pe care 4 persoane îl pot juca simultan. Este fără fir, astfel încât să nu mai aveți nevoie să legați computerul la un controler utilizat de copiii de 5 ani. Ei cad tot timpul și nu vreau să-mi distrugă toate jucăriile când
Aruduino LED Game Joc rapid cu doi jucători: 8 pași
Aruduino LED Game Joc rapid cu doi jucători: Acest proiect este inspirat de @HassonAlkeim. Dacă doriți să aruncați o privire profundă aici este un link pe care îl puteți consulta https://www.instructables.com/id/Arduino-Two-Player-Fast-Button-Clicking-Game/. Acest joc este o versiune îmbunătățită a lui Alkeim. Este un