Το να μάθετε πώς να γράφετε κώδικα μπορεί να είναι ένα μακρύ ταξίδι. Όχι μόνο πρέπει να βρείτε πόρους για να σας βοηθήσουν να μάθετε, αλλά πρέπει επίσης να βρείτε συναρπαστικές ιδέες έργων που κρατούν την εκπαίδευσή σας σε καλό δρόμο.
Τα βιντεοπαιχνίδια παρέχουν μια εξαιρετική ευκαιρία να προγραμματίσετε κάτι που μπορείτε να απολαύσετε. Και μπορούν επίσης να σας διδάξουν τα βασικά στοιχεία που χρειάζεστε για να είστε καλός προγραμματιστής. Αυτό το άρθρο εξερευνά ένα έργο βιντεοπαιχνιδιών Arduino χειρός DIY για να ξεκινήσετε.
Τι Φτιάχνουμε και Γιατί;
Πριν βουτήξετε στο μέρος του οδηγού αυτού του άρθρου, είναι λογικό να εξερευνήσετε τι φτιάχνουμε και γιατί το επιλέξαμε για αυτό το έργο. Πολλές προκλήσεις έρχονται με τη δημιουργία παιχνιδιών για συσκευές όπως το Arduinos.
- Αποθηκευτικός χώρος: Οι περισσότεροι Πλακέτες Arduino έρχονται με πολύ λίγη RAM ή μνήμη flash. Αυτό όχι μόνο θέτει ένα όριο στην ποσότητα του κώδικα που μπορούν να εκτελέσουν, αλλά επίσης παρουσιάζει προκλήσεις όσον αφορά την εργασία με μεταβλητές.
- Ισχύς επεξεργασίας: Το Arduino που χρησιμοποιήσαμε έχει CPU χαμηλής κατανάλωσης, επομένως είναι αδύνατο να δημιουργήσουμε εφαρμογές που απαιτούν πόρους για αυτό.
- Περιορισμένα εξαρτήματα: Τα Arduinos έχουν πολλές ακίδες διαθέσιμες, αλλά πολλά εξαρτήματα χρειάζονται περισσότερα από ένα. Αυτό μας περιορίζει όσον αφορά τα χειριστήρια και τις εξόδους οθόνης.
Έχοντας κατά νου αυτές τις προκλήσεις, αποφασίσαμε να δημιουργήσουμε μια συσκευή χειρός που τρέχει ένα πολύ απλό παιχνίδι που βασίζεται στην αντίδραση. Θα μπορούσατε εύκολα να φτιάξετε άλλα παιχνίδια για το υλικό με το οποίο εργαζόμαστε και σας ενθαρρύνουμε να είστε δημιουργικοί.
Το ίδιο το παιχνίδι είναι πολύ απλό. Στην οθόνη εμφανίζονται τρία μπλοκ, δύο με περίγραμμα και ένα γεμάτο, το καθένα με ένα αντίστοιχο φυσικό κουμπί παρακάτω. Ο παίκτης πρέπει να πατάει το δεξί κουμπί κάθε γύρο για να συνεχίσει να παίζει και αν πατήσει λάθος κουμπί ή τελειώσει ο χρόνος, το παιχνίδι τελειώνει. Κάθε επιτυχημένο πάτημα κουμπιού απονέμει πόντους. Το παιχνίδι ανεβάζει σιγά σιγά τη δυσκολία του μειώνοντας τον διαθέσιμο χρόνο αντίδρασης.
Καλωδίωση της οθόνης OLED, του Arduino και των κουμπιών
Η καλωδίωση του παιχνιδιού χειρός είναι το πρώτο βήμα σε αυτή τη διαδικασία. Όπως μπορείτε να δείτε στο παραπάνω διάγραμμα κυκλώματος, δεν χρειάζεται να κάνετε πολλές συνδέσεις για να ξεκινήσετε, και μπορείτε ακόμη και να χρησιμοποιήσετε έναν πίνακα breadboard για αυτό το έργο.
Έχουμε ήδη δημοσιεύσει έναν οδηγό για να σας βοηθήσουμε καλωδιακά κουμπιά σε ένα Arduino. Μας Έργο Arduino Aquarium Monitor σας δείχνει πώς να χρησιμοποιήσετε μια οθόνη OLED με έναν μικροελεγκτή σαν αυτόν. Ως εκ τούτου, θα επικεντρωθούμε στον κώδικα για αυτό το έργο για το υπόλοιπο αυτού του άρθρου.
Κωδικός παιχνιδιών χειρός Arduino
Η σωστή μορφοποίηση και οι τακτοποιημένες δομές αρχείων είναι πολύ σημαντικές τόσο για αρχάριους όσο και για βετεράνους προγραμματιστές. Θα ευχαριστήσετε τον εαυτό σας που αφιερώσατε χρόνο για να οργανώσετε σωστά τον κώδικά σας, εάν χρειαστεί να τον επαναλάβετε.
Ο κώδικας χρησιμοποιεί ένα κύριο αρχείο INO για να σχηματίσει τη βάση του έργου μας. Υπάρχει επίσης ένα αρχείο C++ για τον έλεγχο της οθόνης μας, ένα αρχείο C++ για την εκτέλεση του κύριου κώδικα του παιχνιδιού και ένα αρχείο βιβλιοθήκης Arduino για να τα συνδέσετε όλα μαζί.
Θα εμβαθύνουμε σε αυτόν τον κώδικα παρακάτω, αλλά σας ενθαρρύνουμε να ρίξετε μια ματιά στον σχολιασμένο κώδικα στο δικό μας Έργο Arduino Handheld Game στο GitHub. Θα σας βοηθήσει να ανατρέξετε σε αυτό παράλληλα με αυτό το άρθρο.
The Library File (library.h)
Το αρχείο της βιβλιοθήκης μας διαδραματίζει κρίσιμο ρόλο, συνδέοντας τα άλλα αρχεία του έργου μας έτσι ώστε να μπορούν να λειτουργούν ως μια ενιαία εφαρμογή. Αυτό το αρχείο περιέχει δηλώσεις που περιλαμβάνουν τη βιβλιοθήκη Arduino.h και όλες τις λειτουργίες στον κώδικα του παιχνιδιού μας που πρέπει να λειτουργούν μεταξύ των αρχείων μας. Χωρίς αυτό, ο κώδικάς μας απλά δεν θα λειτουργούσε.
Το κύριο αρχείο INO (main.ino)
Όπως πολλά έργα Arduino, αυτό ξεκίνησε με το προεπιλεγμένο πρότυπο που παρέχεται από το Arduino IDE. Αυτό το πρότυπο το δίνει εγκατάσταση και βρόχος συναρτήσεις που χρησιμοποιούμε για να καλέσουμε συναρτήσεις σε άλλα αρχεία μας. Αυτό το αρχείο έχει επίσης μια δήλωση που περιλαμβάνει το αρχείο library.h.
Η λειτουργία ρύθμισης είναι ιδανική για την προετοιμασία της οθόνης και των κουμπιών μας, καθώς εκτελείται μόνο μία φορά όταν το Arduino επαναφέρεται ή ενεργοποιείται. Για αυτό, καλούμε τη συνάρτηση disSetup() στο αρχείο εμφάνισης μας και τη συνάρτηση butSetup() στο αρχείο του παιχνιδιού μας.
Η συνάρτηση loop() είναι ακόμα πιο απλή από τη συνάρτηση setup(), με μία μόνο κλήση στη συνάρτηση gameState() που βρίσκεται στο αρχείο του παιχνιδιού μας. Θα το διερευνήσουμε με περισσότερες λεπτομέρειες αργότερα στο άρθρο.
Το αρχείο κωδικού εμφάνισης (display.cpp)
Χρησιμοποιούμε μια οθόνη OLED SSD1306 για αυτό το έργο, αν και μπορείτε να χρησιμοποιήσετε διαφορετικό τύπο οθόνης εάν επεξεργαστείτε τον κώδικα ανάλογα. Αυτό το αρχείο ξεκινά με τη συμπερίληψη του αρχείου της βιβλιοθήκης, βιβλιοθήκη.χ. Στη συνέχεια, περιλαμβάνει δηλώσεις για τις βιβλιοθήκες SPI, Wire, Adafruit_GX και Adafruit_SSD1306. Μετά από αυτό, ορίζει ορισμένες σταθερές για να παρέχει ρυθμίσεις για την οθόνη.
Η πρώτη λειτουργία, dissetup, αρχικοποιεί την οθόνη και εμφανίζει μια οθόνη εκκίνησης με το λογότυπο. Στη συνέχεια, διαγράφει την οθόνη μετά από αναμονή περίπου 2 δευτερολέπτων. Το κύριο αρχείο μας, main.ino, καλεί το disSetup στο δικό του εγκατάσταση λειτουργία.
Οι υπόλοιπες συναρτήσεις σε αυτό το αρχείο, εκτός από το timerBar(), αποτελούν τις διαφορετικές οθόνες που εμφανίζονται σε όλο το παιχνίδι. Το αρχείο του παιχνιδιού, παιχνίδι.cpp, καλεί καθεμία από αυτές τις συναρτήσεις.
- startGame(): Αυτή η συνάρτηση ελέγχει την πρώτη οθόνη που βλέπει ο παίκτης. Απλώς ρωτά αν είναι έτοιμοι ενώ καλούν το switchInstance λειτουργία που βρέθηκε στο αρχείο του παιχνιδιού.
- startingGame(): Μόλις ο παίκτης ξεκινήσει το παιχνίδι, αυτή η οθόνη δείχνει μια σύντομη αντίστροφη μέτρηση. Στη συνέχεια αλλάζει την κατάσταση του παιχνιδιού ώστε να ταιριάζει.
- inGame(): Αυτή είναι η πιο περίπλοκη από τις λειτουργίες εμφάνισης μας, χρησιμοποιώντας τρεις μεταβλητές για τη φόρτωση κάθε γύρου του παιχνιδιού. Ξεκινά με μια δήλωση if που καθορίζει ποιο από τα τρία πλακίδια θα γεμίσει, ακολουθούμενο από την εμφάνιση των πλακιδίων και του επιπέδου και του σκορ του παίκτη.
- timerBar(): Αυτή η συνάρτηση χρησιμοποιεί μια μεταβλητή για την εμφάνιση μιας γραμμής χρονοδιακόπτη στο κάτω μέρος της οθόνης. Δείχνει στον παίκτη πόσο χρόνο έχει για κάθε γύρο.
- successScreen(): Αυτή είναι μια απλή συνάρτηση που εμφανίζει ένα μήνυμα κάθε φορά που ο παίκτης ολοκληρώνει με επιτυχία έναν γύρο.
- endGame(): Αυτή η τελική συνάρτηση εμφανίζει ένα παιχνίδι στην οθόνη με το σκορ του παίκτη και την επιλογή να ξεκινήσει ξανά το παιχνίδι.
Το αρχείο κώδικα παιχνιδιού (game.cpp)
Τέλος, ως το τελευταίο αρχείο για εξερεύνηση, ήρθε η ώρα να δούμε τον κώδικα του παιχνιδιού. Αυτό το αρχείο, όπως και τα άλλα, ξεκινά με τη συμπερίληψη του αρχείου library.h. Περιέχει επίσης μια μεγάλη λίστα διαφορετικών ακέραιων μεταβλητών που χρησιμοποιούμε κατά τη διάρκεια του παιχνιδιού.
Θα βρείτε τη συνάρτηση butSetup() πριν από οτιδήποτε άλλο. Η συνάρτηση setup() στο κύριο αρχείο μας καλεί το butSetup. Αυτή η συνάρτηση χρησιμοποιεί μεταβλητές για να ρυθμίσει τα κουμπιά μας ως εισόδους που μπορούμε να διαβάσουμε αργότερα.
- switchInstance(): Αυτή η συνάρτηση εναλλάσσεται μεταξύ των περιπτώσεων του παιχνιδιού, από την οθόνη έναρξης στις οθόνες του παιχνιδιού και του παιχνιδιού. Λαμβάνει μια μεταβλητή για να του πει σε ποια κατάσταση παιχνιδιού να μεταβεί. Μια δήλωση if περιμένει να πατηθεί ένα κουμπί για να ξεκινήσει το παιχνίδι από την κατάσταση startGame(). Μια άλλη δήλωση if ξεκινά ξανά το παιχνίδι από την κατάσταση endGame().
- gameState(): Αυτή η συνάρτηση ορίζει τη δυσκολία του παιχνιδιού με βάση το σκορ του παίκτη και καλεί τη σωστή συνάρτηση ανάλογα με την κατάσταση του παιχνιδιού. Ξεκινά με μια σειρά από δηλώσεις if που ορίζουν μεταβλητές με βάση το σκορ του παίκτη, ακολουθούμενες από περισσότερες δηλώσεις if για έλεγχο της τρέχουσας παρουσίας.
- tileSelector(): Αυτή η συνάρτηση δημιουργεί έναν τυχαίο αριθμό μεταξύ 0 και 2 που λέει στο παιχνίδι ποιο από τα τρία πλακίδια να συμπληρώσει κάθε δεδομένη στιγμή.
- theGame(): Αυτή η συνάρτηση είναι αναμφισβήτητα η πιο σημαντική από όλες. Καλεί το επιλογέας πλακιδίων και στο παιχνίδι λειτουργίες, επιλέγοντας ένα νέο πλακίδιο και εμφανίζοντάς το στην οθόνη. Μετά από αυτό, θα βρείτε έναν βρόχο for που λειτουργεί ως χρονόμετρο για κάθε γύρο. Περιέχει ένα σύνολο από δηλώσεις if που πιέζουν το κουμπί και καθορίζουν αν είναι σωστές.
Δημιουργήστε το δικό σας χειροκίνητο παιχνίδι Arduino
Αυτό το άρθρο αποτελεί συνοδευτικό του κώδικα έργου που βρίσκεται στο GitHub. Μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με τις συγκεκριμένες γραμμές κώδικα που χρησιμοποιήσαμε στα σχόλια σε αυτά τα αρχεία. Αλλά μπορείτε επίσης να το φορτώσετε στο Arduino σας και να απολαύσετε τη διασκέδαση.
Η δημιουργικότητα είναι το κλειδί στον κόσμο της ανάπτυξης παιχνιδιών και σας ενθαρρύνουμε να δουλέψετε πάνω στις δικές σας ιδέες παιχνιδιών παράλληλα με αυτήν.
Τα 10 καλύτερα ραδιοφωνικά έργα Arduino
Διαβάστε Επόμενο
Σχετικά θέματα
- Προγραμματισμός
- DIY
- Ιδέες έργων DIY
- DIY Project Tutorials
- Arduino
- Προγραμματισμός
Σχετικά με τον Συγγραφέα

Ο Samuel είναι ένας συγγραφέας τεχνολογίας με έδρα το Ηνωμένο Βασίλειο με πάθος για όλα τα πράγματα DIY. Έχοντας ξεκινήσει επιχειρήσεις στους τομείς της ανάπτυξης ιστοσελίδων και της τρισδιάστατης εκτύπωσης, παράλληλα με την εργασία ως συγγραφέας για πολλά χρόνια, ο Samuel προσφέρει μια μοναδική εικόνα του κόσμου της τεχνολογίας. Εστιάζοντας κυρίως σε έργα τεχνολογίας DIY, δεν του αρέσει τίποτα περισσότερο από το να μοιράζεται διασκεδαστικές και συναρπαστικές ιδέες που μπορείτε να δοκιμάσετε στο σπίτι. Εκτός δουλειάς, ο Samuel μπορεί συνήθως να βρεθεί να κάνει ποδήλατο, να παίζει βιντεοπαιχνίδια υπολογιστή ή να προσπαθεί απεγνωσμένα να επικοινωνήσει με το κατοικίδιο καβούρι του.
Εγγραφείτε στο ενημερωτικό μας δελτίο
Εγγραφείτε στο ενημερωτικό μας δελτίο για συμβουλές τεχνολογίας, κριτικές, δωρεάν ebook και αποκλειστικές προσφορές!
Κάντε κλικ εδώ για να εγγραφείτε