Vic 20-labyrinten

Vissa är säkert bekanta labyrintalgoritmen för Commodore 64, känd för de mer eller mindre slumpmässiga förutsättningarna som gör att en labyrint kan genereras med minimal kod. Koden jag tänker på är givetvis denna (Commodore Basic 2.0):

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

Koden är faktiskt inte klockren på C64. Med en hög upplösning (320*200 pixlar) i åtanke, satsade man på teckengrafik som alltid hade minst två pixlars bredd, eftersom detta gjorde grafiken mer visuell. Det ledde till att grafiken såg “trasig” ut när man körde program som inte tog hänsyn till detta.

Vic 20 däremot, med sin låga upplösning (352*184), behövde inte använda dubbla pixlar på vertikala linjer. Och eftersom Vic 20 och C64 delade Basic (Commodore Basic 2.0) är labyrintkoden i fråga kompatibel med Vic 20. Om vi bryter ner koden, har vi följande:

1. RND(1) är ett slumptal mellan 0 och strax under 1.

2. 205,5 + RND(1) är antingen 205 eller 206 (\ eller / – inte backslash respektive slash – snarare diagonal åt höger och diagonal åt vänster) beroende på vad som tilldelas 205,5 eftersom CHR$ konverterar sin parameter till ett heltal genom att avlägsna decimaldelen. Om RND(1) är t.ex. 0,1 eller 0,4 är 205,5 + 0,4 = 205, men om 205,5   tilldelas 0,6 blir resultatet 206. Vi har alltså att göra med en implisiv typomvandling från realtal till heltal.

3. PRINT CHR$(205) ger en diagonal linje från vänster till höger, och CHR$(306) ger en diagonal linje från höger till vänster. Koden i fråga ger alltså antingen \ eller / i en följd, vilket ger en labyrint.

Detta är resultatet av koden på en Commodore 64 eller 128:

c64

Detta är resultatet av samma kod på en Vic 20:

vic20

One thought on “Vic 20-labyrinten

Leave a Reply

Your email address will not be published. Required fields are marked *