汉谟拉比





4.00/5 (5投票s)
经典汉谟拉比游戏的 C# 移植版。
引言
Michael Birken 的 Star Trek 文章重新点燃了我对经典 BASIC 游戏的热情。
小时候,我花了许多时间从《Antic》、《Analog》和《Compute!》等杂志以及 David Ahl 的《BASIC 电脑游戏》(1978 年)和《更多 BASIC 电脑游戏》(1979 年)等书中输入程序。在输入程序并使其成功运行后,下一步就是进行更改、修改代码、添加功能等等。
汉谟拉比最初由 Richard Merrill 于 1969 年在 DEC PDP-8 计算机上以 FOCAL 语言编写,名为“苏美尔游戏”。后来,它被移植到 PDP-8 BASIC。David Ahl 将这个版本的汉谟拉比移植到 BASIC,并增加了 10 年的绩效评估。
那时候,我也玩过 Atari 的 Kingdom 游戏程序,它是用卡带提供的。在查看汉谟拉比的 BASIC 列表后,Atari 的 Kingdom 似乎是汉谟拉比的直接移植版,经过修改以使用 Atari 的屏幕功能。
移植
我从 1982 年开始使用 Atari 400 家用电脑。当时,我有时会发现让通用 BASIC 程序(例如《BASIC 电脑游戏》和《更多 BASIC 电脑游戏》中的程序)正确运行是一个挑战。Atari BASIC 对 STRING
数组的处理方式与其他那个时代的 8 位机器不同。Atari BASIC 也缺少 FNA()
、FNB()
、FNC()
类型的语句,这些语句必须转换为子程序。幸运的是,汉谟拉比不需要进行任何这些更改。
正如 Michael Birken 的文章指出的那样,将 BASIC 程序移植到 C# 相当容易。要将 BASIC 列表“Birkenize”,请按照以下步骤操作:
例如
551 REM *** STARVE ENOUGH FOR IMPEACHMENT?
552 D=P-C:IF D>.45*P THEN 560
553 P1=((Z-1)*P1+D*100/P)/Z
555 P=C:D1=D1+D:GOTO 215
变成
_551: ; // REM *** STARVE ENOUGH FOR IMPEACHMENT?
_552: D = P - C; if (D > .45 * P) goto _560;
_553: P1 = ((Z - 1) * P1 + D * 100 / P) / Z;
_555: P = C; D1 = D1 + D; goto _215;
例如
229 PRINT "A HORRIBLE PLAGUE STRUCK! HALF THE PEOPLE DIED."
230 PRINT "POPULATION IS NOW"P
232 PRINT "THE CITY NOW OWNS"A"ACRES."
235 PRINT "YOU HARVESTED"Y"BUSHELS PER ACRE."
250 PRINT "RATS ATE"E"BUSHELS."
260 PRINT "YOU NOW HAVE"S"BUSHELS IN STORE.":PRINT
变成
_229: Console.WriteLine("A HORRIBLE PLAGUE STRUCK! HALF THE PEOPLE DIED.");
_230: Console.WriteLine("POPULATION IS NOW " + P.ToString());
_232: Console.WriteLine("THE CITY NOW OWNS " + A.ToString() + " ACRES.");
_235: Console.WriteLine("YOU HARVESTED " + Y.ToString() + " BUSHELS PER ACRE.");
_250: Console.WriteLine("RATS ATE " + E.ToString() + " BUSHELS.");
_260: Console.WriteLine("YOU NOW HAVE " + S.ToString() +
" BUSHELS IN STORE."); Console.WriteLine();
- 将 BASIC 行号更改为 C# 标签
- 将 BASIC
GOSUB
语句更改为方法调用。 - 将 BASIC
PRINT
语句更改为Console.Write[Line]
方法调用。 - 由于 C# 使用基于零的索引,而 BASIC 使用基于一的索引,对于数组结构,要么修改数据以添加未使用的第零个元素数据,要么修改代码以从现有索引逻辑中减去一。
- 审查剩余语句;修改代码、变量和逻辑,以在 C# 中编译。
状态时进行,否则就没有理由调用该函数。
在汉谟拉比游戏中,您指导苏美尔的管理者汉谟拉比如何管理这座城市。游戏开始时,苏美尔最初有 1,000 英亩土地,100 人口,以及 3,000 蒲式耳的谷物储存。
您可以与您的邻国城邦买卖土地,用谷物进行交易。土地价格将根据每英亩 17 到 26 蒲式耳而有所不同。您还必须使用谷物来喂养您的人民,并作为种子来种植下一年的作物。
您很快会发现,一定数量的人只能耕种一定数量的土地,并且如果他们没有得到足够的食物,人们就会饿死。您还必须应对意外情况,例如瘟疫、老鼠破坏储存的谷物以及收成变化。
您还会发现,在一个时期(例如十年)内管理这款游戏中的少数资源并不是一件容易的事。人口密度危机很快就会显现出来。
参考文献
- Star Trek 1971 文字游戏
- BASIC 电脑游戏
- 更多 BASIC 电脑游戏
- 汉谟拉比文章
- Wikipedia
- Dunnington (损坏的链接) Wayback Machine 条目
- BASIC 源代码 (损坏的链接) Wayback Machine 条目
- 另一篇汉谟拉比文章
历史
- 2016 年 2 月 19 日:初始版本