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

Arduino Space Rocks Παιχνίδι: 3 Βήματα
Arduino Space Rocks Παιχνίδι: 3 Βήματα

Βίντεο: Arduino Space Rocks Παιχνίδι: 3 Βήματα

Βίντεο: Arduino Space Rocks Παιχνίδι: 3 Βήματα
Βίντεο: Νέα Raspberry Pi 3 Tutorial - Πώς να δημιουργήσει για Gaming & Entertainment Έργα 2024, Ιούλιος
Anonim
Παιχνίδι Arduino Space Rocks
Παιχνίδι Arduino Space Rocks

Είτε παίζονται σε υπολογιστή, είτε σε τηλέφωνο, είτε σε κονσόλα παιχνιδιών είτε σε αυτόνομο κουτί, πολλά βιντεοπαιχνίδια περιλαμβάνουν ένα στοιχείο αποφυγής εμποδίων. Σίγουρα, μπορεί να απονεμηθούν πόντοι για τη συλλογή μάρκων ή την εύρεση του δρόμου σας σε έναν λαβύρινθο, αλλά να είστε σίγουροι ότι πιθανότατα υπάρχει κάτι στο παιχνίδι του οποίου μοναδικός σκοπός είναι να σας αποτρέψει από αυτό. Το πρώτο βιντεοπαιχνίδι ήταν το Pong, αλλά μετά από αυτό τα πιο δημοφιλή παιχνίδια ήταν πράγματα όπως "Asteroids" ή "Pac-Man". Μια πιο πρόσφατη παραλλαγή θα ήταν το απλό αλλά εθιστικό παιχνίδι του "Flappy Birds".

Πρόσφατα είδα ότι κάποιος είχε κάνει μια απλή έκδοση δύο επιπέδων του "Flappy Bird" που παίχτηκε σε μια κοινή οθόνη LCD 1602. Νόμιζα ότι αυτό θα ήταν κάτι που θα άρεσε στα εγγόνια, έτσι αποφάσισα να κάνω τη δική μου παραλλαγή από την αρχή. Η έκδοση 1602 έχει μόνο δύο επίπεδα, οπότε αποφάσισα να χρησιμοποιήσω LCD 2004 (20x4) για να αυξήσω ελαφρώς τη δυσκολία του παιχνιδιού. Επίσης, επέλεξα να το κάνω να μοιάζει περισσότερο με τους "Αστεροειδείς", κάνοντας τον παίκτη να καθοδηγεί ένα "πλοίο" μέσω ενός λαβύρινθου από "διαστημικούς βράχους". Ακόμα κι αν δεν ενδιαφέρεστε για τη δημιουργία του παιχνιδιού, μπορεί να υπάρχουν κάποια στοιχεία του λογισμικού που μπορείτε να χρησιμοποιήσετε σε ένα από τα δικά σας έργα.

Βήμα 1: Υλικό

Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα

Το υλικό μπορεί να βασιστεί σχεδόν σε οποιαδήποτε έκδοση Arduino. Έκανα το πρωτότυπο χρησιμοποιώντας ένα Nano και στη συνέχεια έκανα τον κωδικό σε ένα τσιπ ATMega328. Αυτό είναι το ίδιο τσιπ που χρησιμοποιείται στο Nano, αλλά η χρήση του από μόνο του επιτρέπει μια πιο συμπαγή κατασκευή και λιγότερη κατανάλωση ενέργειας. Όπως καταλαβαίνετε, έχτισα το κύκλωμα σε μια μικρή σανίδα ψωμιού που ήταν κουμπαρά στην μονάδα LCD. Η άλλη πτυχή που διαφέρει είναι ότι το Nano λειτουργεί στα 16-MHz χρησιμοποιώντας εξωτερικό κρύσταλλο, αλλά επέλεξα να χρησιμοποιήσω τον ενσωματωμένο ταλαντωτή 8-MHz για το τσιπ ATMega328. Αυτό εξοικονομεί εξαρτήματα και ισχύ.

