Παιχνίδια στο Raspberry Pi Pico

παιχνίδια στο raspberry pi pico

Σε αυτή τη δημοσίευση, θέλω να μιλήσω για το gaming στο Raspberry Pi Pico.

Θυμάμαι το πρώτο μου χαζοτηλέφωνο, το οποίο τότε ονομαζόταν "τηλέφωνο". Μπορούσε να παίξει απλά παιχνίδια όπως το Snake. Αυτό ήταν η αιχμή του δόρατος.

Πριν από αυτό, έπρεπε να έχετε μαζί σας μια ξεχωριστή φορητή συσκευή που έπαιζε Tetris ή ένα πιο δυναμικό σύστημα παιχνιδιών όπως το Gameboy.

Το Raspberry Pi Pico είναι ένας αρκετά ισχυρός μικροελεγκτής σε σύγκριση με ό,τι χρησιμοποιούσαν οι φορητές συσκευές τη δεκαετία του '90. Φυσικά, μας προσφέρει τη δυνατότητα να παίζουμε παιχνίδια από εκείνη την εποχή.

Περιεχόμενα απόκρυψη

Πόσο ισχυρό είναι το Raspberry Pi Pico

Σε σύγκριση με μια κονσόλα της δεκαετίας του '80, το Raspberry Pi Pico είναι εξαιρετικά ισχυρό. 

Αν προγραμματίσετε ένα παιχνίδι που είναι παρόμοιο με τις απαιτήσεις πόρων ενός παιχνιδιού της δεκαετίας του 1980, το Raspberry Pi Pico θα το αντιμετωπίσει με άνεση.

Τη δεκαετία του '90 αρχίζει να γίνεται λίγο πιο δύσκολο να διατυπώσει κανείς ένα τόσο ξεκάθαρο συμπέρασμα.

Από τη μία πλευρά, αν το θεωρείτε ως μια συσκευή ικανή να παίζει παιχνίδια παρόμοια με αυτά που θα βρίσκατε σε ένα Gameboy ή ένα κινητό τηλέφωνο, μάλλον θα μείνετε ευχαριστημένοι.

Ωστόσο, τα παιχνίδια στα τέλη της δεκαετίας του '90 έγιναν πολύ πιο απαιτητικά. Για παράδειγμα, δεν θα παίζετε Quake 3 (ένα παιχνίδι του 1999) στο Pico.

Στην πραγματικότητα, ενώ το Raspberry Pi Pico μπορεί να παίξει το Doom (1993), ήταν μια προσπάθεια έξι μηνών για το άτομο που το προγραμμάτισε, επειδή ήταν αρκετά δύσκολο έργο να συμπιέσει το παιχνίδι στα 2MB αποθηκευτικού χώρου που διαθέτει το Raspberry Pi Pico.

Έτσι, ενώ το Pico διαθέτει δύο επεξεργαστές 133MHz, έχει περιορισμένη μνήμη RAM και αποθηκευτικό χώρο, γεγονός που το καθιστά δύσκολο.

Ας δούμε πώς συγκρίνεται με ένα Gameboy:

SpecRaspberry Pi PicoGameboy (1989)Gameboy Color (1998)
ΕμφάνισηΈγχρωμη LCD ή e-ink, εξαρτάται από τη φαντασία σας4 αποχρώσεις κλίμακας του γκρι10, 32, 56 χρώματα
ΨήφισμαΕξαρτάται από την οθόνη σας, αλλά περιορίζεται από τους πόρους του Pico.160x144px160×144 px
CPUΔιπλός πυρήνας 133MHz4MHz4MHz/8MHz
RAM264KB8KB32KB RAM, 16KB VRAM
Αποθήκευση2MB Κασέτα Game Pak: 8MB ROM, 128KB RAMΚασέτα Game Pak: 8MB ROM, 128KB RAM

Γιατί να παίζετε παιχνίδια στο Pico και όχι στο Zero/Pi 4;

Καλή ερώτηση.

Όπως γνωρίζετε, το Raspberry Pi Pico είναι ένας μικροελεγκτής, ενώ τα Raspberry Pi Zero ή Pi 4 είναι μικροϋπολογιστές.

Και τα δύο μπορούν να παίξουν παιχνίδια, αλλά το Raspberry Pi Pico είναι πολύ πιο περιορισμένο.

Τούτου λεχθέντος, αν θέλατε να φτιάξετε έναν εξομοιωτή ή ένα σύστημα παιχνιδιών από το Raspberry Pi Zero ή το Pi 4 σήμερα (το 2022), καλύτερα να έχετε ήδη ένα, αλλιώς το μεγαλύτερο εμπόδιο είναι το απόθεμα.

Είναι πολύ δύσκολο να αποκτήσετε ένα Pi Zero και αρκετά δύσκολο να αποκτήσετε ένα Pi 4.

Από την άλλη πλευρά, το Pico είναι άφθονο. Επίσης, εκκινεί σχεδόν αμέσως, ενώ ο μικροϋπολογιστής Pis πρέπει να περάσει από μια μακρά διαδικασία εκκίνησης.

Το Pico διαρκεί επίσης πολύ περισσότερο. Αν θέλετε μια κινητή εγκατάσταση που θα λειτουργεί για ώρες και θα είναι φορητή, θα τα πάτε πολύ καλύτερα με το Pico.

Τέλος, εκτός από το απόθεμα, το Pico είναι επίσης άφθονο σε απόθεμα.

Για να είμαστε δίκαιοι με τους Pi Zero και Pi 4, μπορείτε σίγουρα να παίξετε καλύτερα παιχνίδια και να έχετε καλύτερα αποτελέσματα εξομοίωσης με αυτούς τους μικροϋπολογιστές. Όπως θα δείτε στην επόμενη ενότητα, το Pico δυσκολεύεται να παίξει παιχνίδια που το Zero ή το Pi 4 θα τα περάσει με άνεση.

Τι παιχνίδια μπορεί να παίξει το Raspberry Pi Pico;

Θα ξεκινήσουμε βλέποντας τι έχει καταφέρει να παίξει η κοινότητα των μαστόρων στο Raspberry Pi Pico.

Το RP2040 Doom είναι η απάντηση στο ερώτημα "θα γίνει Doom;"

Ναι! Το Raspberry Pi Pico μπορεί να παίξει Doom.

Ένας τύπος ονόματι Graham Sanderson από το Όστιν του Τέξας κατάφερε να μεταφέρει το Doom στο Raspberry Pi Pico.

Η μαγική του συνταγή;

while (!convice_myself_its_probably_impossible()) {
    do_some_more();
}

Αυτός εξήγησε στην τεκμηρίωση της διαδικασίας ότι αντιμετώπισε πολλαπλούς περιορισμούς από τις προδιαγραφές υλικού που είχε το Raspberry Pi Pico. Εξάλλου, δεν πρόκειται για μια συσκευή που προορίζεται για παιχνίδια.

Παρ' όλα αυτά, ο Graham αποφάσισε επίσης να κάνει τη μεταφορά του Doom ακόμα πιο δύσκολη. Ήθελε την αυθεντική εμπειρία του Doom, πράγμα που σήμαινε να έχει ανάλυση 320×200 (χρώμα), στερεοφωνικό ήχο, μουσική OPL2, αποθήκευση και φόρτωση, multiplayer στο δίκτυο και άλλα χαρακτηριστικά που είναι διαθέσιμα στο αρχικό όνομα.

Η συγκέντρωση τόσων πολλών παιχνιδιών στο Raspberry Pi Pico σήμαινε προκλήσεις με τη μνήμη. Τόσο η μνήμη RAM όσο και ο αποθηκευτικός χώρος ήταν βασικά ζητήματα.

Πρώτον, το Raspberry Pi Pico έχει μόνο 2MB αποθηκευτικού χώρου, αλλά η shareware έκδοση του Doom έχει διπλάσιο μέγεθος. Ενώ άλλοι προγραμματιστές μπορεί να αποφασίσουν να κόψουν ορισμένα χαρακτηριστικά, όπως οι splash screens και το downsampling των υφών, ο Graham δεν ήθελε να το κάνει αυτό.

Η μνήμη RAM ήταν επίσης ένα άλλο θέμα, με τον πηγαίο κώδικα του Chocolate Doom να απαιτεί περίπου 1MB μνήμης RAM ενώ το Pico έχει μόνο περίπου 264KB. Η μνήμη είναι περιορισμένη επειδή η απόδοση των γραφικών καταλαμβάνει ένα τεράστιο κομμάτι του χώρου της RAM, αλλά η RAM είναι επίσης πολύ σημαντική για την ομαλή λειτουργία του παιχνιδιού. Προκειμένου να διαχειριστεί και τις δύο πτυχές, ο Graham έπρεπε να κάνει αυτό που ονόμασε "λιποαναρρόφηση".

Μπορείτε να διαβάσετε περισσότερα πηγαίνοντας στη διεύθυνση την τεκμηρίωση, παρακολουθώντας τη λίστα αναπαραγωγής του στο YouTube ή αναθεώρηση του κώδικα.

Εξομοιωτής NES

Το Raspberry Pi Pico έχει μετατραπεί με επιτυχία σε εξομοιωτή NES.

Σε ένα νήμα του Emulator Zone Forum, ο χρήστης ropgar δήλωσε ότι το Raspberry Pi Pico έχει τη δύναμη να εξομοιώσει ένα NES και μπορεί να κάνει 60 καρέ ανά δευτερόλεπτο και μπορεί να εξομοιώσει τέλεια την APU και το PPP.

Το Ropgar χρησιμοποιεί ένα πληκτρολόγιο PS/2 ως χειριστήριο, αλλά μπορείτε επίσης να χρησιμοποιήσετε το αρχικό χειριστήριο του NES.

Ο ήχος είναι καλός και δεν υπάρχουν δυσλειτουργίες στο βίντεο και στη μουσική υπόκρουση του παιχνιδιού.

Το Pico διαθέτει περίπου 1,5MB χώρου flash για διάφορα παιχνίδια, τα οποία μπορείτε να επιλέξετε πατώντας το πλήκτρο Caps Lock για εναλλαγή μεταξύ των παιχνιδιών. 

Τα παιχνίδια που κατάφερε να φορτώσει ο ropgar στο demo του είναι τα Pacman, Arkanoids, DK, DK Jr, BubbleBobble, Galaga και πολλά άλλα.

Το μόνο μειονέκτημα είναι ότι δεν υπάρχει δημόσιος πηγαίος κώδικας ή σεμινάριο για το πώς να το κάνετε αυτό.

Εξομοιωτής Gameboy για το Raspberry Pi Pico

Μπορείτε να φτιάξετε τη δική σας θήκη Gameboy και στη συνέχεια να χρησιμοποιήσετε το Raspberry Pi Pico για να εξομοιώσετε το Gameboy.

Το δύσκολο σημείο εδώ είναι ότι στην πραγματικότητα δεν πρόκειται για κάτι που έχει σημειώσει μεγάλη επιτυχία. Με άλλα λόγια, αυτό που χτίζετε μπορεί να λειτουργήσει, αλλά όχι πάντα.

Ας ρίξουμε μια ματιά στις επιλογές που υπάρχουν.

Εξομοιωτής Rust Gameboy (OxidGB Pico Port)

Εικόνα από u/j_selby (Reddit)

Μόλις είδα την εικόνα του Pokemon στην οθόνη, ενθουσιάστηκα αμέσως.

Ωστόσο, ο James Selby έγραψε για τις προκλήσεις και τις ελλείψεις του εξομοιωτή Gameboy, γραμμένου σε Rust, με το όνομα OxidGB Pico Port.

"Ήταν μια διαδρομή - μια απογοητευτική διαδρομή, αλλά μια διαδρομή που την απόλαυσα πάρα πολύ από εκπαιδευτική άποψη", δήλωσε ο Selby.

Προβλήματα και νίκες

Εδώ είναι η κύρια πρόκληση: Ο εξομοιωτής Rust Gameboy "δεν είναι ακριβώς playable στην τρέχουσα κατάστασή του, δυστυχώς".

Ο Selby δήλωσε ότι τα παιχνίδια επιτυγχάνουν μόνο περίπου 10 FPS επειδή ο κώδικας του εξομοιωτή αποτελεί συμφόρηση, καθώς και η αργή διασύνδεση SPI με την οθόνη.

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

Η είσοδος δεν έχει ρυθμιστεί, καθώς τα παιχνίδια δεν ήταν αναπαραγώγιμα. 

Δοκιμή της θύρας OxidGB Pico

Αν θέλετε να το δοκιμάσετε, μπορείτε να ακολουθήσετε τις οδηγίες του Selby στο Repo στο Github για το OxidGB Pico Port.

Εξομοιωτής RP2040_GB

Υλικό και εγκατάσταση εξομοιωτή RP2040_GB, φωτογραφία από τον Mahyar Koshkouei.

Ένας άλλος εξομοιωτής που μπορείτε να δοκιμάσετε είναι ο RP2040_GB, το οποίο βασίζεται στο Φιστίκι-GB εξομοιωτή.

Οι επιδόσεις του RP2040_GB είναι αξιοπρεπείς, με τον Koshkouei να λέει ότι η εγκατάστασή του "τρέχει σε πάνω από 70 fps χωρίς εξομοίωση ήχου. Με την παράλειψη καρέ και τη διαπλοκή, μπορεί να τρέξει σε έως και 120 fps".

Όπως μπορείτε να δείτε, το RP2040_GB παίζει Pokemon. Τα βήματα για να τοποθετήσετε μια ROM στο RP2040 είναι τα εξής:

  • Πρέπει να έχετε το Pico SDK
  • Μετάτρεψε .gb ή .gbc ROM σε ένα αρχείο κεφαλίδας C χρησιμοποιώντας την εντολή xxd πρόγραμμα
  • Τροποποιήστε το μετασχηματισμένο αρχείο προσθέτοντας δύο γραμμές κώδικα (στο readme του Github)
  • Αντιγράψτε τη ROM στο src φάκελο και μεταγλωττίσετε.

Υπάρχουν ορισμένοι περιορισμοί αυτού του εξομοιωτή:

  • "Αυτός ο εξομοιωτής είναι ανακριβής και βρίσκεται σε εξέλιξη ... ορισμένα παιχνίδια μπορεί να τρέξουν λανθασμένα ή να μην τρέξουν καθόλου." 
  • Τα παιχνίδια Gameboy Color θα εμφανίσουν σφάλμα
  • Δεν έχει βελτιστοποιηθεί για μικροελεγκτή: Η χρήση μιας APU που είναι βελτιστοποιημένη για χώρο και ταχύτητα μπορεί να βοηθήσει.

Δείτε το Github repo του RP2040_GB εδώ.

Σύνταξη παιχνιδιών Mega με Raspberry Pi Pico

