MaN1cPuzzle in versione Tiny BASIC

Recentemente, mi sono divertito con la realizzazione di TinyBasicBlazor, un ambiente Tiny BASIC interattivo, basato sulla conversione in C# dell’interprete TinyBasic realizzato da Tom Pittman ed eseguito sui browser web grazie alla tecnologia WebAssembly.

Volendo aggiungere contenuti originali ai programmi di esempio già inclusi, ho deciso di convertire il mio MaN1cPuzzle, riscrivendolo in Tiny BASIC. MaN1cPuzzle è una generalizzazione del classico Gioco del 15, implementato originariamente per il computer ZX Spectrum in 20 linee di Sinclair BASIC. Il processo di coversione è stato tutto sommato semplice, a parte qualche minima difficoltà dovuta alle differenze tra i due dialetti del BASIC.

Screenshot di MaN1cPuzzle, versione ZX Spectrum
MaN1cPuzzle, versione ZX Spectrum

La differenza più evidente è che Tiny BASIC consente solo un’istruzione per riga. Di fatto questo non costituisce un problema, infatti, mentre sul MaN1cPuzzle originale ho sfruttato la possibilità di avere più istruzioni per linea per contenere il programma in 20 linee, con il porting a Tiny BASIC non ho dovuto soddisfare questo requisito. Quindi, ho approfittato di questa situazione per includere commenti esplicativi e rendere il codice più leggibile.
In secondo luogo, l’implementazione di Tiny BASIC di Tom Pittman non supporta i cicli FOR, introdotti con Tiny BASIC Extended. Tuttavia, questi possono essere facilmente sostituiti con istruzioni di GO TO, con buona pace dei puristi della programmazione strutturata, che non considerano i salti incondizionati una buona pratica (E. Dijkstra l’ha persino definita dannosa!).
Un’altra differenza sostanziale tra i dialetti è che Tiny BASIC supporta solo aritmetica a numeri interi. Tuttavia, anche se i numeri in virgola mobile potrebbero essere gestiti con una programmazione aggiuntiva, come descritto nel Tiny BASIC Experimenter’s Kit, non sono necessari in questo tipo di gioco.
Inoltre, Tiny BASIC non ha istruzioni per la grafica / i colori / il suono, ma per questo tipo di gioco è sufficiente l’output di testo con alcune pseudo grafiche realizzate con caratteri ASCII standard.

L’unico punto difficile del processo di porting è stata la mancanza del supporto agli array in Tiny BASIC. MaN1cPuzzle, infatti, utilizza un array bidimensionale per memorizzare le posizioni delle tessere nella griglia di gioco. Sono stato in grado di superare questo problema adottando l’approccio descritto in TIC-TAC-TOE IN TINY BASIC or How to Make a Program TINY di Tom Pittman, tramite le funzioni peek e poke, per leggere e scrivere il contenuto di posizioni contigue di memoria dall’indirizzo 0 all’indirizzo M * N-1 (dove M e N sono le dimensioni della griglia di gioco), simulando così un array. L’interprete Tiny BASIC, infatti, integra alcune routine che possono essere invocate con la funzione USR. In particolare, la funzione peek è disponibile all’indirizzo COLD_START + 20 e la funzione poke è disponibile all’indirizzo COLD_START + 24, essendo COLD_START uguale a 256 (100h) nell’implementazione dell’interprete utilizzata da TinyBasicBlazor.

Il risultato finale è mostrato nella figura sotto e il gioco è giocabile sul tuo browser web tramiteTinyBasicBlazor (è richiesta la tastiera). All’avvio, il programma richiede l’indirizzo COLD_START; inserisci semplicemente 256. Quindi il programma richiede le dimensioni della griglia e il numero di spostamenti casuali da utilizzare per il mescolamento iniziale della griglia. Ho previsto due shortcut che consentono l’avvio immediato del gioco, per giocare con 15 tessere su una griglia 4 × 4 o con 24 tessere su una griglia 5 × 5.
È disponibile anche il listato BASIC del gioco.

Screenshot di MaN1cPuzzle, versione Tiny BASIC
MaN1cPuzzle, versione Tiny BASIC, in esecuzione su web browser con TinyBasicBlazor

Link e riferimenti

Read in English

Drive Me Crazy!: nuovo videogioco di guida per ZX Spectrum

