Πίνακας περιεχομένων:

2 Παιχνίδι Ανταγωνιστικό VS Χρονομέτρηση: 4 Βήματα
2 Παιχνίδι Ανταγωνιστικό VS Χρονομέτρηση: 4 Βήματα

Βίντεο: 2 Παιχνίδι Ανταγωνιστικό VS Χρονομέτρηση: 4 Βήματα

Βίντεο: 2 Παιχνίδι Ανταγωνιστικό VS Χρονομέτρηση: 4 Βήματα
Βίντεο: Miki Biasion: Τα χρυσά χρόνια του Group B - Συνέντευξη από τον Davide Cironi 2024, Ιούλιος
Anonim
2 Ανταγωνιστικό παιχνίδι χρονισμού VS Player
2 Ανταγωνιστικό παιχνίδι χρονισμού VS Player

Θα χρειαστείτε:

1. Digilent Basys 3, FPGA Board (ή οποιοδήποτε άλλο FPGA,)

2. Μια σχετικά ενημερωμένη έκδοση του Vivado ή κάποιου άλλου περιβάλλοντος VHDL

3. Ένας υπολογιστής που μπορεί να εκτελέσει το αναφερόμενο πρόγραμμα.

Βήμα 1: Το ίδιο το παιχνίδι

Το ίδιο το παιχνίδι
Το ίδιο το παιχνίδι

Πώς αλληλεπιδρά το FSM με τις ενότητες.

Πώς να παίξεις

Για να ξεκινήσετε, πατήστε το μεσαίο κουμπί. Αυτό θα προκαλέσει την ένδειξη "99", που αντιπροσωπεύει την υγεία του παίκτη δύο, στην οθόνη των επτά τμημάτων. Στη συνέχεια, τα LED ανάβουν διαδοχικά από δεξιά προς τα αριστερά. Αυτό σχηματίζει μια γραμμή ισχύος. Μόλις γεμίσει η μπάρα τροφοδοσίας, επανεκκινείται. Το αντικείμενο του παίκτη 1 είναι να γυρίσει το διακόπτη του όταν η ράβδος είναι όσο το δυνατόν ψηλότερα. Όσο περισσότερα LED ανάβουν, τόσο περισσότερη ζημιά κάνει ο παίκτης στη συσκευή δύο. Αφού ένας παίκτης ανατρέψει τον διακόπτη του, η ζημιά που προκαλείται αφαιρείται από την υγεία του παίκτη δύο. Στη συνέχεια, μεταβαίνει στη σειρά του παίκτη δύο. Τώρα, ο αριθμός που εμφανίζεται αντιπροσωπεύει την υγεία του παίκτη και η γραμμή τροφοδοσίας γεμίζει από αριστερά προς τα δεξιά. Μόλις ο παίκτης δύο κάνει την κίνησή του, η ζημιά αφαιρείται και επιστρέφει ξανά στη σειρά του παίκτη. Αυτό επαναλαμβάνεται έως ότου ένας παίκτης φτάσει στο 0. Επισυνάπτεται βίντεο αυτής της λειτουργίας.

Βήμα 2: FSM

FSM
FSM
FSM
FSM
FSM
FSM
FSM
FSM

Αυτό το παιχνίδι είναι ουσιαστικά ένα μεγάλο μηχάνημα πεπερασμένης κατάστασης, στο οποίο συμβαίνει μια περίπλοκη λογική με βάση την κατάσταση στην οποία βρίσκεται ο FSM.

Κατάσταση 1: ΜενούΗ πρώτη κατάσταση είναι η οθόνη μενού, η οποία είναι μία από τις πιο απλές καταστάσεις. Περιλαμβάνει την επτά οθόνη που εμφανίζει τη λέξη "PLAY" και το κουμπί που προκαλεί την έναρξη του παιχνιδιού. Το κουμπί, BTN, μας οδηγεί στην επόμενη κατάσταση, που είναι η σειρά του παίκτη.

