【发布时间】:2019-01-25 04:24:46
【问题描述】:
我运行了 C64 用户手册第 5 章中的“More Bouncing Balls”基本程序,并在该章的最后一页添加了内容。代码如下:
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 行中的参数以允许球在撞到墙上时向不同方向移动(有点像 Pong 中的)?
注意 1:当在第 80 行和第 100 行更改 DX 和 DY 时,我得到了一些有趣的抖动运动,但正如预期的那样,好像屏幕上绘制的球是一个不均匀的球体。
注意 2:我知道通常不应在标题中包含标签,但不确定如果我将它们排除在外,这个问题是否会变得难以搜索。如果需要,请随意编辑标题;我很高兴接受教育。
【问题讨论】:
-
第 60 行应该是“60 for t=1 to 10:next t”吗?
-
当然!我的错。现已编辑。
标签: random graphics basic c64 commodore