Το καλύτερο μέρος αυτού του έργου είναι ότι είναι απλό και οι οδηγίες είναι επαρκείς για να ξεκινήσετε γρήγορα μια κονσόλα παιχνιδιών Raspberry Pi Pico.

Ο Roger Bühler διαθέτει εξαρτήματα, οδηγίες και demo στο Github του.

Το Mega Games Compilation περιλαμβάνει τα ακόλουθα παιχνίδια:

  1. Tiny Gilbert
  2. Μικροσκοπικό κόλπο
  3. Μικροσκοπικοί εισβολείς v3.1
  4. Μικροσκοπικό φλίπερ v2
  5. Μικροσκοπικό Pacman v1.2
  6. Μικροσκοπικό βομβαρδιστικό v1.3
  7. Μικροσκοπικό ποδήλατο v1.2
  8. Tiny Bert 1.1
  9. Μικροσκοπικό Arkanoid v2
  10. Tiny Tris v2.1e
  11. Μικροσκοπική πλάκα
  12. Tiny DDug
  13. Μικροσκοπικός πύραυλος v1.1
  14. Tiny Lander v1.0 ( από τον Roger Buehler )
  15. Tiny Morpion
  16. Μικροσκοπικός σωλήνας

Τα εξαρτήματα που θα χρειαστείτε είναι τα εξής:

  1. Raspberry Pi Pico
  2. Οθόνη SSD1309 128x64px SPI OLED (οθόνη 2,42" με αναλογία 2:1)
  3. Πιεζο βομβητής
  4. Πέντε κουμπιά
  5. Breadboard
  6. Καλώδια βραχυκυκλώματος
  7. Προαιρετικά: αντιστάσεις 10 Ω, ηλεκτρολυτικός πυκνωτής ονομαστικής ισχύος τουλάχιστον 10V και 220uF

Θα χρειαστείτε επίσης Η βιβλιοθήκη SSD1306 της Adafruit.

Ακολουθεί ο τρόπος σύνδεσης της οθόνης:

  • GND -> GND οθόνης 
  • 3V3(OUT) -> Οθόνη VCC 
  • GP16 -> Εμφάνιση DC (εντολή δεδομένων) 
  • GP17 -> Εμφάνιση CS (Επιλογή καναλιού) 
  • GP18 -> Οθόνη SCL (ρολόι) 
  • GP19 -> Οθόνη SDA (MOSI) 
  • GP20 -> Οθόνη RES (Επαναφορά)

Και να συνδέσετε τα κουμπιά:

  • GP15 -> κουμπί UP 
  • GP14 -> κουμπί DOWN 
  • GP13 -> κουμπί Αριστερά 
  • GP12 -> κουμπί ΔΕΞΙΑ 
  • GP11 -> κουμπί FIRE (όλα τα κουμπιά στο GND)

Και για να συνδέσετε τον πιεζοβομβητή:

  • GP10 -> Βομβητής (+) 
  • GND -> Βομβητής (-)

Εγκατάσταση λογισμικού:

Για να εγκαταστήσετε το λογισμικό, θα πρέπει να χρησιμοποιήσετε το Arduino IDE.

Παιχνίδι τύπου Tamagotchi στο Raspberry Pi Pico (Pico-Tamachibi)

Γιατί ονομάζεται Pico-Tamachibi;

Σύμφωνα με τον Kevin McAleer, τον δημιουργό αυτής της συσκευής, το "tama" σημαίνει "αυγό" και το "chibi" αναφέρεται σε γραφικά όπου ο χαρακτήρας έχει μεγάλο κεφάλι. 

Η δημιουργία του Tamachibi είναι εύκολη, επειδή ο Kevin αναλύει κάθε βήμα στο 90λεπτο σεμινάριό του.

Φτιάξτε τη δική σας μηχανή παιχνιδιών

Αν θέλετε να φτιάξετε τη δική σας μηχανή παιχνιδιών Raspberry Pi Pico, υπάρχουν δύο γενικοί τρόποι για να το κάνετε: να αγοράσετε ένα έτοιμο κιτ ή να φτιάξετε μόνοι σας ένα.

Έτοιμο κιτ vs DIY Raspberry Pi Pico gaming hardware

Αν και είναι δυνατόν να ξεκινήσετε από το μηδέν, ίσως θελήσετε να παρακάμψετε την ταλαιπωρία της δημιουργίας του δικού σας συστήματος και να αγοράσετε ένα έτοιμο πακέτο.

Υπάρχουν μερικά κιτ με βάση το RP2040 που σας επιτρέπουν να ξεκινήσετε κατευθείαν να παίζετε ή να αναπτύσσετε τα δικά σας παιχνίδια.

Ας δούμε το Picosystem Pimoroni και στη συνέχεια ας το συγκρίνουμε με τη διαδικασία κατασκευής κάτι παρόμοιο με τη χρήση μεμονωμένων εξαρτημάτων.

Pimoroni Picosystem

Ας ρίξουμε μια ματιά στο Pimoroni Picosystem.

Όπως μπορείτε να δείτε, είναι πολύ μεγαλύτερο από το Raspberry Pi Pico W, αλλά αυτό οφείλεται επίσης στο γεγονός ότι διαθέτει, μεταξύ άλλων, ένα τετράπλευρο D-pad, τέσσερα κουμπιά, οθόνη LCD, μπαταρία ιόντων λιθίου, πιεζοηχείο και θύρα USB-C.

Διαθέτει τον ίδιο επεξεργαστή και μνήμη RAM, καθώς τόσο το Picosystem όσο και το Pico χρησιμοποιούν το chip RP2040. Ακολουθούν τα πλήρη τεχνικά χαρακτηριστικά:

  • Λειτουργεί με RP2040 (Dual Arm Cortex M0+ με 264kB SRAM)
  • 16MB flash QSPI που υποστηρίζουν XiP
  • Έγχρωμη οθόνη LCD SPI IPS 1,54″ (λειτουργίες 240×240 και 120×120)
  • D-pad και κουμπιά
  • Μπαταρία LiPo 525mAh (6 ώρες+)
  • Πιεζο βομβητής/ηχείο
  • Κουμπί ενεργοποίησης/απενεργοποίησης
  • RGB LED
  • Προγραμματιζόμενο και επαναφορτιζόμενο μέσω USB-C (το καλώδιο δεν περιλαμβάνεται)

Λειτουργίες γραφικών

Το PicoSystem υποστηρίζει δύο λειτουργίες γραφικών.

  • 240×240: η εγγενής ανάλυση της οθόνης LCD
  • 120×120: λειτουργία διπλασιασμού εικονοστοιχείων (εξοικονομεί μνήμη RAM)

Πώς μοιάζει το παιχνίδι στο Picosystem;

Το παιχνίδι στο Picosystem είναι εύκολο. Απλά πατήστε το κουμπί λειτουργίας και θα σας περιποιηθείτε με το προεγκατεστημένο παιχνίδι Super Square Bros.

Το παιχνίδι είναι ένα απλό παιχνίδι πλατφόρμας όπως το Mario.

Το Pimoroni έχει συμπεριλάβει και άλλα παιχνίδια:

  • Super Square Bros. από Scorpion Games - Ένα συναρπαστικό τετράπλευρο platformer (προεγκατεστημένο παιχνίδι)
  • Κουκκίδες - Dot popping puzzler. Δημιουργήστε αλυσίδες από δύο ή περισσότερες και αγωνιστείτε για να πετύχετε το μεγαλύτερο σκορ.
  • Πέτρες και διαμάντια - Κλασσικό παιχνίδι για να αποφεύγετε τους βράχους και να αρπάζετε διαμάντια.
  • Γεωμετρία - Σπάστε διαστημικούς ογκόλιθους με λέιζερ για να φτιάξετε μικρότερους διαστημικούς ογκόλιθους!
  • Ανάβαση του ουράνιου τόξου - Το Dark Souls των διαδικαστικά παραγόμενων παζλ με κάθετα άλματα. Καλή τύχη.
  • Super Blit Kart by Daft_Freak - Ένα παιχνίδι αγώνων με βάση το "Mode7".

Για να εγκαταστήσετε αυτά τα παιχνίδια, κάντε τα εξής:

  • Κατεβάστε το αρχείο.
  • Συνδέστε το Picosystem στον υπολογιστή
  • Πατήστε παρατεταμένα το κουμπί X και, στη συνέχεια, πατήστε το κουμπί λειτουργίας.
  • Το Picosystem θα πρέπει να τοποθετηθεί ως μονάδα δίσκου που ονομάζεται RPI-RP2
  • Αντιγράψτε το αρχείο .uf2 που κατεβάσατε στη μονάδα δίσκου. Θα φορτωθεί αυτόματα.

Για κάποιο λόγο, το καλώδιο USB-C σε USB-C δεν λειτούργησε, αλλά το καλώδιο USB-A σε USB-C λειτούργησε με το Picosystem. Αν δεν δείτε την κόκκινη λυχνία LED να ανάβει, τότε δοκιμάστε άλλο καλώδιο.

Προγραμματίστε τα δικά σας παιχνίδια

Το καλύτερο μέρος του Picosystem είναι ότι παρέχει ένα σύστημα για να δημιουργήσετε τα δικά σας παιχνίδια.

Αντί να προγραμματίζετε από το μηδέν, το PicoSystem διαθέτει ένα ειδικό API που μπορεί να σας βοηθήσει να δημιουργήσετε τα παιχνίδια σας.

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

Το API του PicoSystem διαθέτει συναρτήσεις για τη σχεδίαση αντικειμένων στην οθόνη, την έξοδο ήχου, λειτουργίες υλικού και άλλες βοηθητικές λειτουργίες. Αυτό σας διευκολύνει να δημιουργήσετε το παιχνίδι σας.

Ακριβώς όπως και το Raspberry Pi Pico, το PicoSystem μπορεί να κωδικοποιηθεί σε C++ ή MicroPython. 

Είναι εύκολο να προγραμματίσετε ένα παιχνίδι με το Picosystem;

Θα σας συνιστούσα να έχετε λίγο χρόνο και υπομονή για να φτιάξετε το δικό σας παιχνίδι με το Picosystem.

Η τεκμηρίωση προσφέρει τα βασικά για να μπορέσετε να ξεκινήσετε, αλλά θα ήταν καλύτερο αν είχατε κάποιες προηγούμενες γνώσεις προγραμματισμού παιχνιδιών.

Η μεγαλύτερη πρόκληση για τους αρχάριους είναι ότι δεν υπάρχουν πολλοί πόροι που να σας διδάσκουν πώς να κωδικοποιείτε έργα-δείγματα. Ωστόσο, εδώ είναι μια λίστα με αναφορές που θα σας βοηθήσουν:

Οδηγός Picosystem MicroPython (στο readme)

Παραδείγματα Picosystem MicroPython

Picosystem C++ Github

Παραδείγματα Picosystem C++

Picosystem API cheatsheet, καθώς και εικόνα, μετατροπέας γραμματοσειράς (στην πλαϊνή μπάρα)

Σύστημα DIY: Δημιουργία του υλικού

Ο οδηγός του YouMakeTech καθοδηγεί τον αναγνώστη στον τρόπο κατασκευής μιας πλήρους κονσόλας παιχνιδιών με θήκη, ηχοσύστημα και μόνιμη συγκόλληση.

Για τη σύγκρισή μας, ας δούμε πόσο θα κόστιζε η κατασκευή μιας μονάδας DIY σε σχέση με το Picosystem, το οποίο είναι ένα πλήρες κιτ.

Το σύστημα τυχερών παιχνιδιών της YMTPimoroni Picosystem
ΥπόθεσηΠροαιρετικά, 3D εκτυπωμένο ($4.47 για τα σχέδια STL, συν το κόστος ενοικίασης/λειτουργίας νήματος και 3D εκτυπωτή)Περιλαμβάνεται
Raspberry Pi Pico$5 για το Pico H επειδή θα χρειαστείτε τις κεφαλίδες.Περιλαμβάνεται
Οθόνη OLED$15 (οθόνη 0,96 ιντσών)Περιλαμβάνεται
ΚουμπιάΑμελητέοΠεριλαμβάνεται
Breadboard$15 (κιτ breadboard)Περιλαμβάνεται
Καλώδια βραχυκυκλώματοςΠεριλαμβάνεται στο κιτ breadboardΠεριλαμβάνεται
ΒίδεςΜέχρι $1Περιλαμβάνεται
PiezoΑμελητέο Περιλαμβάνεται
Συνολικό κόστος$40.47, χωρίς το κόστος της τρισδιάστατης εκτύπωσης$70

Ας δούμε, λοιπόν, το τελικό κόστος για τα διάφορα επίπεδα των DIY setups:

ΕγκατάστασηΚόστος
Χωρίς μπαταρία$40,47 χωρίς το κόστος της τρισδιάστατης εκτύπωσης
Μπαταρία Lipo$8
Pimoroni Pico Lipo$16.39 - $4 (αφού χρησιμοποιούμε το ανταλλακτικό Pimoroni Pico, μπορούμε να αφαιρέσουμε το κόστος του Raspberry Pi Pico)
Σύνολο για ένα κιτ με μπαταρία$60.86 χωρίς το κόστος εκτύπωσης 3D

Μια προειδοποίηση - το YouMakeTech λέει ότι μπορείτε να το κατασκευάσετε με λιγότερα χρήματα από $20. Κατά την έρευνά μου, ωστόσο, το κόστος για ένα DIY set up που ταιριάζει με το Picosystem δεν διαφέρει πραγματικά τόσο πολύ, ειδικά αν λάβετε υπόψη το λογισμικό και την ευκολία.

Το πρωτότυπο της YouMakeTech που έχει δύο κουμπιά, μια οθόνη και μπορεί να παίξει Pong

Τούτου λεχθέντος, η διαδρομή DIY είναι μια μεγάλη ευκαιρία εκμάθησης. Ένα πράγμα που με προκάλεσε ήταν η οθόνη. Ενώ το παράδειγμα της YouMakeTech χρησιμοποιεί σύνδεση I2C, η οθόνη που είχα χρησιμοποιούσε διεπαφή SPI 4 ακίδων. Αυτό απαιτεί είτε μια αλλαγή στην κωδικοποίηση είτε μια τροποποίηση του υλικού προκειμένου να προχωρήσετε. Αν σας αρέσουν οι προκλήσεις, η DIY διαδρομή είναι για εσάς.

Ποια είναι λοιπόν τα πλεονεκτήματα του DIY έναντι του Picosystem;

Πλεονεκτήματα/ΜειονεκτήματαDIYPicosystem
Συναρμολόγηση υλικούΚάνετε τα πάντα DIYΔεν κάνετε τίποτα DIY
ΛογισμικόΔεν υπάρχει μεγάλη βοήθεια εδώ. Κάνετε τα πάντα μόνοι σας και μαθαίνετε πώς να χειρίζεστε κάθε εξάρτημα.Πρέπει να μάθετε το API του Picosystem
Ευκαιρία μάθησηςΜεγαλύτερη ευκαιρία μάθησης επειδή συναρμολογείτε διαφορετικά μέρη.Μικρότερο. Είναι έτοιμο και το λογισμικό θα είναι η μεγαλύτερη ευκαιρία εκμάθησης εδώ.
ΕπεκτασιμότηταΕφόσον το κατασκευάσατε εσείς, μπορείτε να αλλάξετε την οθόνη LCD, να προσθέσετε περισσότερα κουμπιά, να προσθέσετε λυχνίες LED κ.λπ.Όχι πολλά, εκτός αν θέλετε να διαλύσετε ένα πλήρες σύστημα.

Δημιουργία του παιχνιδιού Pong-like στο σύστημα Picosystem vs DIY

Ένα περίεργο πείραμά μου αφορά την κατανόηση της προσπάθειας που θα χρειαστεί για την ανάπτυξη ενός παιχνιδιού χρησιμοποιώντας το Picosystem σε σχέση με το να το φτιάξω από την αρχή.

Προκειμένου να συγκρίνω τα δύο συστήματα, θα κατασκευάσω ένα παιχνίδι τύπου Pong για έναν παίκτη τόσο στο DIY σύστημα της YouMakeTech όσο και στο Picosystem.

Η υπόθεση του παιχνιδιού είναι απλή. Είναι ένα παιχνίδι για έναν παίκτη που μοιάζει με το Pong και σας δίνει 10 πόντους κάθε φορά που η μπάλα σας αναπηδά στο κουπί. Αν πέσει στο κάτω μέρος της οθόνης, λαμβάνετε το μήνυμα "Game Over".

Η δημιουργία του παιχνιδιού και στα δύο συστήματα ακολουθεί μια απλή ροή εργασιών που οδηγεί στο Thonny.

Θα πρέπει να φλασάρετε το MicroPython στο Pico και στη συνέχεια θα χρησιμοποιήσετε το Thonny για να κωδικοποιήσετε το πρόγραμμά σας. 

Το MicroPython που θα αναβοσβήσετε στο Picosystem είναι διαφορετικό από το επίσημο αρχείο MicroPython UF2, οπότε βεβαιωθείτε ότι αναβοσβήνετε το σωστό, επειδή το Picosystem θα τρέξει με την επίσημη έκδοση MicroPython. Απλά δεν θα λειτουργεί όπως προβλέπεται.

Τώρα, ας δούμε μερικές θεμελιώδεις διαφορές μεταξύ των δύο. Εξαιρώ εδώ τη λογική του παιχνιδιού και συγκρίνω μόνο τις διαφορές στην αλληλεπίδραση υλικού-λογισμικού και τα πρότυπα προγραμματισμού.

Μπορείτε να δείτε τον κώδικα της YouMakeTech εδώ.

Πρώτη διαφορά: κώδικας υλικού

Τα πράγματα είναι πολύ "ακατέργαστα" με τη διαδρομή DIY. Εδώ είναι κάποιος κώδικας για την αρχικοποίηση της οθόνης, του GPIO και των κουμπιών που δεν θα χρειαστεί να κάνετε με το Picosystem:

from machine import Pin, PWM, I2C,
from ssd1306 import SSD1306_I2C

# Buttons
up = Pin(2, Pin.IN, Pin.PULL_UP)
down = Pin(3, Pin.IN, Pin.PULL_UP)
left = Pin(4, Pin.IN, Pin.PULL_UP)
right = Pin(5, Pin.IN, Pin.PULL_UP)
button1 = Pin(6, Pin.IN, Pin.PULL_UP)
button2 = Pin(7, Pin.IN, Pin.PULL_UP)

# Buzzer connected to GP18
buzzer = PWM(Pin(18))

# OLED Screen connected to GP14 (SDA) and GP15 (SCL)
i2c = machine.I2C(1, sda = Pin(14), scl = Pin(15), freq = 400000)
oled = SSD1306_I2C(SCREEN_WIDTH, SCREEN_HEIGHT, i2c)

Δεύτερη διαφορά: API του Picosystem

Αν γράφετε κώδικα στο Picosystem, θα πρέπει να γράφετε μέσα στο σύστημά του.

Στο παράδειγμα της YouMakeTech, όλη η λογική του παιχνιδιού ενσωματώνεται σε ένα while True βρόχο. Αυτό περιλαμβάνει την αλληλεπίδραση με τα κουμπιά, την ανίχνευση σύγκρουσης και τη σχεδίαση στην οθόνη.

Στο Picosystem, καλείστε να γράψετε μέσα σε τρεις λειτουργίες - init(), update() και draw().

Στον κώδικά μου, όλη η λογική του παιχνιδιού είναι γραμμένη σε update() συμπεριλαμβανομένου του χειρισμού των συγκρούσεων και της αλληλεπίδρασης με το D-pad.

Σε ένα απλό παιχνίδι Pong, υπάρχουν μερικές συναρτήσεις από το API που χρησιμοποίησα και διευκόλυναν λίγο τα πράγματα:

τέμνει(x1, y1, w1, h1, x2, y2, w2, h2)  είναι ίσως η μεγαλύτερη βοήθεια εδώ. Θα περάσετε τις συντεταγμένες και τα μεγέθη των δύο τετραγώνων και θα επιστρέψει true αν υπάρχει τομή. Σε αυτή την περίπτωση, τα δύο ορθογώνια είναι η μπάλα και η μπάρα (ή αλλιώς κουπί). Το μειονέκτημα της συνάρτησης intersects() είναι ότι δεν ανιχνεύει σε ποια πλευρά συνέβη η σύγκρουση, οπότε έπρεπε να γράψω επιπλέον κώδικα για να αντιμετωπίσω τις συγκρούσεις στην πλευρά της μπάρας.

Το API του Picosystem θα λάμψει πραγματικά καθώς θα αναπτύσσετε πιο περίπλοκα παιχνίδια, δεδομένου ότι διαθέτει ήδη μια μέθοδο για framebuffers, έξοδο ήχου, blending κ.λπ. 

Κώδικας για το παιχνίδι Pimoroni Picosystem Pong-like

#bar_pos_x = pixels from left, e.g. 0 from left
bar_pos_x = 50
#bar_pos_y = pixels from top, e.g. 100px from top
bar_pos_y = 100
BAR_WIDTH = 30

LENGTH_CONSTANT = 5

ball_speed = 1
ball_pos_x = 10
ball_pos_y = 10
ball_dx = 2
ball_dy = 2

score = 0
game_over = False

def update(tick):
    
    global bar_pos_x
    global bar_pos_y
    global ball_pos_x
    global ball_pos_y
    global ball_dx
    global ball_dy
    global ball_speed
    global score
    global game_over
    
    def reverse_ball_dx():
        global ball_dx
        ball_dx = ball_dx * -1
        
    def reverse_ball_dy():
        global ball_dy
        ball_dy = ball_dy * -1
    
    ball_pos_x += ball_dx
    ball_pos_y += ball_dy
    
    if button(LEFT) and bar_pos_x > 0:
        bar_pos_x -= 1
    
    if button(RIGHT) and bar_pos_x < 120 - BAR_WIDTH :
        bar_pos_x += 1
        
    if ball_pos_x <= 0 :
        ball_pos_x = 0
        reverse_ball_dx()
        
    if ball_pos_x >= 120 - LENGTH_CONSTANT :
        ball_pos_x = 120 - LENGTH_CONSTANT
        reverse_ball_dx()
        
    if ball_pos_y >= 120 - LENGTH_CONSTANT :
        game_over = True
        
    if ball_pos_y <= 0:
        ball_pos_y = 0
        reverse_ball_dy()
        
    if intersects(bar_pos_x,bar_pos_y,BAR_WIDTH,LENGTH_CONSTANT, ball_pos_x, ball_pos_y, LENGTH_CONSTANT,LENGTH_CONSTANT):
        
        reverse_ball_dy()
        score += 10
        
        #main intersection of ball and bar. if they intersect, check if they are intersecting on the sides.
        #if not on sides (i.e. on top) reverse Y direction. Or else, reverse X direction.
        if intersects(bar_pos_x,bar_pos_y,1,LENGTH_CONSTANT, ball_pos_x, ball_pos_y, LENGTH_CONSTANT,LENGTH_CONSTANT):
            
            #intersecting on left
            
            reverse_ball_dx()
            ball_pos_x -= 2
            
        if intersects(bar_pos_x + BAR_WIDTH,bar_pos_y,1,LENGTH_CONSTANT, ball_pos_x, ball_pos_y, LENGTH_CONSTANT,LENGTH_CONSTANT):
            
            #intersecting on right
            
            reverse_ball_dx()
            ball_pos_x += 2

        
def draw(tick):
    
    if game_over:
        pen(0,0,0)
        clear()
        pen(15,15,15)
        text("Game Over", 35, 60)
        
        
    else:
        pen(0, 0, 0)
        clear()
        pen(15,15,15)
    
        #draw bar (paddle)
        frect(bar_pos_x,bar_pos_y,BAR_WIDTH,LENGTH_CONSTANT)
    
        #draw the ball
        frect(ball_pos_x, ball_pos_y, LENGTH_CONSTANT,LENGTH_CONSTANT)
        text(str(score), 80, 20)
    
start()

Έχετε ένα παιχνίδι να προτείνετε;

Αν έχετε ένα παιχνίδι για το Raspberry Pi Pico, αφήστε ένα σχόλιο παρακάτω με μια διεύθυνση URL.

Και αν θέλετε να δείτε τη σειρά έργων Paragon Projects - πηγαίνετε εδώ.

1 Σχόλιο

  1. Mt στις Απρίλιος 15, 2024 στις 12:06 πμ

    does the pimoroni system have code to allow you to use an external accessory/device like a small fpga to enhance performance?

Αφήστε ένα σχόλιο