Drive me Crazy! è un nuovo videogioco di guida per computer Sinclair ZX Spectrum, programmato in linguaggio BASIC. Ho realizzato Drive Me Crazy! per il Concurso BASIC 2020, categoria: BASIC pura.

Drive Me Crazy!: schermata dei titoli
Drive Me Crazy!: schermata dei titoli

Precìpitati sulla pagina di Drive Me Crazy! su itch.io per giocare tramite il tuo web browser o per scaricare un archivio contenente il gioco in formato .TAP, il codice sorgente e la documentazione.

Drive Me Crazy!: autostrada
Drive Me Crazy!: autostrada

Buon viaggio!

Read in English

Risultati del BASIC 10Liner Contest 2020

L’edizione 2020 del BASIC 10Liner Contest, a cui ho partecipato con Evas10n e Sierpinski 10-Liner, si è da poco conclusa e i risultati sono stati recentemente pubblicati.
È tuttavia ancora possibile votare per la “Public’s Choice” su Twitter, esprimendo la propria preferenza con un ❤ sul tweet dedicato al gioco o programma preferito (qui i link per Evas10n e Sierpinski 10-Liner).

Sono particolarmente soddisfatto dei risultati ottenuti, in quanto Evas10n si è classificato al settimo posto su 87 nella categoria PUR-80, mentre Sierpinski 10-Liner ha ottenuto la seconda posizione su 12 nella categoria SCHAU!

Infine, tutti i 10 liner sono stati resi disponibili per il download!

Read in English

Evas10n: 10-liner Breakout (ZX Spectrum)

Evas10n: schermata di gioco

Recentemente, sono stato coinvolto nel BASIC 10Liner Contest tanto che, a pochi giorni di distanza dal mio precedente contributo, ho già completato e inviato un nuovo progetto!

Questa volta si tratta di Evas10n, videogioco in stile Breakout per il computer Sinclair ZX Spectrum, candidato alla categoria “PUR-80” (gioco realizzato in linguaggio BASIC in 10 righe, massimo 80 caratteri per riga). A differenza della maggior parte dei giochi appartenenti a questo genere, in Evas10n non occorre distruggere tutti i muri, ma lo scopo è farsi strada attraverso i muri per raggiungere la cima dello schermo. In questo aspetto, è simile all’implementazione per CHIP-8 di Carmelo Cortez (che puoi giocare online dal tuo browser utilizzando la mia macchina virtuale), a sua volta derivata da Wipe Off di Joseph Weisbecker.

Sebbene visivamente sia simile a Breakin, un altro gioco in stile Breakout che ho realizzato lo scorso anno, il programma di Evas10n è stato completamente riscritto, per rispettare il vincolo delle 10 righe di codice.

Video del gameplay, registrato durante lo sviluppo di Evas10n

Puoi sia scaricare un archivio .zip, contenente il codice sorgente, i file pronti per l’utilizzo con gli emulatori e tutta la documentazione (con istruzioni d’uso e spiegazione dettagliata del listato BASIC), che giocare a Evas10n con il tuo browser web (è richiesta la tastiera), mediante l’emulatore ZX Spectrum online. Il gioco è anche disponibile sulla pagina dedicata su itch.io.

I tasti per controllare la barra sono “z” (sinistra) e “x” (destra).
Fai rimbalzare la “palla” contro i mattoni per farti strada verso la parte superiore dello schermo. Per invertire la direzione della palla, colpiscila con uno dei vertici superiori della barra. Se la palla tocca il bordo inferiore dello schermo, sarà persa; hai 6 palle a disposizione. Il gioco termina quando palla raggiunge la parte superiore dello schermo; in tal caso la scritta “FREE!” sarà visualizzata e il gioco si bloccherà. Se fallisci, una nuova partita comincerà automaticamente.

Read in English

Un semplice plugin per #CSpect

Un paio di giorni fa ho avuto modo di provare il supporto ai plugin, recentemente introdotto nell’emulatore #CSpect, implementandone uno in pochi minuti.

Il plugin, realizzato in Visual Studio, intercetta i trasferimenti (OUT) verso la porta 0xFE per impostare il colore del bordo e li traccia sulla console.

Un video che mostra il plugin in azione

Puoi scaricare il plugin (incluso il codice sorgente e il progetto per Visual Studio) qui.

Read in English