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

Space Invaders στο Micropython στο Micro: bit: 5 Steps
Space Invaders στο Micropython στο Micro: bit: 5 Steps

Βίντεο: Space Invaders στο Micropython στο Micro: bit: 5 Steps

Βίντεο: Space Invaders στο Micropython στο Micro: bit: 5 Steps
Βίντεο: WRO Project: Διαστημική βάση GraviNav 11 - Robotakia 2024, Ιούλιος
Anonim
Image
Image

Σε προηγούμενα άρθρα μας έχουμε διερευνήσει τη δημιουργία παιχνιδιών στο 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

Buffer οθόνης
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

Invaders, Bullets and the Player
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.

Συνιστάται: