2010-07-07 24 views
8

muszę znaleźć sposób, jeśli znak („<”) uderzył w ścianę (czarny piksel Graphic)Pomoc: ZX81 „podstawowe” Peek Funkcja

-On na ZX81 gry.

Mam był patrząc na innej grze ... który wykorzystuje kod

jeśli peek (PEEK 16398 + 256 * peek 16399) "graficzny blackpixel" = kod potem ...

Która wydaje się działać dla nich ...

Czy to jest prawidłowy kod?

Nie znam się na adresach i pamięci.

Proszę mi pomóc ...

-Jeżeli znasz lepszy sposób. Proszę odpowiedzieć :) - Ktoś wspomniał o "pozycji kursora", co to jest, do diabła z ZX81? Dzięki,

+5

+1 Na pytanie, jak zaprogramować ZX81 w 2010 roku :) – Andy

Odpowiedz

5

PEEK(PEEK 16398+256*PEEK 16399) jest idiom oznaczający „uzyskać liczbę znaków w bieżącej pozycji druku”. Działa to, ponieważ dwubajtowe słowo o numerze 16398 jest używane przez ZX81 BASIC/ROM do przechowywania wskaźnika do lokalizacji pamięci w bloku danych ekranu odpowiadającym pozycji PRINT.

więc zrobić wykrywania kolizji, to że najpierw trzeba ustawić:

PRINT AT X,Y; 

współrzędne miejsca, gdzie > ma się poruszać, następnie czytać

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

wtedy można wydrukować na ekranie > (zastępując poprzedni znak, którego kod jest teraz w C), jeśli chcesz przed wykonaniem czeku:

IF C=128 THEN ... 

(zgaduję żądany znak jest cały czarny charakter 128 █.)

O rany, czuję się stary.

+0

Ok dzięki dużo. Brzmi świetnie. Pozwól, że spróbuję, jeden problem: Powiedziałeś, że "drukuj na X, Y", gdzie zamierza się przeprowadzić? masz na myśli, gdzie się teraz porusza? -Jestem zdezorientowany, jak możesz go wydrukować, a potem po krótkiej recenzji, którą skomentujesz, "możesz wydrukować>" czy drukujesz dwa razy? =/ –

+1

'PRINT AT' bez łańcucha ustawia tylko pozycję kursora wydruku. – bobince

+0

Wow, nigdy o tym nie wiedziałam =] Dziękuję bardzo. -Ta rada, której potrzebowałem =] –

1

Wow to się cofa. Nie używałem ZX81, ale napisałem kilka gier na TRS-80 w ciągu dnia.

Wewnętrzna część:

(Peek 16398 + 256 * Peek 16399)

jest praktycznie biorąc wartość dwóch miejscach pamięci (8 bitów) i tworzenia się 16 bitów

numer od nich, który jest następnie używany jako adres zewnętrznego podglądu; można przepisać to jako:

addrToCheck = (peek 16398 + 256 * peek 16399)

pixelValue = peek (addrToCheck)

jeśli pixelValue = kod "blackpixel graficzny", a następnie ...

Zgaduję, że wartość "addrToCheck" jest w rzeczywistości pozycją postaci w grze, wyrażoną jako adres na ekranie. Jeśli więc wartość nie jest ścianą, to zaktualizowałbyś wartości w adresach 16398 i 16399 z nową pozycją znaku (bez wątpienia używając "poke").

Nadzieja to pomaga

+0

Pozycja postaci w grze? Jak mam to ustawić? –

+0

Wybierając lokalizację pamięci (lub lokalizacje, podobno zgodnie z oryginalnym źródłem) do użycia, inicjując ją do dowolnej lokalizacji pamięci ekranu, od której ma zacząć się znak i dążąc do tego. – jackjumper