【译】经典Hammurabi游戏的C#移植版本

发表于2016-03-06
评论0 2.3k浏览

  原文地址:http://www.codeproject.com/Articles/30058/Hammurabi

  版权:作者版权声明为http://www.codeproject.com/info/cpol10.aspx,可以翻译




简介

  Michael Birken关于星际迷航的文章重新燃起我对经典BASIC游戏的兴趣。

  还是孩子的时候,我花了很多时间把AnticAnalog Compute杂志上还有各种各样各样的书籍比如David Ahl's BASIC Computer GamesMore BASICComputer Games 中的代码输入到电脑里。在输入代码并让它成功运行以后,下一步就是对代码做些变化、修改代码、增加功能等等。

Hammurabi最初是Richard MerrilFOCALDEC PDP-8电脑运行的TheSumer Game1969)。一段时间以后,它被移植到PDP-8BASICDavid Ahl一直了这个版本到BASIC,并维护了十年。

  以前我还玩过AtariKingdom game,这是一个磁带游戏,对比过Hammurabibasic代码,AtariKingdomgame似乎是Hammurabi的移植版,只是改用Atari的屏幕功能


移植

  我在1982年就开始使用Atari 400家用电脑。那个时候,我发行让一些基本的BASIC程序,比如来自BASIC Computer GamesMore BASIC ComputerGames的程序正确运行起来很难。AtariBasic处理STRING数组和其他8位机器有一些区别。Atari BASIC还缺少了FNA()FNB()FNC()类型的语句,这些必须转成子程序。幸运的是,Hammurabi并不需要这些功能。

  正如Michael Birken的文章指出的那样,很容易把BASIC程序转成C#

  比如:

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();

l  BASIC的行号改成C#labels

l  BASICGOSUB改成方法调用

l  BASICPRINT改成Console.Write[Line]

l  C#使用从零开始的索引而BASIC使用从1开始的索引,对于数组结构,或者修改数据增加一个无用的数据在开头,或者修改代码把逻辑的索引减1

l  检查剩下的语句,修改代码、变量和逻辑来让它在C#下能够通过编译


运行

  在Hammurabi这个游戏中,你是Sumeria的国王,负责管理这个城市。在游戏的开始,有1000亩土地、100人口和3000粮食

   你可以与周围的城邦用粮食进行土地的买卖。土地的价格在17-26单位粮食之间。你必须用粮食来让你的人民有饭吃以及作为种子来进行来年的播种。

  你很快就会发现一定量的土地只能供养一定量的人民。如果没有足够的食物,人就是饿死。游戏中也会有各种意外,比如瘟疫、老鼠破坏粮食以及收成的变化。

  你也会发现管理这些资源并不是无足轻重的工作。如果人口密度增长过快,就会产生危机。


如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引