问题
I need a way to find if the character ('<') has hit a wall (Black pixel Graphic)
-On a ZX81 game.
I'm been looking at another game... which uses code
if peek(peek 16398 +256*peek 16399) = code "blackpixel graphic" then ...
Which seems to work for them...
Is this correct code?
I'm not really knowledgable with addresses and getting memory and stuff.
Please help me...
-If you know a better way. Please answer :) -Someone mentioned 'cursor position' what the hell is that on a ZX81? Thanks,
回答1:
PEEK(PEEK 16398+256*PEEK 16399)
is an idiom meaning “get the character number at the current PRINT position”. This works because the two-byte word at 16398 is used by the ZX81 BASIC/ROM to store a pointer to the memory location in the screen data block corresponding to the PRINT position.
So to do collision detection, you'd first have to set:
PRINT AT X,Y;
co-ordinates to where the >
is about to move, then read
LET C= PEEK(PEEK 16398+256*PEEK 16399)
then you can print the >
on-screen (overwriting the previous character whose code is now in C
) if you want to before doing the check:
IF C=128 THEN ...
(I'm guessing the character you want is the all-black character 128, █.)
Oh boy, do I feel old.
回答2:
Wow does this go back. I haven't used a ZX81, but I did write some games on a TRS-80 way back in the day.
The inner part:
(peek 16398 +256*peek 16399)
is pretty much taking the value of two memory locations (8 bit) and creating a 16 bit
number from them, which is then used as the address of the outer peek; you might rewrite this as:
addrToCheck = (peek 16398 +256*peek 16399)
pixelValue = peek(addrToCheck)
if pixelValue = code "blackpixel graphic" then...
I'm guessing that the 'addrToCheck' value is actually the character position in the game, expressed as an address on the screen. So if the value is not a wall, then you would update the values in address 16398 and 16399 with a new character position (using a 'poke', no doubt).
Hope this helps
来源:https://stackoverflow.com/questions/3196853/help-zx81-basic-peek-function