Κατάσταση 2: Σειρά του παίκτη Ένα

Η στροφή του παίκτη ένα ενεργοποιεί ένα σήμα που προκαλεί στην οθόνη των επτά τμημάτων να εμφανίζεται η κατάσταση της υγείας του παίκτη δύο. Ένα άλλο σήμα ενεργοποιείται για να ενεργοποιήσει έναν καταχωρητή αλλαγής που εισάγεται από μια άλλη μονάδα που δημιουργήσαμε (Pone.vhd). Αυτός ο καταχωρητής αλλαγής κάνει το LED να ανάβει όπως ένας αυξανόμενος δείκτης ισχύος σε άλλα παιχνίδια και στη συνέχεια θα επανέλθει στο 0 όταν φτάσει το μέγιστο ποσό των LED που θα μπορούσε να ανάψει. Ενημερώνεται στην αυξανόμενη άκρη του ρολογιού που λαμβάνεται από το barclock.vhd, το οποίο τροποποιείται από ένα δανεικό αρχείο εργαστηρίου. Είχαμε τη μπάρα του παίκτη να ξεκινά από τα δεξιά και να γεμίζει προς τα αριστερά, επειδή ο διακόπτης του παίκτη είναι επίσης στα αριστερά (για διαισθητική εμπειρία χρήστη). Μόλις ο διακόπτης αναστραφεί, η κατάσταση μεταβαίνει στη συσκευή αναπαραγωγής μία έκπτωση και η ποσότητα των ενεργών LED αποθηκεύεται σε ένα σήμα.

Κατάσταση 3: Αφαίρεση παίκτη 1 Το σήμα με το ποσό των ενεργών LED καθορίζει την ποσότητα της υγείας που αφαιρείται. Αυτό γίνεται έχοντας έναν άλλο καταχωρητή βάρδιας (deductor1.vhd) που αντί να αυξάνει τα LED, τα μειώνει. Αυτό μειώνεται στην ανερχόμενη άκρη μιας από τις μονάδες ρολογιού div που δανειστήκαμε και τροποποιήσαμε (downcounterclock.vhd). Δεδομένου ότι ένα LED είναι απενεργοποιημένο, αφαιρείται ένας βαθμός υγείας από τη συνολική υγεία του παίκτη δύο. Εάν κατά τη διάρκεια αυτής της διαδικασίας ο παίκτης δύο φτάσει στο 0, τότε σταματάμε και προχωράμε αμέσως στην κατάσταση "Game over". Διαφορετικά, μόλις το διάνυσμα LED φτάσει στο "000000000000000000", προχωράμε στη σειρά του παίκτη δύο.

Κατάσταση 4: Η στροφή του παίκτη δύο Η σειρά του παίκτη δύο είναι ακριβώς όπως η σειρά του παίκτη, εκτός από το shift shift για αυτό (Ptwo.bhd) από αριστερά προς τα δεξιά και ο διακόπτης βρίσκεται στη δεξιά πλευρά του πίνακα. Ένα σήμα ενεργοποιείται για να έχει την οθόνη υγείας του Player 1. Μόλις ο διακόπτης 2 είναι ενεργός, μεταβαίνει στη στροφή της έκπτωσης του παίκτη δύο.

Στάδιο 5: Αφαίρεση παίκτη δύο Ακριβώς όπως η σειρά του παίκτη δύο, ο παίκτης δύο αφαίρεση ενεργεί πολύ όπως ο παίκτης ένα έκπτωση. Η κύρια διαφορά είναι ότι ο καταχωρητής αλλαγής ταχυτήτων που ελέγχει την απενεργοποίηση της λυχνίας LED πηγαίνει προς την αντίθετη κατεύθυνση, κάτι που είναι μια εύκολη τροποποίηση όταν έχετε την έκπτωση του παίκτη να λειτουργεί σωστά.

Στάδιο 6: Ολοκληρώθηκε το παιχνίδι Αν κάποιος παίκτης φτάσει σε μηδενική κατάσταση υγείας, το παιχνίδι μεταβαίνει σε αυτήν την κατάσταση. Τίποτα φανταχτερό οθόνες. Εάν πατήσετε ένα BTN, τότε η κατάσταση υγείας επανέρχεται στο 99 και η κατάσταση επιστρέφει στο μενού, ξεκινώντας ουσιαστικά το παιχνίδι από την αρχή.

Βήμα 3: Ενότητες

Ενότητες
Ενότητες

Διάγραμμα Black Box για το παιχνίδι

Downcounterclock (βασίζεται στην ενότητα clk_div.vhd από τον Bryan Mealy):

Αυτό είναι το ρολόι που χειρίζεται τον χρόνο των εκπτώσεων. Η σταθερά που ονομάζεται max_count είναι 3x μεγαλύτερη από τη σταθερά max_count της barclock. Αυτό θα κάνει τους εκλογείς 3x πιο αργούς από την ταχύτητα της ράβδου.

Barclock - (βασίζεται στην ενότητα clk_div.vhd από τον Bryan Mealy):

Αυτό το ρολόι χειρίζεται το χρονοδιάγραμμα των μετρητών ισχύος, το οποίο αυξήσαμε γρήγορα για να προσθέσουμε δυσκολία στο παιχνίδι. Αυτός ο χρόνος μπορεί να προσαρμοστεί σύμφωνα με τις προτιμήσεις σας, αυξάνοντας την ταχύτητα κάνοντας τη σταθερή μέγιστη μέτρηση μεγαλύτερο αριθμό ή μειώνοντάς την κάνοντας τη μέγιστη τιμή μικρότερη. Sseg_dec - (Γράφτηκε από τον Bryan Mealy): Αυτή η ενότητα λαμβάνει ως είσοδο έναν αριθμό 8 bit, τον οποίο αποκωδικοποιεί, μετατρέποντας τον αριθμό στο δεκαδικό του ισοδύναμο και μετά εξάγει στην οθόνη των επτά τμημάτων. Για να λειτουργήσει αυτό το αρχείο, πρέπει να βεβαιωθείτε ότι οι περιορισμοί σας ταιριάζουν με τους δικούς μας.

Αρτος αραβοσίτου:

Αυτός είναι ένας καταχωρητής αλλαγής που μετατοπίζει τα κομμάτια προς τα αριστερά, προσθέτοντας ένα ζεστό κομμάτι για να φαίνεται ότι ο δείκτης ισχύος αυξάνεται. Όταν όλα τα bit είναι ζεστά, όλα τα bits επανέρχονται στο ‘0’ και ο κύκλος ξεκινά από την αρχή.

Ptwo:

Αυτή είναι μια ανεστραμμένη έκδοση της μονάδας P1.

Εκπτώσεις 1:

Αυτός είναι ένας συνδυασμός ενός καταχωρητή βάρδιας και ενός αφαιρέτη. Ο καταχωρητής μετατόπισης πηγαίνει προς την αντίθετη κατεύθυνση του καταχωρητή μετατόπισης του P1, υποδεικνύοντας μια έκπτωση. Αυτό αφαιρεί επίσης 1 από την υγεία του Παίκτη 2 για κάθε κύκλο ρολογιού, οπότε με το συνδυασμό αυτών των δύο λειτουργιών, θα φαίνεται ότι η υγεία του αντιπάλου μειώνεται κατά 1 για κάθε led της μπάρας υγείας που κατεβαίνει.

Deductor2: Αυτή είναι μια ανεστραμμένη έκδοση της μονάδας Deductor1.

PlayDecoder (δανείστηκε και τροποποιήθηκε κατά κόρον από το ekchen35649 το 133 του διδάσκον): Αυτό χρησιμοποιείται στην κατάσταση μενού για να εμφανιστεί η λέξη "PLAY" στον αποκωδικοποιητή των επτά τμημάτων.

