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

Flappy Bird σε ATtiny85 και OLED Display SSD1306: 6 βήματα (με εικόνες)
Flappy Bird σε ATtiny85 και OLED Display SSD1306: 6 βήματα (με εικόνες)

Βίντεο: Flappy Bird σε ATtiny85 και OLED Display SSD1306: 6 βήματα (με εικόνες)

Βίντεο: Flappy Bird σε ATtiny85 και OLED Display SSD1306: 6 βήματα (με εικόνες)
Βίντεο: Arduino Game Project: Pong Game using an Arduino Uno and Color OLED display (SSD1331). Easy tutorial 2024, Σεπτέμβριος
Anonim
Image
Image
Το Υλικό
Το Υλικό

Γεια σε όλους, Σήμερα θα σας δείξω έναν βασικό κλώνο πτηνών που δημιούργησα και πώς μπορείτε να κάνετε ένα παρόμοιο παιχνίδι. Ουσιαστικά θα περάσω από τον κώδικα μαζί σας και θα σας εξηγήσω πώς λειτουργεί σε κάθε βήμα. Αυτό το παιχνίδι είναι κατασκευασμένο για να λειτουργεί σε ATtiny85 χρονισμένο στο 1MHz, με οθόνη OLED I2C. Προς τα εμπρός!

Βήμα 1: Το υλικό

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

Το παιχνίδι μου απαιτεί δύο κουμπιά, ένα ATtiny85, μια οθόνη I2C OLED 128x64px και κάποια πηγή ενέργειας. Το My Instructable Business Card/Game Console: ATtiny85 και OLED Screen σας δείχνει πώς να φτιάξετε έναν πίνακα που έχει όλα όσα χρειάζεστε! Εάν δεν ενδιαφέρεστε να φτιάξετε τον πίνακα μου, βγείτε από το ψωμί σας και θα σας πω τις προδιαγραφές. Μπορείτε να χρησιμοποιήσετε οποιαδήποτε παραλλαγή του ATtiny85. Προτείνω οθόνες OLED όπως αυτή.

  1. Συνδέστε τη μία πλευρά των δύο κουμπιών ώθησης στις ακίδες 2 και 3 στο ATtiny85. Σε αυτά τα καλώδια, προσθέστε επίσης μια αντίσταση 10k ohm συνδεδεμένη στη γείωση (αντίσταση αναδίπλωσης).
  2. Συνδέστε την άλλη πλευρά αυτών των κουμπιών στην τάση. Όταν δεν πατηθεί το κουμπί, η κατάσταση καρφίτσας θα είναι χαμηλή. Όταν πατηθεί, η κατάσταση καρφίτσας θα είναι υψηλή.
  3. Συνδέστε τον πείρο 7 στον πείρο SCL στην οθόνη σας και τον πείρο 5 στον πείρο SDA στην οθόνη σας. Συνδέστε τις ακίδες τροφοδοσίας (VCC και GND) στην οθόνη ανάλογα.
  4. Τέλος, συνδέστε τον πείρο 4 στο ATtiny στη γείωση και τον πείρο 8 στην τάση.

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

Το λογισμικό!
Το λογισμικό!

Επισυνάπτεται εδώ ένας φάκελος με όλα τα αρχεία που χρειάζεστε για να τρέξετε το παιχνίδι. Δύο από τα αρχεία, το FlappyBird.ino και το WallFunctions.h, σχολιάζονται πολύ καλά για την ευχαρίστησή σας στην ανάγνωση. Μπορείτε να ανεβάσετε το σκίτσο FlappyBird.ino στο ATtiny85 σας (στα 1MHz) και να παίξετε μακριά! Εάν σας ενδιαφέρει η εκμάθηση της θεωρίας πίσω από αυτό το παιχνίδι ή θέλετε να φτιάξετε το δικό σας παιχνίδι, διαβάστε παρακάτω!

Υπάρχουν ακόμα μερικά προβλήματα με το παιχνίδι μου. Το I2C δεν είναι ο καλύτερος τρόπος μετάδοσης δεδομένων με οποιοδήποτε μέσο. Σύμφωνα με αυτήν την ανάρτηση, η οθόνη μπορεί να δεχτεί δεδομένα μόνο στα περίπου 100KHz, οπότε ακόμα και αν αυξήσουμε την ταχύτητα ρολογιού ATtiny στα 8MHz, το κανάλι I2C θα παραμείνει το συμφόριο. Η οθόνη μπορεί να εξάγει περίπου 10fps το μέγιστο. Όσο πιο ξεχωριστές εικόνες χρειάζεται να σχεδιάσει η οθόνη, τόσο πιο αργή είναι η όλη διαδικασία. Έτσι, το παιχνίδι μου είναι αρκετά εύκολο καθώς δεν μπορείτε να κάνετε τους τοίχους να κινούνται πολύ γρήγορα στην οθόνη! Ακολουθούν ορισμένες προκλήσεις για εσάς εάν πιστεύετε ότι είστε έτοιμοι για το έργο:

  • Για να κάνετε το παιχνίδι πιο δύσκολο, δείτε αν μπορείτε να κάνετε το διάστημα μεταξύ των τοίχων να είναι 2 αντί για 4. Δεν πρέπει να είναι πολύ δύσκολο όταν καταλάβετε πώς λειτουργεί το πρόγραμμά μου:). Παρακαλώ δημοσιεύστε στα σχόλια αν μπορείτε να το δουλέψετε!
  • Ένα άλλο πράγμα που λείπει από το παιχνίδι μου είναι ένα σύστημα βαθμολογίας και ένας τρόπος για να εμφανιστεί το σκορ και να το αποθηκεύσει. Δείτε αν μπορείτε να εφαρμόσετε ένα!
  • Τέλος, αντί να κάνετε τους τοίχους να κινούνται μία στήλη κάθε φορά, προσπαθήστε να κάνετε κάθε τοίχο να μετακινείται ένα pixel κάθε φορά για ομαλότερη κίνηση.

Βήμα 3: Flappy Bird ATtiny85: Theory

Flappy Bird ATtiny85: Θεωρία
Flappy Bird ATtiny85: Θεωρία

Παρόλο που η οθόνη που χρησιμοποιούμε έχει ύψος 64 pixel για χρήση για το παιχνίδι, είναι δυνατή η τοποθέτηση στοιχείων μόνο σε μπλοκ των 8 pixel. Έτσι, υπάρχουν μόνο 8 πιθανές συντεταγμένες y. Για να διευκολύνουμε τα πράγματα, στο λογισμικό χώρισα ολόκληρη την οθόνη με αυτόν τον τρόπο, δημιουργώντας ένα πλέγμα 16 μπλοκ επί 8 μπλοκ, όπου κάθε μπλοκ είναι 8x8 pixel. Για να γεμίσετε κάθε μπλοκ, κάθε sprite στο παιχνίδι είναι 8x8 pixel. Αυτό κάνει τα πάντα πολύ πιο εύκολα στη διαχείριση. Αν κοιτάξετε την παραπάνω εικόνα, μπορείτε να δείτε πώς χώρισα την οθόνη. Κάθε τοίχος αποτελείται από 6 τετράγωνα, με μια τρύπα ύψους 2 μπλοκ, καθιστώντας το συνολικό ύψος κάθε τοίχου 8 μπλοκ.

Στο πρόγραμμα, κάθε τοίχος αναπαρίσταται ως δομή, που ονομάζεται Wall. Κάθε δομή τοίχου έχει δύο ιδιότητες - holePosition και στήλη. Ο όρος 'holePosition' είναι ένας αριθμός 0-6, καθώς υπάρχουν μόνο 7 πιθανές θέσεις σε έναν τοίχο 8 μπλοκ για μια τρύπα ύψους 2 τεμαχίων. Η "στήλη" είναι ένας αριθμός 0-15, καθώς υπάρχουν 16 στήλες μπλοκ πιθανές στην οθόνη.

Συνιστάται: