帮助:ZX81的“BASIC” Peek函数

9

我需要一种方法来查找字符('<')是否撞到了墙壁(黑像素图形)。

-在ZX81游戏中。

我一直在看另一个游戏...它使用的是以下代码

如果 peek(peek 16398 +256*peek 16399) = code "blackpixel graphic" then ...

这似乎对他们有效...

这个代码正确吗?

我不太了解地址和获取内存之类的东西。

请帮助我...

-如果您知道更好的方法,请回答 :) -有人提到“光标位置”,在ZX81上那是什么?


6
+1 是针对一个2010年如何编写ZX81程序的问题的赞同回复。 - Andy
@Andy +1,也是。而且在2021年仍然有一本很棒的手册,现在在线上:掌握ZX81机器码 - Gerold Broser
2个回答

6

PEEK(PEEK(16398)+256*PEEK(16399))是一个常用语,意思是“获取当前PRINT位置的字符号码”。这是因为16398处的两个字节单词被ZX81 BASIC/ROM用来存储指向屏幕数据块中对应于PRINT位置的内存位置的指针。

所以要进行碰撞检测,首先必须设置:

PRINT AT X,Y;

这段文字涉及到it技术,意思是获取>即将移动的坐标,然后进行读取。

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

如果你想在进行检查之前在屏幕上打印>(覆盖先前字符,其代码现在为C),则可以这样做:

IF C=128 THEN ...

我猜您需要的字符是全黑色的字符128,█。
哦,我感觉自己老了。

好的,非常感谢。听起来很完美。让我试一试,有一个问题:你说“在X,Y处打印”,那它是要移动到哪里呢?您是指它现在正在移动的位置吗?-我不确定您是如何打印它的,在查看位后您还评论“然后您可以打印>”是否会重复打印? =/ - James Andrew
1
PRINT AT 没有字符串参数时,仅设置打印光标位置。 - bobince
我尝试过了... 一直收到'C= 211'的错误信息? =/ 还有字母和黑色图形 =/ - James Andrew
1
啊,尝试在末尾加上分号使用PRINT AT X,Y;(更新的答案)。我认为如果没有分号,它会进入下一行,这可能会使您的定位出错。 - bobince
谢谢,运行得很好...完美无缺。 :) 非常感谢 :) 如果可能的话,我会给你更高的声誉值 =] 你值得拥有它 :) - James Andrew
显示剩余2条评论

1

哇,这个好古老了。虽然我没有用过ZX81,但我以前在TRS-80上写过一些游戏。

内部:

(peek 16398 +256*peek 16399)

基本上是获取两个内存位置(8位)的值并将它们合成一个16位的数字,然后该数字作为外部peek的地址使用;你可以这样重写:

addrToCheck = (peek 16398 +256*peek 16399)

pixelValue = peek(addrToCheck)

if pixelValue = code "blackpixel graphic" then...

我猜‘addrToCheck’的值实际上是游戏中的字符位置,在屏幕上表示为一个地址。因此,如果该值不是墙,那么您将使用‘poke’更新地址16398和16399中的新字符位置值(毫无疑问)。

希望这有所帮助。


游戏中的角色位置?我该如何设置? - James Andrew
通过选择一个内存位置(或多个位置,根据原始来源),将其初始化为您想要字符开始的任何屏幕内存位置,并开始使用它。 - jackjumper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接