Labirinti nei Commodore BASIC con una sola linea di codice

Bentornati nella rubrica super-turbo retrò.

Oggi parliamo di un modo velocissimo di generare una specie di labirinto con appena una linea di BasicV2, e di successive ottimizzazioni:

10 PRINT CHR$(205.5+RND(1)); : GOTO 10

Il risultato è quello visualizzato in figura (immagine presa da un libro interamente dedicato a questa linea).

Questo comando era presentato nella guida del C/64 per spiegare l'uso della funzione Random.

Come funziona

Il comando genera un numero casuale tra 0 ed 1 e lo somma al valore 205.5. Questo valore può andare da 205.5 a 206.5. La funzione CHR$ prende solo la parte intera del valore, e lo converte nel caratteri ASCII corrispondente: per 205 stampa \\ mentre per 206 stampa / Il carattere ";" dice al comando print di non andare a capo (come farebbe di norma) ma di stampare il carattere successivo di seguito. Il risultato è un numero casuale ed equidistribuito di simboli \\ e / che formano l'immagine di un labirinto. E' possibile fare prove con altri caratteri "adiacenti" nella tabella PETASCII con risultati altrettanto interessanti, oppure giocare con RND e relativi arrotondamenti: facendo sempre riferimento al libro di cui sopra potete provare:
10 PRINT CHR$(181+(INT(RND(1)+.5)*3)); : GOTO 10

10 PRINT CHR$(181+(INT(RND(1)+.5)*3)+(INT(RND(1)+.5))); : GOTO 10

Spingendoci un po' più in là, possiamo sfruttare una feature di RND per rendere riproducibile la sequenza casuale. Inizializziamo RND con un numero negativo a nostra scelta, e questo farà si che la sequenza successiva sia sempre la stessa, provare per credere:

10 PRINT RND(-23)
20 PRINT CHR$(205.5+RND(1)); : GOTO 20

Ecco come viene su un CommanderX16