2016-10-07 1 views
-2

Ich habe ein kleines Spiel mit Assembly für x8086 mit tasm zu tun, ist ein Labyrinth-ähnliches Spiel, in dem ich einige Blöcke bewegen muss, um das Spiel zu gewinnen. Ich muss das Labyrinth aus einer .txt-Datei lesen und es auf den Bildschirm laden (es muss standardmäßig 25x80 sein), das Problem ist, dass ich keine Ahnung habe, wie man ein Zeichen aus dem txt "erkennt". Zum Beispiel werden die Wände durch "0" und das Zeichen durch eine "&" dargestellt. Wie kann ich also das Zeichen "&" bewegen, wenn ich eine Pfeiltaste drücke? Ich lade bereits die Datei und wird auf dem Bildschirm angezeigt, aber ich weiß nicht, wie ich es verschieben soll. Ich muss es im Textmodus tun, mit int 10h und int 16h, danke.Wie kann ich ein Zeichen im Assembly-Textmodus verschieben? (tasm x8086)

+0

Datei ist Byte-Array. Inhalt sind 0-255 Zahlen, eine "Text" -Datei ist die gleiche, mit etwas Textcodierung, um anzugeben, was diese Zahlen bedeuten. In Ihrem Fall arbeiten Sie wahrscheinlich mit der ASCII-Codierung, so dass der Anfang der Datei, die '0. #. &. 0 'enthält, eine Bytefolge ist: 48, 46, 35, 46, 38, 46, 48. Wenn Sie bereits gelesen haben Datei in den Speicher, Sie haben diese Bytes im Speicher, und können mit ihnen arbeiten, nur Adresse berechnen (die Dateidefinition der Zeile entscheidet, wie Offset in Array für bestimmte [x, y] zu berechnen) und Sie können zum Beispiel 'cmp Byte tun ptr [bx], '&' 'um den Wert von' bx' mit der Zahl 38 zu vergleichen. – Ped7g

Antwort

1

Wenn das Labyrinth bereits auf dem 80x25-Bildschirm angezeigt wird, ist es sehr einfach, das Zeichen zu lesen.

Zuerst setzen Sie den Cursor an (ändern Sie die Spalten- und Zeilennummern für die Position, die Sie nach) lesen möchten:

mov dl, 40  ;Column number of the middle of the screen 
mov dh, 12  ;Row number of the middle of the screen 
mov bh, 0  ;Display page 
mov ah, 02h ;Function number 
int 10h 

Dann ist es lesen:

mov bh, 0  ;Display page 
mov ah, 08h ;Function number 
int 10h 

Jetzt Sie finden den Zeichencode im AL Register.
Das Register AH zeigt Ihnen die Vordergrund- und Hintergrundfarben dieses Zeichens an.

Um zu testen, ob diese Stelle deinen Charakter enthält, schreiben Sie:

cmp al, "&" 
je YES 

den Charakter vom Bildschirm zu entfernen, schreiben Sie einfach einen Raum auf den Bildschirm:

+1

Ich würde die Zeichen aus dem Videospeicher nicht so lesen. Es ist langsam sogar direkt, und durch BIOS 'Int 10h' ist es mega langsam. Ich weiß, dass es für das Textmodus-Spiel keine Rolle spielt, aber das sollte nur als "es ist möglich" gezeigt werden, nicht wie es empfohlen wird. Auf PC XT-Maschinen ist es viel besser, entweder einen Offscreen-Puffer im Speicher zu haben oder zumindest auf den VRAM direkt über die Adresse b800: 0000 zuzugreifen. Jedenfalls finde ich alarmierender, dass das OP nicht versteht, wie Daten im Computerspeicher gespeichert werden, und ihm beibringt, VRAM zu lesen, geht weit über diese Grundlagen hinaus. (Es ist eine gute Antwort, nur 50x langsamer als die richtige Lösung) – Ped7g

Verwandte Themen