Βήμα 4: Δοκιμή

Αυτό το παιχνίδι ήταν αρχικά εμπνευσμένο από ένα από τα μίνι παιχνίδια του Kirby. Είναι ένα απλό παιχνίδι δύο παικτών που μπορεί να παιχτεί σε ένα Basys 3 Board ή οποιοδήποτε FPGA.

Βήμα 1: Απαιτούμενα υλικά

Θα χρειαστείτε: Digilent Basys 3, FPGA Board (ή οποιοδήποτε άλλο) Μια σχετικά ενημερωμένη έκδοση του Vivado ή κάποιο άλλο περιβάλλον vhdl Υπολογιστής που μπορεί να τρέξει το αναφερόμενο πρόγραμμα A εγκεφάλου

Βήμα 2: Το ίδιο το παιχνίδι

Πώς να παίξεις

Για να ξεκινήσετε, πατήστε το μεσαίο κουμπί. Αυτό θα προκαλέσει την ένδειξη "99", που αντιπροσωπεύει την υγεία του παίκτη δύο, στην οθόνη των επτά τμημάτων. Στη συνέχεια, τα LED ανάβουν διαδοχικά από δεξιά προς τα αριστερά. Αυτό σχηματίζει μια γραμμή ισχύος. Μόλις γεμίσει η μπάρα τροφοδοσίας, επανεκκινείται. Το αντικείμενο του παίκτη 1 είναι να γυρίσει το διακόπτη του όταν η μπάρα είναι όσο το δυνατόν ψηλότερα. Όσο περισσότερες λυχνίες LED ανάβουν, τόσο μεγαλύτερη ζημιά κάνει ο παίκτης στη συσκευή δύο. Αφού ένας παίκτης ανατρέψει τον διακόπτη του, η ζημιά που προκαλείται αφαιρείται από την υγεία του παίκτη δύο. Στη συνέχεια, μεταβαίνει στη σειρά του παίκτη δύο. Τώρα, ο αριθμός που εμφανίζεται αντιπροσωπεύει την υγεία του παίκτη και η γραμμή τροφοδοσίας γεμίζει από αριστερά προς τα δεξιά. Μόλις ο παίκτης δύο κάνει την κίνησή του, η ζημιά αφαιρείται και επιστρέφει ξανά στη σειρά του παίκτη. Αυτό επαναλαμβάνεται έως ότου ένας παίκτης φτάσει το 0. Επισυνάπτεται βίντεο αυτής της λειτουργίας.

Για να παίξετε το παιχνίδι, φορτώστε το σε έναν πίνακα basys και πατήστε το μεσαίο κουμπί. Προσπαθήστε να αναποδογυρίσετε το διακόπτη με όσο το δυνατόν περισσότερα LED και, στη συνέχεια, περιμένετε και παρακολουθήστε καθώς ο πίνακας αφαιρεί αυτά τα σημεία από την υγεία του αντιπάλου σας. Στη συνέχεια, περάστε το στον φίλο σας και

Βήμα 3: FSM

Αυτό το παιχνίδι είναι ουσιαστικά ένα μεγάλο μηχάνημα πεπερασμένης κατάστασης, στο οποίο συμβαίνει μια περίπλοκη λογική με βάση την κατάσταση στην οποία βρίσκεται ο FSM.

(Κρατικό διάγραμμα)

Κατάσταση 1: Μενού

Η πρώτη κατάσταση είναι η οθόνη μενού, η οποία είναι μία από τις πιο απλές καταστάσεις. Περιλαμβάνει την επτά οθόνη που εμφανίζει τη λέξη "PLAY" και το κουμπί που προκαλεί την έναρξη του παιχνιδιού. Το κουμπί, BTN, μας οδηγεί στην επόμενη κατάσταση, που είναι η σειρά του παίκτη.

Κατάσταση 2: Σειρά του παίκτη Ένα

Η στροφή του παίκτη ένα ενεργοποιεί ένα σήμα που προκαλεί στην οθόνη των επτά τμημάτων να εμφανίζεται η κατάσταση της υγείας του παίκτη δύο. Ένα άλλο σήμα ενεργοποιείται για να ενεργοποιήσει έναν καταχωρητή αλλαγής που έχει εισαχθεί από μια άλλη μονάδα που δημιουργήσαμε (Pone.vhd). Αυτός ο καταχωρητής αλλαγής κάνει το LED να ανάβει όπως ένας αυξανόμενος δείκτης ισχύος σε άλλα παιχνίδια και στη συνέχεια θα επανέλθει στο 0 όταν φτάσει στο μέγιστο ποσό LED που θα μπορούσε να ανάψει. Ενημερώνεται στην ανερχόμενη άκρη του ρολογιού που λαμβάνεται από το barclock.vhd, το οποίο τροποποιείται από ένα δανεικό αρχείο εργαστηρίου. Είχαμε τη γραμμή του παίκτη να ξεκινά από τα δεξιά και να γεμίζει προς τα αριστερά, επειδή ο διακόπτης του παίκτη είναι επίσης στα αριστερά (για διαισθητική εμπειρία χρήστη). Μόλις ο διακόπτης αναστραφεί, η κατάσταση μεταβαίνει στη συσκευή αναπαραγωγής μία έκπτωση και η ποσότητα των ενεργών LED αποθηκεύεται σε ένα σήμα.

Κατάσταση 3: Έκπτωση παίκτη 1

Το σήμα με την ποσότητα ενεργού LED καθορίζει την ποσότητα της υγείας που αφαιρείται. Αυτό γίνεται έχοντας έναν άλλο καταχωρητή βάρδιας (deductor1.vhd) που αντί να αυξάνει τα LED, τα μειώνει. Αυτό μειώνεται στην ανερχόμενη άκρη μιας από τις μονάδες ρολογιού div που δανειστήκαμε και τροποποιήσαμε (downcounterclock.vhd). Δεδομένου ότι ένα LED είναι απενεργοποιημένο, αφαιρείται ένας βαθμός υγείας από τη συνολική υγεία του παίκτη δύο. Εάν κατά τη διάρκεια αυτής της διαδικασίας ο παίκτης δύο φτάσει στο 0, σταματάμε και αμέσως προχωράμε στην κατάσταση "Game over". Διαφορετικά, μόλις το διάνυσμα LED φτάσει στο "000000000000000000", προχωράμε στη σειρά του παίκτη δύο.

Πολιτεία 4: Σειρά του παίκτη Δύο

Η στροφή του παίκτη δύο είναι ακριβώς όπως η σειρά του παίκτη, εκτός από το shift shift για αυτόν (Ptwo.bhd) που πηγαίνει από αριστερά προς τα δεξιά και ο διακόπτης βρίσκεται στη δεξιά πλευρά του πίνακα. Ένα σήμα ενεργοποιείται για να έχει την οθόνη υγείας του Player 1. Μόλις ο διακόπτης 2 είναι ενεργός, μεταβαίνει στη στροφή της έκπτωσης του παίκτη δύο.

Στάδιο 5: Εκκρεμεί παίκτης δύο

Ακριβώς όπως η σειρά του παίκτη δύο, ο παίκτης δύο αφαίρεση ενεργεί πολύ όπως ο παίκτης ένα έκπτωση. Η κύρια διαφορά είναι ότι ο καταχωρητής αλλαγής ταχυτήτων που ελέγχει την απενεργοποίηση της λυχνίας LED πηγαίνει προς την αντίθετη κατεύθυνση, κάτι που είναι μια εύκολη τροποποίηση όταν έχετε την έκπτωση του παίκτη να λειτουργεί σωστά.

Στάδιο 6: Ολοκληρώθηκε το παιχνίδι Αν κάποιος παίκτης φτάσει σε μηδενική κατάσταση υγείας, το παιχνίδι μεταβαίνει σε αυτήν την κατάσταση. Τίποτα φανταχτερό οθόνες. Εάν πατήσετε ένα BTN, τότε η κατάσταση υγείας επανέρχεται στο 99 και η κατάσταση επιστρέφει στο μενού, ξεκινώντας ουσιαστικά το παιχνίδι από την αρχή.

Μαύρο κουτί

Βήμα 4: Ενότητες

Downcounterclock (βασίζεται στην ενότητα clk_div.vhd από τον Bryan Mealy):

Αυτό είναι το ρολόι που χειρίζεται τον χρόνο των εκπτώσεων. Η σταθερά που ονομάζεται max_count είναι 3x μεγαλύτερη από τη σταθερά max_count της barclock. Αυτό θα κάνει τους εκλογείς 3x πιο αργούς από την ταχύτητα της ράβδου.

Barclock - (βασισμένο στην ενότητα clk_div.vhd από τον Bryan Mealy): Αυτό το ρολόι χειρίζεται το χρονοδιάγραμμα των μετρητών ισχύος, το οποίο αυξήσαμε γρήγορα για να προσθέσουμε δυσκολία στο παιχνίδι. Αυτός ο χρόνος μπορεί να προσαρμοστεί σύμφωνα με τις προτιμήσεις σας, αυξάνοντας την ταχύτητα κάνοντας τον σταθερό μέγιστο αριθμό μεγαλύτερο ή μειώνοντάς τον κάνοντας τον max_count έναν μικρότερο αριθμό. Sseg_dec - (Γράφτηκε από τον Bryan Mealy): Αυτή η ενότητα λαμβάνει έναν αριθμό 8 bit ως είσοδο, τον οποίο αποκωδικοποιεί, μετατρέποντας τον αριθμό στο δεκαδικό του ισοδύναμο και μετά εξάγει στην οθόνη των επτά τμημάτων. Για να λειτουργήσει αυτό το αρχείο, πρέπει να βεβαιωθείτε ότι οι περιορισμοί σας ταιριάζουν με τους δικούς μας.

Pone: Πρόκειται για έναν καταχωρητή αλλαγής που μετατοπίζει τα κομμάτια προς τα αριστερά, προσθέτοντας ένα ζεστό κομμάτι για να φαίνεται ότι ο δείκτης ισχύος αυξάνεται. Όταν όλα τα bit είναι ζεστά, όλα τα bits επανέρχονται στο ‘0’ και ο κύκλος ξεκινά από την αρχή.

Ptwo: Αυτή είναι μια ανεστραμμένη έκδοση της μονάδας P1.

Deductor1: Αυτός είναι ένας συνδυασμός ενός καταχωρητή βάρδιας και ενός αφαιρέτη. Ο καταχωρητής μετατόπισης πηγαίνει προς την αντίθετη κατεύθυνση του καταχωρητή μετατόπισης του P1, υποδεικνύοντας μια έκπτωση. Αυτό αφαιρεί επίσης 1 από την υγεία του Παίκτη 2 για κάθε κύκλο ρολογιού, οπότε με το συνδυασμό αυτών των δύο λειτουργιών, θα φαίνεται ότι η υγεία του αντιπάλου μειώνεται κατά 1 για κάθε led της μπάρας υγείας που κατεβαίνει.

Deductor2: Αυτή είναι μια ανεστραμμένη έκδοση της μονάδας Deductor1.

PlayDecoder (δανεισμένο και ελαφρώς τροποποιημένο από το ekchen35649 το 133 του διδακτικό):

Αυτό χρησιμοποιείται στην κατάσταση μενού για την εμφάνιση της λέξης "PLAY" στον αποκωδικοποιητή επτά τμημάτων.

To Do: εικόνες, βίντεο

Συνιστάται: