## Tetris in puro BASIC
Ho lavorato a un’implementazione di Tetris in Locomotive BASIC come soluzione per Rosetta Code.
Il programma include:
- Tutti e sette i pezzi (ITOSZJL), in sette colori diversi
- Un generatore casuale «7-bag», che garantisce che ogni pezzo compaia una volta per ogni serie di sette
- Anteprima del pezzo successivo, cancellazione delle linee e discese veloci («hard drop» e «soft drop»)
- Punteggio basato sulle linee completate e sul livello attuale
- Difficoltà progressiva, con il livello che aumenta ogni dieci linee
- Controllo da tastiera tramite tasti freccia, tastierino numerico o tasti alfabetici, inclusa la rotazione in senso orario e antiorario
Ho dedicato molta attenzione alle prestazioni, soprattutto per evitare operazioni superflue nel ciclo di gioco:
- Rendering precalcolato: ogni pezzo e rotazione dispone di stringhe di disegno/cancellazione predefinite, così il movimento non richiede la decodifica della forma né il ridisegno del campo di gioco.
- Rilevamento rapido delle collisioni: le quattro celle occupate di ciascuna rotazione vengono decodificate una sola volta. Una matrice bidimensionale appiattita («flattened board»), offset lineari memorizzati in cache e bordi con spaziatura di riempimento mantengono i controlli di collisione semplici, interrompendoli non appena viene rilevata una collisione.
- Cancellazione efficiente delle linee: il conteggio dell’occupazione delle righe viene aggiornato in modo incrementale e occorre verificare solo le righe interessate dal pezzo bloccato. Le righe completate vengono rimosse facendo scorrere una finestra BASIC anziché ridisegnando l’intera schermata.
Ho anche fatto degli esperimenti con un rendering in grado di gestire le sovrapposizioni («overlap-aware»), ma ho preferito abbandonarlo: il piccolo miglioramento potenziale non valeva la complessità e il lavoro di avvio aggiuntivi.
Il risultato è un compatto programma in BASIC di circa 175 righe.
Fonte: [Tetris: Rosetta Code]( Tetris - Rosetta Code )
Può anche essere eseguito qui: CPCBasicTS v0.5.8
Commenti e suggerimenti sono benvenuti!
