Sommario:

Campo minato: 5 passaggi (con immagini)
Campo minato: 5 passaggi (con immagini)

Video: Campo minato: 5 passaggi (con immagini)

Video: Campo minato: 5 passaggi (con immagini)
Video: 5 CONSIGLI per aumentare la POTENZA del tuo TIRO 2024, Dicembre
Anonim
Dragamine
Dragamine

Per il nostro progetto finale CPE 133, Chase e io abbiamo deciso di creare un gioco "Campo minato" che utilizzasse l'input di pulsanti e interruttori da una scheda Basys-3 e il codice VHDL. Un nome migliore per il gioco potrebbe benissimo essere "Roulette russa", tuttavia volevamo usare un nome più familiare. Il gioco prevede che l'utente prema il pulsante centrale sulla scheda Basys per assegnare in modo casuale uno dei 16 interruttori per essere "attivo" con una bomba. Due giocatori a turno azionano gli interruttori, uno alla volta, finché uno dei giocatori non gira l'interruttore con la "bomba". Quando ciò accade, il display a sette segmenti avvisa i giocatori che quel giocatore ha appena perso la partita.

Passaggio 1: Panoramica

Il progetto ha utilizzato molti dei moduli VHDL che abbiamo utilizzato nel corso di questo trimestre. Un contatore a quattro bit è stato utilizzato in combinazione con il fronte del clock per simulare un numero casuale di quattro bit per attivare uno degli interruttori. È stato utilizzato anche un diagramma di stato per emettere parole diverse sul display a sette segmenti, che vanno da "GIOCA" quando i giocatori sono nel mezzo del gioco, a "PERDERE" quando uno dei giocatori ha premuto l'interruttore attivo.

Passaggio 2: materiali

  • Scheda di sviluppo Basys3 di Digilent, Inc.
  • Vivado Design Suite BC_DEC.vhd (Questo file ci è stato fornito su Polylearn ed è stato scritto da Bryan Mealy)
  • Un contatore a 4 bit fatto di infradito a T
  • un FSM

Passaggio 3: creare il gioco

Fare il gioco
Fare il gioco
Fare il gioco
Fare il gioco

Il primo passo verso la realizzazione di questo gioco è stato disegnare uno schema circuitale con tutti i componenti che utilizzeremo. Gli ingressi per questo sistema erano il pulsante 1, i 16 interruttori e l'orologio. Le uscite erano il display a sette segmenti e gli anodi. Dopo aver disegnato lo schema del circuito, abbiamo scritto i singoli file sorgente per ogni componente in Vivado e li abbiamo messi insieme utilizzando le mappe delle porte sotto il file sorgente principale.

L'intera base del gioco ruota attorno all'assegnazione casuale di uno dei 16 interruttori per essere attivo con una bomba e per i giocatori di non sapere quale interruttore è attivo fino a quando quell'interruttore attivo non viene attivato. Abbiamo esaminato i generatori di numeri casuali e pseudocasuali online, ma alla fine abbiamo deciso che l'utilizzo di un contatore a 4 bit e l'assegnazione dell'interruttore corrispondente per essere attivo è sufficientemente casuale per quello che stavamo cercando. Siamo stati in grado di riutilizzare il nostro contatore a 4 bit che abbiamo creato in un progetto precedente per poter lavorare per questo compito. Abbiamo usato il contatore per creare un numero casuale compreso tra 0-15; quindi nel componente main1, abbiamo assegnato l'equivalente decimale del numero casuale al relativo interruttore sulla scheda. Come si vede nello schema, sia l'uscita X ("bomba attiva") dal componente main1 che gli interruttori che i giocatori accendono vanno a FSM1. La macchina a stati emette un valore Z di un bit che viene poi letto da BC_DEC1. La macchina a stati finiti che abbiamo usato ha due diversi stati: nello stato A, il display a sette segmenti emette "PLAY" e la macchina rimane in quello stato finché non riconosce che l'interruttore attivato è stato attivato. Una volta che ciò accade, l'FSM passa allo stato B dove emette "LOSE" sul display a sette segmenti e rimane in quello stato fino a quando tutti i 16 interruttori non vengono commutati su "0". Quando tale condizione è soddisfatta, l'FSM torna allo stato A e attende che i giocatori inizino un'altra partita. Un diagramma di Moore per aiutare a comprendere questo FSM è mostrato sopra.

Passaggio 4: modifiche future

Alcune modifiche che stavamo considerando di apportare al nostro gioco includono l'aggiunta di più bombe sul campo (possibilmente aumentando da una a tre), l'aggiunta di un contatore di punti e più round. Alla fine abbiamo deciso contro questi miglioramenti, poiché abbiamo scoperto che giocare a un gioco più lungo ed esteso in genere era più teso e alla fine più divertente di un gioco che in genere si concludeva dopo tre o quattro lanci di switch.

Passaggio 5: conclusione

Siamo rimasti molto contenti del risultato finale di questo progetto; non solo perché la versione finale del gioco è stata divertente da giocare, ma anche perché la creazione e la programmazione del progetto ci hanno richiesto di utilizzare la maggior parte, se non tutto, di ciò che abbiamo appreso in questo trimestre. Abbiamo utilizzato flip flop, contatori, FSM, l'orologio, l'input dell'utente dalla scheda e l'output sul display a sette segmenti.

Abbiamo anche appreso come alcuni errori di sintassi potrebbero interrompere completamente il programma (anche se sarebbero considerati validi in altri linguaggi di programmazione come Python o Java) e che solo dopo più simulazioni e più iterazioni del codice caricato e testato sul board, sarai finalmente in grado di eliminare tutti i bug dal tuo codice.

Consigliato: