Puzzle 006

Für diesen Beitrag wurde das CBM prg Studio verwendet.
weitersagen ...
Tweet about this on TwitterShare on FacebookShare on Google+Share on LinkedIn

CBM prg StudioPuzzleteile ‚mischen‚

Da wir jetzt endlich die Puzzleteile zeichnen können, wollen wir nun zu Beginn auch die Reihenfolge der Teile zufällig festlegen. Dazu müssen wir natürlich erstmal klären, wie man überhaupt Zufallszahlen unter Assembler erzeugt, schließlich gibt es bei den Mnemonics kein RND(), wie im BASIC.

Schaut euch daher erstmal den Beitrag ‚Zufallszahlen in Assembler‚ an, bevor ihr hier weiter lest!!

Da ihr nun fit im Erzeugen von Zufallszahlen seid, wenden wir das gleich mal bei unserem Puzzlespiel an. Wir werden nun einfach alle acht Puzzleteile auf die neun möglichen Felder verteilen.

Dazu verwenden wir die TIMER-Zufalls-Routine und fügen die paar Zeilen vor  showScreen_Title:  in unser Programm ein.

 

Jetzt werden wir unsere acht Puzzleteile auf die neun verfügbaren Felder verteilen…

Am Anfang setzten wir erstmal alle Felder auf ‚frei‚. Ihr erinnert euch? $FF steht fürs leere Feld. Anschließend benutzen wir das X-Register als Schleifenzähler für unsere 8 Puzzleteile und verteilen diese in der Schleife  @loop1:  auf die Felder.
Wir holen uns zunächst eine Zufallszahl per  jsr rndTIMER: in den Akku. Diese legt fest, auf welchem Feld das aktuelle Puzzleteil (X-Register) landen soll. Da wir nur Zahlen von 0-8 (unsere Zählung beginnt wie so häufig bei 0!) benötigen, beschränken wir uns aufs untere Nibble. Dann kontrollieren, ob die Zahl kleiner als 9 ist, falls ja machen wir weiter, sonst holen wir uns eine neue Zufallszahl. Sobald wir eine gültige Zufallszahl haben, ab ins Y-Register damit. Nun müssen wir kontrollieren, ob das per Zufallszahl ermittelte Feld noch frei ist. Dazu einfach das Feld in den Akku holen und prüfen, ob der Wert positiv ist ($FF kennzeichnet ja ein freies Feld). Fall es bereits belegt ist, holen wir eine neue Zufallszahl, wenn aber nicht, dann speichern wir unser Puzzleteil aus dem X-Register in diesem Feld ab. Abschließend verringern wir das X-Register fürs nächste Puzzleteil und suchen für dieses ein freies Feld, bis alle Teile platziert sind.

Jetzt müssen wir die Funktion natürlich noch aufrufen. Fügt in  puzzlemain:  vor die Zeile jsr loadsprites: einfach  jsr shuffletiles: ein.

 

Das wars schon alles. OK ein / zwei ‚Kleinigkeit‚ fehlen eigentlich noch! Es könnte nun ja passieren, dass das Puzzle auch per Zufallsgenerator gleich gelöst wird, sprich alle Teile sind am richtigen Platz. Wir sollten uns auch noch fragen, ob das Puzzle wirklich immer lösbar ist, wenn wir die Teile reinzufällig setzen? Darum kümmern wir uns ein anderes Mal.


Auf dem .D64-Image im Download findet ihr neben der ‘normalen‚ Version auch noch ein ‚LOVE FAST‚, dass zeigt wie flott dass alles läuft, obwohl wir bisher keinen Wert auf optimierte Abläufe gelegt haben. Außerdem gibt es dort ein ‚LOVE KEY‚ das erst nach einem Tastendruck alles erneut durchmischt, diese Version wird auch im JaC64 gezeigt. Im herunterladbaren Projekt findet ihr die Stellen für diese Änderung (FAST und KEY) auskommentiert hinter puzzlemainloop:.

 

Start im Java Emulator

 


Schrott!!Naja...Geht so...Ganz gut...SUPER! (3 Bewertungen | Ø 5,00 von 5 | 100,00%)

Loading...


 

<<< zurück | weiter >>>

 

weitersagen ...
Tweet about this on TwitterShare on FacebookShare on Google+Share on LinkedIn

Schreibe einen Kommentar


Beachtet bitte, dass ich eure Kommentare erst manuell freigegeben muß, bevor sie auf der Seite erscheinen! Da ich nicht pausenlos am Rechner sitze, kann es schon mal etwas dauern, bis ein Kommentar für alle sichtbar ist.

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Protected by WP Anti Spam