Η οθόνη LCD του 2004 διασυνδέεται με το Arduino με τον ίδιο τρόπο όπως μια LCD 1602. Μια ενδιαφέρουσα διαφορά είναι στη διεύθυνση των τοποθεσιών προβολής. Προφανώς υπάρχει διαφορά επειδή υπάρχουν τέσσερις γραμμές αντί για δύο, αλλά το 2004, η τρίτη γραμμή είναι προέκταση της πρώτης γραμμής και η τέταρτη γραμμή είναι επέκταση της δεύτερης γραμμής. Με άλλα λόγια, αν είχατε ένα δοκιμαστικό πρόγραμμα που μόλις έστειλε μια σειρά χαρακτήρων στην οθόνη LCD, ο 21ος χαρακτήρας θα εμφανιζόταν στην αρχή της τρίτης γραμμής και ο 41ος χαρακτήρας θα γυρίσει στην αρχή της πρώτης γραμμής. Χρησιμοποιώ αυτό το χαρακτηριστικό στο λογισμικό για να διπλασιάσω αποτελεσματικά το μήκος του λαβυρίνθου.

Αποφάσισα να τροφοδοτήσω την μπαταρία της έκδοσης, οπότε χρησιμοποίησα μια κοινή μπαταρία ιόντων λιθίου 18650, 3,6 βολτ. Αυτό απαιτούσε να προσθέσω μια μικρή πλακέτα για να επιτρέψει την επαναφόρτιση USB και μια άλλη μικρή πλακέτα για να αυξήσει την τάση της μπαταρίας στα 5 βολτ για την οθόνη LCD και το τσιπ ATMega. Οι εικόνες δείχνουν τις ενότητες που χρησιμοποίησα, αλλά υπάρχουν επίσης μονάδες all-in-one που κάνουν και τις δύο λειτουργίες.

Βήμα 2: Λογισμικό

Το λογισμικό είναι το ίδιο τόσο για το τσιπ Nano όσο και για το τσιπ ATMega328. Η μόνη διαφορά είναι στη μέθοδο προγραμματισμού. Χρησιμοποιώ τη δική μου έκδοση barebones του λογισμικού 1602 LCD και το λογισμικό LCD σε αυτό το έργο βασίζεται σε αυτό. Χρειάστηκε να προσθέσω δυνατότητες για την αντιμετώπιση των επιπλέον γραμμών της οθόνης του 2004 και επίσης πρόσθεσα ρουτίνες για τη μετατόπιση της οθόνης. Η μετατόπιση οθόνης παρέχει το εφέ κίνησης των "βράχων" πέρα από το "πλοίο".

Όπως αναφέρθηκε προηγουμένως, οι γραμμές 1 και 3 σχηματίζουν μια κυκλική ουρά και οι γραμμές 2 και 4 το κάνουν επίσης. Αυτό σημαίνει ότι μετά από 20 βάρδιες, οι γραμμές 1 και 3 αλλάζουν και οι γραμμές 2 και 4 αλλάζουν. Μετά από 40 βάρδιες οι γραμμές επιστρέφουν στις αρχικές τους θέσεις. Λόγω αυτής της συμπεριφοράς, ο αρχικός λαβύρινθος 20 χαρακτήρων γίνεται εντελώς διαφορετικός όταν οι γραμμές αλλάζουν. Αυτό έκανε τη ζωή ενδιαφέρουσα όταν προσπάθησα να δημιουργήσω έναν λαβύρινθο. Τελικά άνοιξα ένα υπολογιστικό φύλλο Excel για να μπορέσω να χαράξω τη διαδρομή χωρίς να χρειάζεται να αλλάζω συνεχώς το λογισμικό. Το λογισμικό που παρέχεται εδώ έχει δύο εκδόσεις του λαβυρίνθου (η μία σχολιάζεται), ώστε να μπορείτε να επιλέξετε ποια θέλετε ή να φτιάξετε τη δική σας.

Αρχικά ήθελα αυτό να είναι αρκετά απλό ώστε να μπορούν να το παίζουν τα μικρά εγγόνια, αλλά ήθελα επίσης να έχει κάποια επιπλέον πρόκληση αν αυτοί (ή κάποιος άλλος) τα καταφέρουν πολύ καλά. Το παιχνίδι ξεκινά με το ρυθμό μετατόπισης που ορίζεται στο 1 δευτερόλεπτο. Ο εσωτερικός ρυθμός τικ είναι 50ms, οπότε υπάρχουν 20 διαστήματα κατά τα οποία μπορείτε να πατήσετε τα κουμπιά πάνω/κάτω. Στην πραγματικότητα, ένα πατημένο κουμπί καταναλώνει 2 τικ επειδή χρησιμοποιείται ένα διάστημα 50ms για τον εντοπισμό της πρέσας και ένα άλλο διάστημα 50ms χρησιμοποιείται για να περιμένει την κυκλοφορία. Με τον προεπιλεγμένο λαβύρινθο, ο μέγιστος αριθμός πιέσεων που απαιτούνται πριν από την επόμενη βάρδια είναι τρεις. Ο απλός τρόπος για να αυξήσετε τη δυσκολία του παιχνιδιού είναι να συντομεύσετε το χρόνο μεταξύ των βαρδιών, ώστε μερικές γραμμές κώδικα να το κάνουν αυτό καθώς αυξάνεται το σκορ. Ο ρυθμός βάρδιας ρυθμίζεται να επιταχύνει κατά 50ms κάθε 20 βάρδιες, με τον ελάχιστο ρυθμό να περιορίζεται στα 500ms. Είναι εύκολο να αλλάξετε αυτές τις παραμέτρους.

