Πίνακας περιεχομένων:
- Προμήθειες
- Βήμα 1: Κύριος βρόχος
- Βήμα 2: Joystick
- Βήμα 3: Display Buffer
- Βήμα 4: Invaders, Bullets and the Player
- Βήμα 5: Κάντε το δικό σας
Βίντεο: Space Invaders στο Micropython στο Micro: bit: 5 Steps
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:33
Σε προηγούμενα άρθρα μας έχουμε διερευνήσει τη δημιουργία παιχνιδιών στο GameGo, μια φορητή ρετρό κονσόλα παιχνιδιών που αναπτύχθηκε από την εκπαίδευση TinkerGen. Τα παιχνίδια που φτιάξαμε θύμιζαν παλιά παιχνίδια της Nintendo. Στο σημερινό άρθρο, θα κάνουμε ένα βήμα πίσω, στη χρυσή εποχή των arcade παιχνιδιών. Θα δημιουργήσουμε ξανά το παιχνίδι Space Invaders στο Micropython στο Micro: bit microcontroller - και ως ανατροπή, θα χρησιμοποιήσουμε επίσης την επέκταση BitPlayer Micro: bit, η οποία μας επιτρέπει να παίζουμε πιο εύκολα το παιχνίδι.
Δεδομένου ότι αυτό το σεμινάριο αφορά την κωδικοποίηση του παιχνιδιού στο Micropython, αντί για την παραδοσιακή ακολουθία βήμα προς βήμα που χρησιμοποιήσαμε πριν για μαθήματα γραφικού προγραμματισμού, θα περάσουμε τον κωδικό μπλοκ ανά μπλοκ-περνώντας πάνω από σημαντικές συναρτήσεις, τάξεις και τις κύριες βρόχος. Μπορείτε να κατεβάσετε τον πλήρη κώδικα στο αποθετήριο GitHub αυτού του έργου. Λυγίστε και ξεκινήστε!
Προμήθειες
TinkerGen BitPlayer
BBC Micro: λίγο
Βήμα 1: Κύριος βρόχος
Σε αυτό το σεμινάριο θα χρησιμοποιώ τη λέξη "μέθοδος" αρκετά συχνά. Μια μέθοδος στον python είναι κάπως παρόμοια με μια συνάρτηση, εκτός από τη συσχέτισή της με αντικείμενο/κλάσεις. Έτσι, για απλοποίηση, μπορείτε να το διαβάσετε ως "μια συνάρτηση μέσα στην τάξη". Μπορείτε να διαβάσετε περισσότερα για τις μεθόδους εδώ.
Μπαίνουμε στον κύριο βρόχο με
ενώ δεν είναι game_over:
κατάσταση. Στο εσωτερικό έχουμε τον αριθμό των εισβολέων, την πιθανότητα εμφάνισής τους και τον αριθμό που απαιτείται για να φτάσουμε στο επόμενο επίπεδο από το λεξικό επιπέδων. Στη συνέχεια, ελέγχουμε για κίνηση αριστερά-δεξιά με τις μεθόδους παρουσίας Listen_Dir της παρουσίας κλάσης JoyStick. Εάν μία από τις συνθήκες αξιολογηθεί ως True, αυξάνουμε/μειώνουμε την τιμή x του χαρακτήρα που παίζουμε. Το περιορίζουμε σε [-2, 2] με δύο αν συνθήκες. Στη συνέχεια, προετοιμάζουμε μια παρουσία της κλάσης DisplayBuffer και ελέγχουμε για πάτημα του κουμπιού "shield" ή "fire bullet". Χρησιμοποιούμε τη μέθοδο DisplayBuffer.set () για να ορίσουμε αντικείμενα για μεταγενέστερη απόδοση. Για την απόδοση της ασπίδας χρησιμοποιούμε το DisplayBuffer.set () απευθείας, αλλά για κουκκίδες και εισβολείς τα προσθέτουμε στην αντίστοιχη λίστα τους και τα ορίζουμε () ένα προς ένα για βρόχο με τον ακόλουθο κώδικα για μεταγενέστερη απόδοση με DispBuffer.render ():
για b σε σφαίρες: b.render (dispBuf) για v σε vaders: v.render (dispBuf)
Όλοι οι εισβολείς, οι σφαίρες και η ασπίδα απεικονίζονται μία φορά με κάθε επανάληψη του κύριου βρόχου
dispBuf.render ()
Πριν από το τέλος του κύριου βρόχου ελέγχουμε αν κάποια από τις σφαίρες των εισβολέων έχει φτάσει στο τέλος της οθόνης και αν είναι, τα διαγράφουμε από τις αντίστοιχες λίστες τους.
Βήμα 2: Joystick
Το BitPlayer είναι εύκολο να κρατηθεί και να χρησιμοποιηθεί, με ένα χειριστήριο 2 αξόνων, όπως ελεγκτές Gameboy ή PSP, περιλαμβάνει επίσης άλλα 6 προγραμματιζόμενα κουμπιά με την ένδειξη L, R, A, B, C και D. Για μια συναρπαστική και διαδραστική εμπειρία, το BitPlayer Το ίδιο διαθέτει έναν βομβητή, έναν κινητήρα δόνησης και μια θύρα Grove I2C για να συνδέσετε επιπλέον περιφερειακά όπως μια οθόνη OLED.
Χρησιμοποιούμε μόνο αριστερά-δεξιά rocker του joystick για αυτό το παιχνίδι, για πλήρες παράδειγμα όταν χρησιμοποιείτε όλα τα κουμπιά BitPlayer, μπορείτε να ρίξετε μια ματιά στο joystick_example.py στο αποθετήριο GitHub αυτού του έργου. Κατά τη δημιουργία της παρουσίας της κλάσης JoyStick ελέγχουμε για προεπιλεγμένη ανάγνωση του άξονα Χ και αποθηκεύουμε αυτήν την τιμή στο self. Read_X. Στη συνέχεια, στη συνάρτηση Listen_Dir, ελέγχουμε εάν η απόκλιση από αυτήν την προεπιλεγμένη τιμή είναι μεγαλύτερη από τη μεταβλητή ευαισθησίας (δοκιμάστε να την τροποποιήσετε μόνοι σας, εάν πιστεύετε ότι το JoyStick είναι πολύ ευαίσθητο) και επιστρέφουμε True of False σύμφωνα με την εντοπισμένη κατεύθυνση.
Ας ρίξουμε μια ματιά σε συγκεκριμένο παράδειγμα για το πώς λειτουργεί αυτό:
Ας υποθέσουμε ότι η προεπιλεγμένη ένδειξη άξονα Χ είναι 0. Στη συνέχεια, αν μετακινήσουμε το Joystick δεξιά:
New_X = JoyStick_X.read_analog () #New_X = 200
Δεξιά = New_X - self. Read_X #Right = 200 Left = self. Read_X - New_X #Left = -200
Στη συνέχεια, όταν ελέγχουμε για κατεύθυνση:
Precision = 150if Right> Precision: #200> 150 True Get_Rocker = DIR ['R'] elif Left> Precision: #-200> 150 False Get_Rocker = DIR ['L'] else: Get_Rocker = DIR ['NONE'] if Dir == Get_Rocker: return True else: return False
Βήμα 3: Display Buffer
Η κλάση DisplayBuf είναι υπεύθυνη για τον έλεγχο της οθόνης LED. Γίνεται χρησιμοποιώντας δύο μεθόδους, set () και render (). Η μέθοδος set () αλλάζει τις τιμές που αντιστοιχούν στα εικονοστοιχεία οθόνης LED. Rememberσως θυμάστε ότι τα εικονοστοιχεία στην οθόνη LED Micro: bit μπορούν να εκφραστούν ως συμβολοσειρά ή ως λίστα - "00000: 00000: 00000: 00000: 00000" είναι μια κενή οθόνη. "00000: 00000: 00000: 00000: 00100" είναι μια οθόνη με αμυδρά φωτισμένο pixel στο κέντρο της κάτω σειράς.
00000:
00000
:00000
:00000:
00100"
Αυτή η σημείωση μπορεί να είναι ευκολότερη στην επεξεργασία:)
Έτσι, αυτό που κάνουμε κατά τη διάρκεια του κύριου βρόχου είναι η μέθοδος κλήσης () του DisplayBuf για να ορίσουμε όλα τα αντικείμενά μας που πρέπει να εμφανίζονται στην οθόνη. Στη συνέχεια, χρησιμοποιούμε τη μέθοδο render () για να τα εμφανίσουμε όλα ταυτόχρονα στην οθόνη.
Βήμα 4: Invaders, Bullets and the Player
Οι σφαίρες και οι εισβολείς ανήκουν στην κατηγορία Mover. Οι περιπτώσεις κλάσης Mover έχουν τις θέσεις x, y και την ταχύτητά τους, καθώς και τη φωτεινότητα. Η κλάση Mover έχει δύο μεθόδους παρουσίας, set () και move (). Η μέθοδος set () καλεί απλώς τη μέθοδο DisplayBuf set () με ενημερωμένες συντεταγμένες για αποθήκευση για μεταγενέστερη απόδοση σε πίνακα LED. μετακίνηση () ενημερώνει τη συντεταγμένη της παρουσίας ανάλογα με την ταχύτητα παρουσίας - αυτό είναι χρήσιμο αργότερα, όταν πρέπει να αλλάξουμε την ταχύτητα των εισβολέων καθώς τα επίπεδα προχωρούν.
Class Bullet και class Invader είναι υποκατηγορίες κλάσης Mover. Εδώ χρησιμοποιούμε κάτι που ονομάζεται κληρονομικότητα. Η λειτουργικότητα του super () μας επιτρέπει να καλούμε μεθόδους της υπερκλάσης σε υποκλάση, χωρίς να χρειάζεται να επαναλάβουμε τον κώδικα.
Βήμα 5: Κάντε το δικό σας
Συγχαρητήρια! Μόλις δημιουργήσατε ξανά το κλασικό παιχνίδι Space Invaders στο Micro: bit με κάποιο εξαιρετικό υλικό παιχνιδιού. Φυσικά, μπορείτε να βελτιώσετε τον κώδικα του παιχνιδιού από εδώ - για παράδειγμα, από τώρα, το παιχνίδι έχει μόνο ένα επίπεδο - μπορείτε να προσθέσετε πιο απαιτητικά. Επίσης, όπως ίσως θυμάστε, το αρχικό παιχνίδι έχει βράχια που επιπλέουν μπροστά από τον παίκτη, τα οποία μπορείτε να προσθέσετε επίσης.
Εάν κάνετε μια βελτιωμένη έκδοση του παιχνιδιού, μοιραστείτε το με τα παρακάτω σχόλια! Για περισσότερες πληροφορίες σχετικά με το BitPlayer και άλλο υλικό για κατασκευαστές και εκπαιδευτές STEM, επισκεφθείτε τον ιστότοπό μας, https://tinkergen.com/ και εγγραφείτε στο ενημερωτικό μας δελτίο.
Το TinkerGen δημιούργησε πρόσφατα μια καμπάνια Kickstarter για το MARK (Make A Robot Kit), ένα κιτ ρομπότ για τη διδασκαλία κωδικοποίησης, ρομποτικής, AI!
Ο αρχικός κώδικας Micropython από hexkcd/micro-vaders, άλλαξε για να λειτουργήσει με το TinkerGen BitPlayer.
Συνιστάται:
Lego Portable Gaming Console With Space Invaders: 4 Βήματα
Lego Portable Gaming Console With Space Invaders: Έχετε σκεφτεί ποτέ να γίνετε προγραμματιστής παιχνιδιών και να δημιουργήσετε τη δική σας κονσόλα παιχνιδιών που μπορείτε να παίξετε εν κινήσει; Το μόνο που χρειάζεστε είναι λίγος χρόνος, υλικόLego bricksa Mini-Calliope (μπορεί να παραγγελθεί σε αυτόν τον ιστότοπο https://calliope.cc/el) και κάποια δεξιότητα
LCD Invaders: a Space Invaders Like Game σε 16x2 Οθόνη χαρακτήρων LCD: 7 βήματα
LCD Invaders: a Space Invaders Like Game σε 16x2 Οθόνη χαρακτήρων LCD: Δεν χρειάζεται να εισαγάγετε ένα θρυλικό παιχνίδι "Space Invaders". Το πιο ενδιαφέρον χαρακτηριστικό αυτού του έργου είναι ότι χρησιμοποιεί οθόνη κειμένου για γραφική έξοδο. Επιτυγχάνεται με την εφαρμογή 8 προσαρμοσμένων χαρακτήρων. Μπορείτε να κατεβάσετε ολόκληρο το Arduino
Προγραμματισμός Micro: Bit Robot & Joystick: Bit Controller With MicroPython: 11 Steps
Προγραμματισμός Micro: Bit Robot & Joystick: Bit Controller With MicroPython: Για το Robocamp 2019, το καλοκαιρινό μας στρατόπεδο ρομποτικής, νέοι ηλικίας 10-13 ετών συγκολλούν, προγραμματίζουν και χτίζουν ένα «ρομπότ αντιβάρους» με βάση το μικροσκόπιο του BBC: bit, καθώς και προγραμματισμό ένα μικρό: bit για χρήση ως τηλεχειριστήριο. Εάν βρίσκεστε αυτή τη στιγμή στο Robocamp, κάντε σκι
Ρολόι Space Invaders (με προϋπολογισμό!): 6 βήματα (με εικόνες)
Space Invaders Clock (με προϋπολογισμό!): Πρόσφατα είδα μια υπέροχη κατασκευή από το GeckoDiode και ήθελα αμέσως να το φτιάξω μόνος μου. Το Instructable is Space Invaders Desktop Clock και σας συνιστώ να το ρίξετε μια ματιά αφού το διαβάσετε. Το έργο κατασκευάστηκε σχεδόν αποκλειστικά από μέρη που προέρχονται
Πολυέλαιος Space Invaders With Glow in the Dark Action: 16 βήματα (με εικόνες)
Πολυέλαιος Space Invaders With Glow in the Dark Action: Χρησιμοποιήστε τρισδιάστατη μοντελοποίηση/εκτύπωση, ακρυλικό κόψιμο με λέιζερ, χύτευση με ρητίνη, χρωστική με υπεριώδη ακτινοβολία, LED και μερικές απλές καλωδιώσεις για να φτιάξετε έναν πολυέλαιο ή λάμπα υψηλής τεχνοτροπίας και ρετρό δροσερού χώρου. Έχω συμπεριλάβει ένα ωραίο κόλπο για να φτιάξετε καμπύλες γωνίες από λέιζερ