Cuprins:

Mineweeper: 5 pași (cu imagini)
Mineweeper: 5 pași (cu imagini)

Video: Mineweeper: 5 pași (cu imagini)

Video: Mineweeper: 5 pași (cu imagini)
Video: Minesweeper oddities and their probabilities: 8, 77, 8-8; no 0,1,2 boards; 1-click boards. 2024, Noiembrie
Anonim
Mineweeper
Mineweeper

Pentru proiectul nostru final CPE 133, eu și Chase am decis să creăm un joc „Minesweeper” care să utilizeze butonul și să comute intrarea de pe o placă Basys-3, precum și codul VHDL. Un nume mai bun pentru joc ar putea fi foarte bine „Russian Roulette”, totuși am vrut să mergem cu un nume mai prietenos cu familia. Jocul implică utilizatorul să apese butonul din mijloc de pe placa Basys pentru a aloca aleatoriu unul dintre cele 16 comutatoare pentru a fi „activ” cu o bombă. Apoi, doi jucători se schimbă pe rând, într-un rând, până când unul dintre jucători întoarce comutatorul cu „bomba”. Când se întâmplă acest lucru, afișajul de șapte segmente avertizează jucătorii că acel jucător tocmai a pierdut jocul.

Pasul 1: Prezentare generală

Proiectul a folosit multe dintre modulele VHDL pe care le-am utilizat în cursul acestui trimestru. Un contor de patru biți a fost utilizat împreună cu marginea ceasului pentru a simula un număr aleatoriu de patru biți pentru a activa unul dintre comutatoare. O diagramă de stare a fost, de asemenea, utilizată pentru a transmite cuvinte diferite pe afișajul de șapte segmente, variind de la „PLAY” atunci când jucătorii sunt la mijlocul jocului lor, până la „LOSE” când unul dintre jucători a activat comutatorul activ.

Pasul 2: Materiale

  • Consiliul de dezvoltare Basys3 de la Digilent, Inc.
  • Vivado Design Suite BC_DEC.vhd (Acest fișier ne-a fost furnizat pe Polylearn și a fost scris de Bryan Mealy)
  • Un contor de 4 biți din flip flops
  • Un FSM

Pasul 3: Realizarea jocului

Realizarea jocului
Realizarea jocului
Realizarea jocului
Realizarea jocului

Primul pas către realizarea acestui joc a fost desenarea unei diagrame cu toate componentele pe care le vom folosi. Intrările pentru acest sistem au fost butonul 1, cele 16 comutatoare și ceasul. Ieșirile au fost afișajul pe șapte segmente și anodii. După desenarea schemei de circuite, am scris fișiere sursă individuale pentru fiecare componentă din Vivado și le-am pus împreună folosind hărți de porturi sub fișierul sursă principal.

Întreaga bază a jocului se învârte în jurul alocării aleatorii a unuia dintre cele 16 comutatoare pentru a fi active cu o bombă și pentru ca jucătorii să nu știe ce comutator este activ până când comutatorul activ nu este activat. Am analizat online generatoare de numere aleatorii și pseudorandom, dar în cele din urmă am decis că utilizarea unui contor de 4 biți și atribuirea comutatorului corespunzător pentru a fi activ este suficient de aleatorie pentru ceea ce căutam. Am putut să ne refacem contorul de 4 biți pe care l-am creat într-un proiect anterior pentru a putea lucra pentru această misiune. Am folosit contorul pentru a crea un număr aleatoriu între 0-15; apoi în componenta main1, am atribuit echivalentul zecimal al numărului aleatoriu comutatorului său corespunzător de pe placă. După cum se vede în schemă, atât ieșirea X („bomba activă”) de la componenta main1, cât și comutatoarele pe care jucătorii le pornesc merg la FSM1. Mașina de stat produce o valoare Z de un bit, care este apoi citită de BC_DEC1. Mașina cu stări finite pe care am folosit-o are două stări diferite: în starea A, cele șapte segmente afișează „PLAY”, iar mașina rămâne în starea respectivă până când recunoaște că comutatorul activat este răsturnat. Odată ce acest lucru se întâmplă, FSM trece la starea B, unde scoate „LOSE” pe afișajul de șapte segmente și rămâne în starea respectivă până când toate cele 16 comutatoare sunt rotite la „0”. Când această condiție este îndeplinită, FSM trece din nou la starea A și așteaptă jucătorii să înceapă un alt joc. O diagramă Moore pentru a ajuta la înțelegerea acestui FSM este prezentată mai sus.

Pasul 4: Modificări viitoare

Câteva modificări pe care le aveam în vedere cu privire la modificarea jocului nostru includ adăugarea mai multor bombe pe teren (posibil creșterea de la una la trei), adăugarea unui contor de scoruri și runde multiple. În cele din urmă, am decis împotriva acestor îmbunătățiri, deoarece am constatat că jocul unui joc mai lung și mai lung era de obicei mai tensionat și, în cele din urmă, mai distractiv decât un joc care se termina de obicei după trei sau patru schimbări de jocuri.

Pasul 5: Concluzie

Am fost foarte mulțumiți de rezultatul final al acestui proiect; nu numai pentru că versiunea finală a jocului a fost distractivă, ci și pentru că crearea și programarea proiectului ne-a impus să folosim cel mai mult, dacă nu chiar tot ce am învățat în acest trimestru. Am folosit Flip Flops, contoare, FSM-uri, ceasul, intrarea utilizatorului de pe placă și ieșirea pe afișajul cu șapte segmente.

De asemenea, am aflat cum câteva erori de sintaxă ar putea rupe complet programul (chiar dacă ar fi considerate bune în alte limbaje de programare, cum ar fi Python sau Java) și că numai după mai multe simulări și iterații multiple ale codului încărcat și testat pe bord, veți putea în cele din urmă să eliminați toate erorile din codul dvs.

Recomandat: