Tetris σε καθαρή BASIC

## Tetris σε καθαρή BASIC

Δουλεύω πάνω σε μια υλοποίηση του Tetris σε Locomotive BASIC, ως λύση για το Rosetta Code.

Το πρόγραμμα περιλαμβάνει:

  • Και τα επτά κομμάτια (ITOSZJL), σε επτά διαφορετικά χρώματα
  • Γεννήτρια τυχαίων αριθμών τύπου 7-bag randomizer, διασφαλίζοντας ότι κάθε κομμάτι εμφανίζεται μία φορά ανά ομάδα των επτά
  • Προεπισκόπηση επόμενου κομματιού, καθαρισμό γραμμών, καθώς και hard και soft drops
  • Βαθμολογία με βάση τις γραμμές που καθαρίστηκαν και το τρέχον επίπεδο
  • Αυξανόμενη δυσκολία, με το επίπεδο να ανεβαίνει κάθε δέκα γραμμές
  • Έλεγχο από το πληκτρολόγιο με χρήση των πλήκτρων βέλους, του αριθμητικού πληκτρολογίου ή γραμμάτων, συμπεριλαμβανομένης δεξιόστροφης και αριστερόστροφης περιστροφής

Δόθηκε μεγάλη προσοχή στην απόδοση, ιδιαίτερα στην αποφυγή περιττών υπολογισμών στον βρόχο του παιχνιδιού (game loop):

  • Προϋπολογισμένη απόδοση (precomputed rendering): Κάθε κομμάτι και περιστροφή διαθέτει προκατασκευασμένες συμβολοσειρές σχεδίασης/σβησίματος (draw/erase strings), ώστε η κίνηση να μην χρειάζεται να αποκωδικοποιεί το σχήμα ή να επανασχεδιάζει το ταμπλό.
  • Γρήγορη ανίχνευση σύγκρουσης (fast collision detection): Τα τέσσερα κατειλημμένα κελιά κάθε περιστροφής αποκωδικοποιούνται μία φορά. Ένα επίπεδο ταμπλό (flattened board), οι αποθηκευμένες γραμμικές μετατοπίσεις (cached linear offsets) και τα συμπληρωμένα όρια (padded boundaries) διατηρούν τους ελέγχους σύγκρουσης απλούς και τους διακόπτουν μόλις εντοπιστεί σύγκρουση.
  • Αποδοτικός καθαρισμός γραμμών: Το πλήθος κατειλημμένων κελιών ανά σειρά διατηρείται σταδιακά, και ελέγχονται μόνο οι σειρές που επηρεάστηκαν από το «κλειδωμένο» κομμάτι. Οι ολοκληρωμένες γραμμές αφαιρούνται κάνοντας κύλιση (scrolling) σε ένα παράθυρο της BASIC αντί να επανασχεδιάζεται το ταμπλό.

Πειραματίστηκα επίσης με απόδοση λαμβάνοντας υπόψη την επικάλυψη (overlap-aware rendering), αλλά την απέρριψα: το μικρό πιθανό όφελος δεν άξιζε την επιπλέον επιβάρυνση κατά την εκκίνηση και την πολυπλοκότητα.

Το αποτέλεσμα είναι ένα συμπαγές πρόγραμμα BASIC με ~175 γραμμές.

Πηγή: [Tetris: Rosetta Code]( Tetris - Rosetta Code )

Μπορεί επίσης να εκτελεστεί μέσω του CPCBasicTS v0.5.8

Σχόλια και προτάσεις είναι ευπρόσδεκτα!

12 «Μου αρέσει»

Έξυπνη υλοποίηση! :+1:

Ναι, πραγματικά έξυπνο και παίζεται πολύ ωραία. Συγχαρητήρια!

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

Μου αρέσει η χρήση της κύλισης σε ένα παράθυρο κειμένου BASIC για τη διαγραφή μιας γραμμής. Διαφορετικά, αυτό θα ήταν αργό ή θα απαιτούσε γλώσσα μηχανής.

1 «Μου αρέσει»