Inhaltsverzeichnis:

Minesweeper - Gunook
Minesweeper - Gunook

Video: Minesweeper - Gunook

Video: Minesweeper - Gunook
Video: Minesweeper Speedrun Former World Record Expert 31.133 seconds 2024, Juli
Anonim
Minensuchboot
Minensuchboot

Für unser CPE 133 Abschlussprojekt beschlossen Chase und ich, ein „Minesweeper“-Spiel zu entwickeln, das Tasten- und Schaltereingaben von einem Basys-3-Board sowie VHDL-Code verwendet. Ein besserer Name für das Spiel könnte „Russisches Roulette“sein, aber wir wollten einen familienfreundlicheren Namen wählen. Das Spiel beinhaltet, dass der Benutzer die mittlere Taste auf dem Basys-Board drückt, um zufällig einen der 16 Schalter mit einer Bombe „aktiv“zu machen. Zwei Spieler drehen dann abwechselnd Schalter um, bis einer der Spieler den Schalter mit der „Bombe“umlegt. In diesem Fall weist die Sieben-Segment-Anzeige die Spieler darauf hin, dass dieser Spieler gerade das Spiel verloren hat.

Schritt 1: Übersicht

Das Projekt nutzte viele der VHDL-Module, die wir im Laufe dieses Quartals eingesetzt haben. Ein Vier-Bit-Zähler wurde in Verbindung mit der Taktflanke verwendet, um eine zufällige Vier-Bit-Zahl zu simulieren, um einen der Schalter zu aktivieren. Ein Zustandsdiagramm wurde auch verwendet, um verschiedene Wörter auf der Sieben-Segment-Anzeige auszugeben, die von „PLAY“reichen, wenn die Spieler mitten im Spiel sind, bis zu „LOSE“, wenn einer der Spieler den aktiven Schalter umgelegt hat.

Schritt 2: Materialien

  • Basys3-Entwicklungsboard von Digilent, Inc.
  • Vivado Design Suite BC_DEC.vhd (Diese Datei wurde uns auf Polylearn zur Verfügung gestellt und wurde von Bryan Mealy geschrieben)
  • Ein 4-Bit-Zähler aus T-Flip-Flops
  • Ein FSM

Schritt 3: Das Spiel erstellen

Das Spiel machen
Das Spiel machen
Das Spiel machen
Das Spiel machen

Der erste Schritt zu diesem Spiel war das Zeichnen eines Schaltplans mit allen Komponenten, die wir verwenden werden. Eingänge für dieses System waren Taster 1, die 16 Schalter und die Uhr. Ausgänge waren die Siebensegmentanzeige und die Anoden. Nach dem Zeichnen des Schaltplans haben wir für jede Komponente in Vivado individuelle Quelldateien geschrieben und diese anhand von Portmaps unter der Hauptquelldatei zusammengestellt.

Die gesamte Basis des Spiels dreht sich darum, einem der 16 Schalter zufällig mit einer Bombe zuzuweisen, und dass die Spieler nicht wissen, welcher Schalter aktiv ist, bis dieser aktive Schalter umgelegt wird. Wir haben uns online mit Zufalls- und Pseudozufallszahlengeneratoren befasst, aber letztendlich entschieden, dass die Verwendung eines 4-Bit-Zählers und die Zuweisung des entsprechenden Schalters als aktiv für das, wonach wir gesucht haben, ausreichend zufällig ist. Wir konnten unseren 4-Bit-Zähler, den wir in einem früheren Projekt erstellt haben, umfunktionieren, um für diese Aufgabe zu arbeiten. Wir haben den Zähler verwendet, um eine Zufallszahl zwischen 0-15 zu erstellen; dann haben wir in der main1-Komponente das dezimale Äquivalent der Zufallszahl dem entsprechenden Schalter auf der Platine zugewiesen. Wie im Schaltplan zu sehen ist, gehen sowohl der Ausgang X ('aktive Bombe') der Hauptkomponente 1 als auch die Schalter, die die Spieler einschalten, zu FSM1. Die Zustandsmaschine gibt einen Ein-Bit-Z-Wert aus, der dann von BC_DEC1 gelesen wird. Die von uns verwendete Finite State Machine hat zwei verschiedene Zustände: Im Zustand A gibt die Siebensegmentanzeige „PLAY“aus und die Maschine bleibt in diesem Zustand, bis sie erkennt, dass der aktivierte Schalter umgelegt ist. Sobald dies geschieht, geht der FSM in den Zustand B über, wo er „LOSE“an die Siebensegmentanzeige ausgibt und in diesem Zustand bleibt, bis alle 16 Schalter auf „0“geschaltet sind. Wenn diese Bedingung erfüllt ist, geht der FSM dann wieder in den Zustand A und wartet auf die Spieler, um ein weiteres Spiel zu beginnen. Ein Moore-Diagramm zum besseren Verständnis dieses FSM ist oben gezeigt.

Schritt 4: Zukünftige Änderungen

Ein paar Modifikationen, die wir überlegten, an unserem Spiel vorzunehmen, beinhalten das Hinzufügen von mehr Bomben zum Spielfeld (möglicherweise von eins auf drei), das Hinzufügen eines Punktezählers und mehrere Runden. Wir haben uns letztendlich gegen diese Verbesserungen entschieden, da wir festgestellt haben, dass das Spielen eines längeren, erweiterten Spiels normalerweise angespannter ist und am Ende mehr Spaß macht als ein Spiel, das normalerweise nach drei oder vier Schalterumschlägen endet.

Schritt 5: Fazit

Wir waren mit dem Endergebnis dieses Projekts sehr zufrieden; nicht nur, weil die endgültige Version des Spiels Spaß gemacht hat, sondern auch, weil wir bei der Erstellung und Programmierung des Projekts das meiste, wenn nicht alles, was wir in diesem Quartal gelernt haben, nutzen mussten. Wir haben Flip-Flops, Zähler, FSMs, die Uhr, Benutzereingaben von der Platine und die Ausgabe an die Siebensegmentanzeige verwendet.

Wir haben auch erfahren, wie ein paar Syntaxfehler das Programm vollständig zerstören können (auch wenn sie in anderen Programmiersprachen wie Python oder Java als gut angesehen würden) und dies nur nach mehreren Simulationen und mehreren Iterationen des Codes, der auf die hochgeladen und getestet wurde Board, werden Sie endlich in der Lage sein, alle Fehler aus Ihrem Code herauszuarbeiten.