比尔盖茨写的DONKEY.BAS中变量`B%`有什么用?

问题描述 投票:0回答:1

DONKEY.BAS 是一款 1981 年编写的视频游戏,由微软联合创始人比尔·盖茨和早期员工 Neil Konzen 开发。

我们可以在这里体验游戏并查看游戏源代码(只有130+行)。

我可以猜出大部分代码的含义,除了一个名为

B%
,

的整数数组变量
...
1510 DIM B%(300)
1520 FOR I=2 TO 300:B%(I)=-16384+192:NEXT
1530 B%(0)=2:B%(1)=193
...
1760 IF Y AND 3 THEN PUT (140,6),B%
...

看起来 Bill Gates 和 Neil Konzen 用一些神奇的数字填充了这个数组,并将其绘制为坐标 (140, 6) 处的图像,此时变量

Y
(驴的 y 坐标)的两个最低位不都是 0 . 140 是道路中间虚线的 x 位置。

我很好奇

B%
变量的代码,这些幻数是什么意思,以及为什么前 2 个元素(0 和 193)的二进制模式与接下来的 298 个元素不同?

IF Y AND 3 THEN PUT (140,6),B%
似乎对道路中间的虚线做了某种变换,生成动画,让玩家感觉汽车在前进。

game-development dos basic retro-computing
1个回答
0
投票

我相信我明白了,但我不确定。 根据https://qb64.com/wiki/PUT-(graphics-statement)

数组或数组偏移量的前两个索引将保存 存储图像区域的宽度和高度。

这意味着存储的图像区域为 2 像素宽、193 像素高。高度是有意义的,因为它放置在位置 (140, 6),因此它覆盖 Y 坐标 6 到 198(整个屏幕为 320 x 200)。

以 2 为基数表示法,

16384
0b100000000000000
=
2^14
= 16K。

192
0b11000000

我猜

-16384+192
是打开和关闭一些位的快捷方式,他们知道这些位会导致正确的位图存储在数组中。如果负数在 64K 数字空间上以典型的溢出表示法工作,您会得到:

65536 - 16384 + 192 = 0b1100000011000000

这个技巧是由于

16384
2^14
65536
,整数边界,即
2^14
,这意味着
-16384
就像打开前两个(16-14)位。

0b1100000011000000
(
0xC0C0
) 是两个
0b11000000
(
0xC0
) 个字节。我猜这 192 (0xC0) 字节代表
GET
PUT
使用的格式中的实线。

© www.soinside.com 2019 - 2024. All rights reserved.