2010-07-07 8 views
8

muss ich einen Weg finden, wenn das Zeichen (‚<‘) eine Wand (Schwarz-Pixel-Grafik)Hilfe: ZX81 ‚BASIC‘ Peek-Funktion

-Auf einem ZX81 Spiel getroffen hat.

Ich wurde bei einem anderen Spiel suche ... der Code

wenn Peek verwendet (peek 16398 + 256 * peek 16399) = Code "blackpixel Grafik" dann ...

Welche scheint für sie zu arbeiten ...

Ist dieser korrekte Code?

Ich bin nicht wirklich mit Adressen und Speicher und Sachen.

Bitte helfen Sie mir ...

-Wenn Sie kennen einen besseren Weg. Bitte antworten Sie :) - Jemand erwähnte "Cursorposition" was zur Hölle ist das auf einem ZX81? Danke,

+5

+1 Für eine Frage, wie man eine ZX81 in 2010 programmiert :) – Andy

Antwort

5

PEEK(PEEK 16398+256*PEEK 16399) ein Idiom ist im Sinne von „an der aktuellen Druckposition die Zeichennummer bekommen“. Dies funktioniert, weil das Zwei-Byte-Wort bei 16398 vom ZX81 BASIC/ROM verwendet wird, um einen Zeiger auf den Speicherplatz im Bildschirmdatenblock zu speichern, der der PRINT-Position entspricht.

So Kollisionserkennung zu tun, würden Sie zuerst gesetzt haben:

zu
PRINT AT X,Y; 

Koordinaten, wo die > ist etwa, bewegen dann lesen

LET C= PEEK(PEEK 16398+256*PEEK 16399) 

Sie dann kann das > auf dem Bildschirm drucken (das vorherige Zeichen überschreibend, dessen Code jetzt in C ist), wenn Sie möchten, bevor Sie die Überprüfung durchführen:

IF C=128 THEN ... 

(Ich vermute, das gewünschte Zeichen ist die All-schwarze Zeichen 128, █.)

Oh Junge, ich alt fühlen.

+0

Ok vielen Dank. Klingt perfekt. Lassen Sie mich es versuchen, ein Problem: Sie sagten 'Drucken an X, Y', wo ist in Bewegung? zu dir meinen, wo es sich jetzt bewegt? -Ich bin verwirrt, wie Sie es drucken können, dann nach dem Peek-Bit, das Sie kommentieren, dann können Sie das> drucken drucken Sie es zweimal? =/ –

+1

'PRINT AT' ohne eine Zeichenfolge setzt nur die Position des Druckcursors. – bobince

+0

Wow, das habe ich nie gewusst =] Vielen Dank. -Das ist der Rat, den ich brauchte =] –

1

Wow geht das zurück. Ich habe keinen ZX81 benutzt, aber ich habe einige Spiele auf einem TRS-80 geschrieben.

Der innere Teil:

(peek 16398 + 256 * PEEK 16399)

ziemlich groß ist der Wert von zwei Speicherstellen unter (8 Bit) und die Schaffung eines 16-Bit-

Nummer von ihnen, die dann als die Adresse des äußeren Peek verwendet wird; Sie könnten dies als umschreiben:

addrToCheck = (peek 16398 + 256 * peek 16399)

pixelValue = peek (addrToCheck)

wenn pixelValue = Code "blackpixel Grafik" dann ...

Ich vermute, dass der 'addrToCheck' Wert tatsächlich die Zeichenposition im Spiel ist, ausgedrückt als eine Adresse auf dem Bildschirm. Wenn also der Wert keine Wand ist, dann würden Sie die Werte in Adresse 16398 und 16399 mit einer neuen Zeichenposition aktualisieren (mit einem 'poke', kein Zweifel).

this helps

+0

Zeichenposition im Spiel? Wie würde ich das einrichten? –

+0

Durch Auswählen eines Speicherorts (oder von Speicherorten, der ursprünglichen Quelle entsprechend), der zu verwenden ist, initialisieren Sie ihn an dem Bildschirmspeicherplatz, an dem der Charakter beginnen soll, und gehen dafür vor. – jackjumper