Εκτός από την αλλαγή του ρυθμού μετατόπισης, η κύρια λογική στο λογισμικό είναι να μετακινήσετε το "πλοίο" και να προσδιορίσετε εάν το "πλοίο" έχει συγκρουστεί με ένα "βράχο". Αυτές οι λειτουργίες εκμεταλλεύονται τον καθορισμένο πίνακα "rock/space" και επίσης τον πίνακα που καθορίζει τις θέσεις μνήμης στην οθόνη. Ο αριθμός αλλαγών αντιστοιχεί στο μήκος γραμμής της οθόνης LCD (0-19) και χρησιμοποιείται ως δείκτης σε αυτούς τους πίνακες. Η λογική περιπλέκεται κάπως από το γεγονός ότι οι γραμμές αλλάζουν κάθε 20 βάρδιες. Παρόμοια λογική χρησιμοποιείται για τον προσδιορισμό της θέσης του «πλοίου» που μπορεί να βρίσκεται σε οποιαδήποτε από τις τέσσερις γραμμές.

Η βαθμολογία για κάθε παιχνίδι είναι απλώς η καταμέτρηση του αριθμού των βαρειών που συνέβησαν και η υψηλή βαθμολογία αποθηκεύεται στην εσωτερική EEROM του μικροελεγκτή. Η βιβλιοθήκη EEPROM χρησιμοποιείται για την ανάγνωση και εγγραφή σε αυτήν τη μνήμη. Οι διαθέσιμες ρουτίνες επιτρέπουν την ανάγνωση/εγγραφή και ανάγνωση/εγγραφή τιμών κυμαινόμενου σημείου. Μια τιμή 0xA5 αποθηκεύεται στην πρώτη θέση EEROM για να δείξει ότι έχει αποθηκευτεί μια υψηλή βαθμολογία. Εάν αυτή η τιμή είναι παρούσα κατά την ενεργοποίηση, τότε η τιμή του κυμαινόμενου σημείου για την υψηλή βαθμολογία διαβάζεται και εμφανίζεται. Εάν η τιμή 0xA5 δεν υπάρχει, τότε καλείται μια ρουτίνα για την εκκίνηση της υψηλής βαθμολογίας σε τιμή 1. Η ίδια ρουτίνα καλείται εάν είναι επιθυμητή η επαναφορά της υψηλής βαθμολογίας. Η υψηλή βαθμολογία επαναφέρεται στην τιμή 1 κρατώντας πατημένο ένα από τα κουμπιά επάνω/κάτω και στη συνέχεια πιέζοντας στιγμιαία το κουμπί επαναφοράς.

Βήμα 3: Παίζοντας το παιχνίδι

Παίζοντας το Παιχνίδι
Παίζοντας το Παιχνίδι
Παίζοντας το Παιχνίδι
Παίζοντας το Παιχνίδι

Όταν εφαρμόζεται ισχύς, εμφανίζεται η τρέχουσα υψηλή βαθμολογία. Αφού εμφανιστεί η υψηλή βαθμολογία, εμφανίζεται ο λαβύρινθος των "βράχων" και του "πλοίου" και το παιχνίδι ξεκινά λίγα δευτερόλεπτα αργότερα. Όταν το "πλοίο" χτυπήσει ένα "βράχο", το μήνυμα "ΣΠΑΣΕΙ ΚΑΙ ΚΑΙΣΕΙ" αναβοσβήνει μερικές φορές πριν εμφανιστεί το σκορ για το παιχνίδι. Εάν δημιουργηθεί μια νέα υψηλή βαθμολογία, τότε εμφανίζεται και αυτό το μήνυμα. Ένα νέο παιχνίδι ξεκινά πατώντας το κουμπί επαναφοράς.

Συνιστάται: