Ich arbeite gerade daran, dass die 16 vorgegebenen Level bei jedem Spiel in einer zufälligen Reihenfolge erscheinen. Es soll ja nicht nur einen leeren Raum geben, sondern ab dem zweiten Level soll es Wände im Raum geben, um welche die Spielfigur vorsichtig manövrieren muss.
Das ist nicht sonderlich kompliziert: Zunächst macht man eine Zahlenreihe von 0 bis 15, als 0, 1, 2, 3 usw. Dann tauscht man zwei beliebige Positionen in dieser Reihe aus. Und das macht man einige male und schon hat man eine zufällige Reihenfolge. Da der Atari 800 einen Zufallszahlen-Generator besitzt, ist das auch einigermaßen zufällig.
Leider habe ich einen fiesen Design-Bug entdeckt: Für das Austauschen brauche ich ein paar zusätzliche Speicherzellen. Leider habe ich nicht bedacht, dass ich diese Speicherzellen auch schon in der VLANK-Routine verwende, um dort zum Beispiel den Score und Ähnliches zu setzen. Das hat mir natürlich meine Routine zum randomisieren der Level-Reihenfolge gehörig durcheinander gebracht. Denn die VBLANK-Routine läuft schon, wenn ich die Level randomisiere.
Puh! Fieser Fehler!
Jetzt gibt es zwei Lösungsmöglichkeiten: Entweder die Score-Routine läuft nicht im VBLANK (das ist die aufwändigere Variante und die von mir favorisierte) oder ich spendiere der Level- oder der Score-Routine ein paar eigene Speicherzellen, so dass sich diese nicht ins Gehege kommen. Das wäre superschnell erledigt, ist aber konzeptionell sehr unschön und verschwendet Speicherplatz.
[Update 12:38]
OK, Kommando zurück: Ich bin zwar den komplizierteren Weg gegangen, so dass der Score (und jetzt auch der Sound) nicht in der VBLANK-Routine sondern in der MAIN-Loop ausgeführt werden. Aber das war gar nicht kompliziert. Weil ich nämlich vor ein paar Monaten, als ich das letzte mal am Spiel gearbeitet habe, schon voraus gedacht hatte. Das war jetzt also nur eine Sache von »verschieben« zweier Aufrufe VBLANK nach MAIN. Ende.
Alles freut sich wieder ...