» Ηλεκτρονικά » Arduino »Κάνοντας το Tetris στο Arduino

Κάνοντας το Tetris στον Arduino

Χαιρετισμούς τους κατοίκους του ιστότοπού μας!
Σήμερα θα μελετήσουμε τα εσωτερικά του παιχνιδιού Tetris που είναι γραμμένα κάτω από την πλατφόρμα arduino και μήτρα LED.

Ο συγγραφέας αυτού του σπιτικού προϊόντος είναι ο AlexGyver, ο συγγραφέας του καναλιού YouTube με το ίδιο όνομα. Καλώς ήρθατε στον υπέροχο κόσμο των τετραγωνικών pixel.

Ας ξεκινήσουμε με την ιστορία. Το Tetris είναι ένα παιχνίδι στο οποίο οι αριθμοί που αποτελούνται από 4 τετράγωνα πέφτουν από πάνω προς τα κάτω. Σε διαφορετικούς συνδυασμούς, αυτά τα σχήματα μπορούν να περιστραφούν και να μετακινηθούν αριστερά και δεξιά. Ο στόχος του παιχνιδιού είναι να συλλέξετε οριζόντια επίπεδα που έχουν εκκαθαριστεί και τα σημεία σας απονέμονται. Η απώλεια θεωρείται η στιγμή που η νέα φιγούρα δεν έχει πού να πέσει. Ο Tetris εφευρέθηκε από τον σοβιετικό προγραμματιστή Alexei Leonidovich Pazhitnov.

Η αρχική έκδοση Pascal εμφανίστηκε στις 6 Ιουνίου 1984. Από τότε, το Tetris έχει προχωρήσει πολύ και έχει μεταφερθεί σε όλες τις πλατφόρμες στις οποίες είναι γενικά δυνατό να παίζετε παιχνίδια, καθώς και σε συσκευές που δεν προορίζονται για παιχνίδια, όπως η αριθμομηχανή, ο παλμογράφος και, δεν θα πιστέψετε, ένα συγκολλητικό σίδερο.



Με τον αριθμό των εμπορικών εκδόσεων που πωλούνται, το Tetris είναι ανώτερο από οποιοδήποτε άλλο παιχνίδι στην ιστορία της ανθρωπότητας. Για ένα Παιχνίδι αγόρι πωλήθηκαν 35 εκατομμύρια αντίτυπα, για να μην αναφέρουμε το φορητό Παιχνίδι Brick, το οποίο σχεδόν όλοι είχαν κάποια στιγμή.
Θα ξεκινήσουμε την εφαρμογή του tetris σε arduino και μια μήτρα χρώματος με την ανάλυση των "δεκανίκι". Η μήτρα αποτελείται από τρία χρώματα LED διευθύνσεων. Το πρόβλημα με αυτόν τον τύπο μήτρας είναι ότι είναι πολύ δροσερό. Το χρώμα κάθε εικονοστοιχείου κωδικοποιείται με 24 bits, δηλαδή 8 bits για κάθε στοιχείο: κόκκινο, πράσινο και μπλε. Δεν υπάρχει τέτοιος τύπος δεδομένων για το arduino, υπάρχουν τα ακόλουθα - 32 bit.

Τα χρώματα όλων των λυχνιών LED πρέπει να αποθηκεύονται στη μνήμη RAM, καθώς θα τα αλλάξουμε. Επιπλέον, για μια μήτρα 16 με 16, έχουμε ακριβώς 1 KB κατακτημένης δυναμικής μνήμης, και το arduino nano έχει μόνο 2 από αυτούς.

Προσθέστε μερικές ακόμη βιβλιοθήκες και αρχίστε να γράφετε κώδικα, η μνήμη θα τελειώσει. Ο συγγραφέας βασικά δεν χρησιμοποιεί, για παράδειγμα, arduino mega, όπου υπάρχει περισσότερη μνήμη. Ο στόχος είναι να γίνει το παιχνίδι στο arduino nano, χρησιμοποιώντας απλά, τυποποιημένα και γνωστά εργαλεία, αλλά ταυτόχρονα μη τυπικές προσεγγίσεις και "πατερίτσες" και με τη βοήθειά τους να επιτευχθεί ο βέλτιστος κώδικας.

Το πρώτο "δεκανίκι" θα είναι η άρνηση να αποθηκεύσετε ξεχωριστά στη μνήμη τις θέσεις των μορφών και γενικά όλα όσα συμβαίνουν στην οθόνη.Πρέπει να αποθηκεύσουμε τις συντεταγμένες των σημείων του σχήματος σίτισης και τις συντεταγμένες των σημείων των ήδη μειωμένων αριθμών, δηλαδή, στο μέγιστο, χρειαζόμαστε μια άλλη 1 συστοιχία, δισδιάστατη 16 με 16, και αυτή είναι έως και 256 byte.

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

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

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

Κάθε βήμα του χρονόμετρου, σχεδιάζουμε ένα σημείο ένα εικονοστοιχείο κάτω από το παλιό και τραβούμε το παλιό σημείο με μαύρο χρώμα, δηλαδή απενεργοποιούμε το LED. Κάνοντας κλικ στο κουμπί, κάνουμε το ίδιο, αλλά με μια οριζόντια συντεταγμένη. Λοιπόν, για την ευπρέπεια, θα περιορίσουμε το μέγεθος της μήτρας έτσι ώστε το σημείο να μην υπερβαίνει το πεδίο.

Βλέπετε, τίποτα περίπλοκο. Αλλά αυτό δεν είναι για πολύ, επειδή έχει έρθει η στιγμή να συντάξουμε στοιχεία. Θα εργαστούμε ως εξής: θα διατηρήσουμε την αναφορά στο σημείο παροχής, το οποίο έχουμε ήδη γράψει, θα το ονομάσουμε το κύριο σημείο ή το κύριο τετράγωνο. Το κύριο μπλοκ μετακινείται στο σύστημα συντεταγμένων μήτρας, το έχουμε ήδη κάνει. Όλες οι μορφές του Tetris αποτελούνται από 4 τετράγωνα, γι 'αυτό, παρεμπιπτόντως, ονομάζεται Tetris.

Συνεπώς, μένει να ολοκληρώσουμε την προσθήκη 3 ακόμη μπλοκ στο κύριο μπλοκ. Ας γράψουμε τις συντεταγμένες τους στο σύστημα συντεταγμένων του κύριου μπλοκ, έτσι ώστε το κύριο μπλοκ να είναι πάντα κάτω. Είναι πολύ απλό, πάρτε το σχήμα του ανεστραμμένου γράμματος Τ. Το κύριο μπλοκ από κάτω προς το κέντρο έχει συντεταγμένες 0,0 στο σύστημα συντεταγμένων του.

Το άνω μπλοκ είναι 0,1, το δεξί είναι 1,1 και το αριστερό είναι -1,1.

Πάρτε το γράμμα G. Το κάτω μπλοκ είναι 0.0, το επόμενο 0.1, το επόμενο 0.2 και η άκρη του γράμματος 1.2.

Γράφουμε αυτές τις συντεταγμένες στον πίνακα με την ακόλουθη μορφή: {0,1, 0,2, 1,2} και αφήνουμε τη συστοιχία σε μνήμη flash, ώστε να μην χάνουμε δυναμική μνήμη. Όσον αφορά την περιστροφή των αριθμών. Είναι αδύνατο να περιστρέψετε τους αριθμούς. Είναι corny είναι πολύ δύσκολο να εξηγήσει στον μικροελεγκτή πώς να το κάνουμε αυτό. Για να γίνει αυτό, πρέπει να ρυθμίσετε το κέντρο περιστροφής, να αποσυνθέσετε με κάποιο τρόπο το σχήμα σε μέρη και να αναζητήσετε νέες συντεταγμένες για κάθε μέρος, λαμβάνοντας υπόψη την ισχυρή pixelation, η οποία προφανώς θα οδηγήσει σε σφάλματα και θα αποδειχθεί ανοησία. Το πρόβλημα λύνεται πολύ απλά, θα διατηρήσουμε στη μνήμη όλες τις 4 θέσεις για όλες τις μορφές και όλα.

Στην πραγματικότητα, τώρα παραμένει να επιλέξετε τυχαία τον αριθμό αριθμού και να το σύρετε γύρω από το μπλοκ που πέφτει. Εδώ, για τα τρία υπόλοιπα μπλοκ, παίρνουμε τις συντεταγμένες από τη μνήμη flash, τις μεταφράζουμε στις γενικές συντεταγμένες της μήτρας και ενεργοποιούμε τις λυχνίες LED. Με την ευκαιρία, το χρώμα επιλέγεται επίσης τυχαία από τα 6 πιο απλά και φωτεινά χρώματα του χώρου rgb. Η γωνία περιστροφής του σχήματος στην αρχή του γύρου ρυθμίζεται επίσης τυχαία και όταν πιέζετε το κουμπί προς τα επάνω, τραβήξτε το επόμενο σύνολο συντεταγμένων για να το σύρετε και να το περιστρέψετε δεξιόστροφα. Η μετακίνηση ενός σχήματος λειτουργεί το ίδιο. Αρχικά, σβήνουμε το σχήμα στην προηγούμενη θέση, δηλαδή το τραβάμε μαύρο, στη νέα θέση τραβήξουμε το τρέχον χρώμα του σχήματος. Όταν στρέψουμε, ξανά, σβήνουμε την παλιά θέση και μόλις σχεδιάζουμε μια νέα.

Το υλικολογισμικό μπορεί να μεταφορτωθεί στο. Θα αναλύσουμε μόνο την ουσία. Ας ξεκινήσουμε ελέγχοντας τον αριστερό και το δεξί τοίχο και το κάτω μέρος. Όλα είναι πολύ απλά με τον πυθμένα, κοιτάζουμε κάθε βήμα της πτώσης, η μονάδα βάσης έχει φθάσει σε ύψος 0, αυτό δεν είναι δύσκολο, αλλά κάθε φορά που πατάμε το κουμπί ελέγχου, πρέπει να δούμε αν ακουμπά το ακραίο σημείο του σχήματος των πλευρικών τοιχωμάτων της μήτρας.

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

Όλα είναι πολύ απλά. Αλλά το επόμενο έργο είναι πολύ πιο ενδιαφέρον. Πρέπει να ελέγξουμε για συγκρούσεις με μπλοκ που βρίσκονται ήδη κάτω.Εάν είχαμε μια συστοιχία που περιείχε την κατάσταση όλων των κυττάρων στο πεδίο, θα ήταν ευκολότερη, αλλά θα χρησιμοποιούσαμε μια σειρά από χρώματα για τα εικονοστοιχεία της ταινίας, έτσι θα έχουμε το πιο cool "crutch". Ποιο είναι το πραγματικό πρόβλημα. Όλα φαίνονται απλά, μια πράσινη φιγούρα θα πέσει και κάθε βήμα της πτώσης, κάθε στροφή προς τα πλάγια και κάθε προσπάθεια να γυρίσει θα πρέπει να ελέγξει αν η φιγούρα στη νέα θέση στηρίζεται στις ήδη ψευδείς μορφές. Εάν για όλα τα τετράγωνα το χρώμα του περιβάλλοντος είναι ίσο με το μαύρο ή ίσο με το χρώμα του σχήματος, τότε επιτρέπουμε κίνηση στην επιθυμητή κατεύθυνση. Αυτό θα λειτουργήσει μέχρι το σχήμα κάτω από μας να έχει το ίδιο χρώμα με το σχήμα που πέφτει. Αυτό είναι στην πραγματικότητα το "δεκανίκι": θα αναδιαρθρώσουμε το πεσμένο σχήμα σε διαφορετικό χρώμα. Επαναλαμβάνω ανεπαίσθητα για τα μάτια, αλλά αισθητή για το πρόγραμμα. Το μόνο που χρειάζεται να κάνετε είναι ελαφρώς να αυξήσετε τη φωτεινότητα του τρέχοντος χρώματος του σχήματος και αυτό είναι όλο.


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

Παρεμπιπτόντως, όταν πιέζετε το κουμπί προς τα κάτω, ο αριθμός σβήνει με μεγάλη ταχύτητα και παίρνει τη θέση του.

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


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

Ο λογαριασμός εμφανίζεται σε αριθμούς, οι οποίοι αποθηκεύονται στη μνήμη ως σύνολο από αυτά και μηδενικά, με τα οποία οι ενδεικτικές λυχνίες ενεργοποιούνται ή απενεργοποιούνται. Αυτό μοιάζει με το γράμμα Tetris στη μήτρα διευθύνσεων. Σας ευχαριστώ για την προσοχή σας. Θα σας δω σύντομα!

Βίντεο:
10
10
10

Προσθέστε ένα σχόλιο

    • χαμόγελοχαμογελάειxaxaΕντάξειdontknowyahoonea
      αφεντικόξυστάανόητοςναιναι-ναιεπιθετικήμυστικό
      Συγγνώμηχορόςdance2dance3συγχώρησηβοήθειαποτά
      σταματήστεφίλουςκαλόgoodgoodσφυρίχτρασυρρέουνγλώσσα
      καπνόςπαλαμάκιαcrayδηλώστεαπογοητευτικήdon-t_mentionκατεβάστε
      θερμότηταςirefulγέλιο1mdaσυνάντησηmoskingαρνητική
      not_iποπ κορντιμωρίαδιαβάστετρομάξτεφοβίζειαναζήτηση
      χλευάζωthank_youαυτόto_clueumnikοξείασυμφωνώ
      κακόbeeeblack_eyeblum3ρουζκαυχηθείτεπλήξη
      λογοκρισίαευχαρίστησηsecret2απειλήσουννίκηyusun_bespectacled
      shokrespektlolπροβλέπουνκαλωσορίστεkrutoyya_za
      ya_dobryiβοηθόςne_huliganne_othodifludαπαγόρευσηκοντά

Σας συμβουλεύουμε να διαβάσετε:

Κάντε το για το smartphone ...