我已经运行了C64用户手册第5章中的“更多弹跳球”基本程序,并添加了该章节的最后一页。代码如下:
10 PRINT CHR$(147):REM SHIFT CLR/HOME
20 POKE 53280,7 : POKE 53281,13
30 X=1:Y=1
40 DX=1:DY=1
50 POKE 1024 + X + 40*Y, 81
60 FOR T=1 TO 10: NEXT T
70 POKE 1024 + X + 40*Y, 32
80 X=X+DX
90 IF X=0 OR X=39 THEN DX=-DX
100 Y=Y+DY
110 IF Y=0 OR Y=24 THEN DY=-DY
120 GOTO 50
这句话的意思是在结尾处添加了以下几行代码:ɔ。
21 FOR L=1 TO 10
25 POKE 1024+INT(RND(1)*1000),160
27 NEXT L
85 IF PEEK(1024+X+40*Y)=160 THEN DX=-DX:GOTO 80
105 IF PEEK(1024+X+40*Y)=160 THEN DY=-DY:GOTO 100
这些行与问题无关,但我为了完整性而包括它们。
我想为球的方向添加随机性(
chr$(81)
),注意到通过将 DX
和 DY
更改为其他数字,可以使其以非45°的角度移动;当然,如果同时将DX和DY设置为1,它们会“推”球朝垂直相反的方向运动,ɔ:在两者之间的中心处,等于45°。但是,当尝试使用随机数时,会得到真正奇怪的行为。 我假设数字必须介于0和1之间,因此尝试了
(INT(10*RND(1))+1)/ 10
,并将第40行更改为将DX
和 DY
设置为此随机数。结果是我得到了一些非常奇怪的行为。 球会以可预测的角度快速移动,从右侧消失并重新出现在左侧,向下移动几行,然后完全消失,然后在屏幕顶部上方绘制不动的球,一个接一个地水平移动,最后崩溃。当将
DX
或DY
设置为整数时,例如2,仍会出现一些奇怪的行为,例如球在一端消失并在另一端重新出现,而此时程序将在几秒钟后结束。是什么导致了这种不稳定的行为? 我如何设置第40行的参数,以使球碰到墙壁时可以在不同方向上移动(类似于乒乓球)?
注意1:当在80和100行中更改
DX
和DY
时,我得到了一些有趣的抖动运动,但正如预期的那样,好像屏幕上绘制的球是不均匀的球体。注意2:我知道通常不应在标题中包含标记,但不确定如果省略它们是否会使问题过于难以搜索。 如果需要,请随意编辑标题; 我很乐意接受教育。