数学算法
时间:2007-02-17 来源:PHP爱好者
很好的天气。
当我从考场步出来的时候,似乎什么都没有想,又似乎什么都在脑子里,除
了GRE的成绩。几个月来炼狱般的生活,导师、工作、考试的巨大压力,似乎瞬间
消散,又确确实实留下了一些东西在身体里,使得我可以昂起头,面对周围的一
切。有人说不考GRE,人生就会有缺憾,
可能真的有道理吧。
快要步出清华大门的时候,我的思路逐渐清晰了起来。出国,至少两年以后
吧。我有着业余高手级的文学,诗词,历史功底,专业的计算机编程水平,半专
业的人工智能知识和数学功底,爱玩,爱幻想,喜欢投入,总在构思着故事和游
戏,有时我甚至觉得自己是个天生的游戏工作者。我要留出毕业后的一年半时间,
痛痛快快地去试试自己的梦想,不管结局如何。不然,也许我的一生将会有个永
久的遗憾。
回到实验室,我拨了钟的电话,他是前导公司的游戏策划。
“嘟。嘟。。。”,占线,钟大概又在玩MUD了。没办法,晚上去他家找吧。
见到钟已经是一周多以后,他总在公司熬夜,我找了他三次,并且留下了字
条,才终于在周六逮住了他。我说我对游戏设计有一些想法,并和他稍微聊了聊。
钟对我讲的方面做的不多,他说会找赤壁的主程序员刘和我讨论一下。同时也提
醒我,游戏设计是很麻烦的。
“为了一个箭楼的火力强度设置,我们就花了很大精力” ,钟说。
“哦”,我心里想,用上运筹学知识,这个问题不应该那么困难。
我问了前导的地址,这一次,我没有对钟说我想加盟前导。
前导总部坐落在一个旧楼的第四层,我费了很大劲才找到。钟帮我找来了刘,
刘向我介绍赤壁编写的一些情况。
“那么,士兵们寻路的算法是什么呢?”我问。
“我们自己设计的算法,效果还不错。”
“有一种集成电路布线的算法,好象可以用在这里。”
“我把谢找来吧,他是新来的,现在在做这方面的工作。”
谢是广西一所大学计算机系毕业的,木讷寡言,他说现在他使用的是A*算法,
是世界上最先进的算法,保证可以找到最短路径。
“A*算法?”
“就是在每一点估计到终点的距离,沿着最小——”
“我明白了”,我怎么给忘了,是A*算法,也叫最佳搜索算法。我不由对谢
另眼相看,看来前导确实招到了高手。
“现在寻径算法效率如何?”
“设定栈为200的话,同时跑400个兵没问题,即使考虑到其他程序耗费的时
间,同时跑一二百个士兵也可以。要把栈设成400就不行了。”谢说。果不出我所
料,我决定把自己的想法和盘托出。
“我觉得世界上的游戏,包括C&C,魔兽等等,在部队人工智能算法上都设计
的不好,部队单位一多,速度就上不去,并且存在堵死的可能。但是,在解决这
个问题上,前导的《赤壁》有着得天独厚的条件。那就是将领的设置,但是将领
的作用在赤壁中发挥的还不够充分。”“从人工智能引擎来说,可以有两个主要
改进方向,如果这两个方向实现了的话,前导的即时战略人工智能引擎将是世界
最先进的,远远超过国外游戏的水平。”“一个是给士兵、将领、统帅以不同的
智能模型,士兵围绕着将领,只需要听从将领命令,并判断附近十几乘十几区域
内的情况就可以了,这样,计算士兵行为的复杂度是几十倍的降低,将领则判断
整支部队的行进路线,可以采用A*算法对整个棋盘进行判断,将领要始终注意维
持队形,避免士兵掉队。士兵只要不掉队,就不会不知所措。这样,一支混编的
部队行军速度将由最慢的作战单位决定,这也符合常理。统帅实际上只需要计算
敌方统帅的策略,不必担心速度,因此可以编的更复杂,统帅指挥将军,不直接
指挥士兵,这样统帅也可以完成更复杂的任务。”“出现意外的,本单位无法解
决的情况则向上级汇报,士兵向将军报告,将军向统帅报告,形成一个类似消息
处理机制这样的结构,上级再决定如何统筹解决,如哪支部队让路,遭遇敌人怎
么办等等,这样,可以避免出现堵死的情况和边挨打,边傻追一个敌人的情况。”
“第二个是把判断改为计算,将领的各项属性通过一些方程式算出他的策略,
不同的将领应有各自的优缺点,都有最适合的场合,最擅长的战斗。如张飞勇猛
而欠谨慎,因此遇敌也喜欢猛打猛冲,所以善攻不善守,赵云比较谨慎,防守就
比较擅长,冲锋陷阵就不如张飞的威力。如果找到根据将领的各项属性来计算策
略的方法,各个将领的性格因素能在游戏中表现出来,那么这个游戏就具有了很
强的RPG性质。”
“主帅也分无能型,谨慎型,勇猛型等等,但主帅的性格变化可以更多,我
们甚至可以设计一些战术,比如偷袭,烧粮,骚扰等等,供主帅选用。在指挥将
领方面,只有聪明的主帅才可以知人善任。对抗相同数量的部队,和郭汜对阵与
同曹操对阵难度就大不一样。这样,才是真正的即时战略游戏而不是即时战术游
戏。”
“另外,战斗中最好有一些随机性,使得人们只能预知大概趋势,而不能预
知精确结果。我认为这应是几乎所有游戏应遵循的原则。”
我在讲这些的时候一定是神彩飞扬,以至于刘微笑着,用那种眼神看着我,
带点鼓励,也带点同情,象是在说:“我们以前也曾这样充满幻想,但当发现幻
想离现实很远时,会痛苦的。”
半个月后,我又去了趟前导。
“谢走了”,刘说,带着点苦涩的笑。“几个哥们找他开网络公司”。
真是出乎意料,但也在情理之中。
“编游戏比一般编程工作要辛苦的多,挣的钱却少”刘继续说,“如果没有
编游戏的热情,我们的工作根本做不下去。”
我们聊了《赤壁》系列的下一部——荆州。荆州虽然还是即时战略,但与赤
壁的区别很大,胜负将不仅取决于一两场局部战斗的结果,兵种也将变得更多,
更复杂。
当时前导正在全力赶制《水浒》,《西游记之齐天大圣》也在制作中,刘估
计正式开始制作《荆州》将是第二年夏天了。我们商定我抽空写写士兵策略和将
领策略,看看简化士兵策略算法和给将领策略加入性格因素是否可行,如果可行,
《荆州》将是第一个实验品。这时,前导快要搬家了。
当我再次去前导时,已经是新的一年,前导也已搬到了新家——一栋看起来
颇为整洁干净的小楼房。 看来前导的经营状况良好。
这次我交给了刘一个游戏剧本:烽火英雄传,是根据资治通鉴中契丹灭后晋
一段历史改编的。我不想写那种拯救世界的英雄,更偏爱于惊心动魄的历史事件
中见证人的角色。如同剧本中的主人公,挽回了一场大战役的结果,却挽不回后
晋的覆亡。同时,我也不想人为制造什么美满的结局,历史的结尾就够了:契丹
退回北方,随即内乱,趁人之危建立的后汉王朝风雨飘摇,汉奸们一个个走向自
己的结局,郭威、柴荣崛起,赵匡胤登上舞台,大乱即将结束,主人公也到了归
隐的时候。
“看来只是一个普通的RPG剧本。”
“我想实现的是动态战棋。象Diablo又不完全是Diablo。具体的战斗形式可
以有简单的战斗,暗杀,刺杀,追杀,逃跑,突围,以及大军混战中的斩将夺旗,
关键还是在于不同的战斗设计,实现它们需要比较高超的数学模型知识。”
“ 我在想一种战斗形式,表现大场面下个人的行为,
象两军阵前斩将夺棋,通过士气的变化来体现胜败的走向等等,而不是以简
单的屠杀为满足。我希望能有一个用即时战略的引擎做的战棋游戏。”
“我想毕业后到前导工作”,我说。
刘楞了一下,然后露出了一个比较灿烂的笑容。
“做游戏很辛苦的,待遇也不好,并且要有挨骂的心理准备。”
“我来前导,不是为了玩游戏,我给自己一年半的时间,在这段时间里,我
想尽情发挥自己。”我说。
“非常欢迎。不过,你最好和边总谈一下,选择工作很重要的是选择老板。”
我们接着聊做游戏,又谈了挺久,刘答应和边总约个时间和我见面。
第二天,刘打电话通知我,周六上午见边总。
周六我九点就到了前导,一个工作人员接待了我。我说明来意后,他问了一
句“听说你对赤壁有一些改进意见?”,看来消息已经传出去了。我们聊了一会
儿,我又等了一小段时间,十点左右,边总请我过去。
边总看上去四十多岁,没什么老板架子,他自称也是研究所里出来的。我们
的话题很快就转到了游戏工作上。我直截了当地对前导的新策划《红楼梦》提出
了担忧。“我很喜爱《红楼梦》,读过很多遍,我觉得现在所有的游戏形式都不
适合表现红楼梦,因此很担心编出来的游戏体现不出原著的魅力。”
“为了红楼梦,我前期已经投入了十万元,让几个人去研究怎么做。”边总
侃侃而谈。“最后的报告没有达到我的要求,但也有不少成果,策划的女孩说游
戏怎么编,怎么玩已经在她脑子里有了概念。”“红楼梦具体将做成一个事件迷
宫的方式。。。”“我们曾经就这些设想请教过红学家们,那些老人听说要把红
楼梦编成游戏,都特别激动,说要全力支持。。。”
“另外,我们要采取公开征集剧情的方式,让玩家参予编写。。。”“红楼
梦做出来也许不够成功,也许会赔钱,但关键在于能够体现我们的能力,做出来
之后,
别人看你就不一样了。。。”“《红楼梦》之后,我还考虑编一个现代生活
的游戏,用类似的结构。。。”
我逐渐明白了边总的苦心,
如果《红楼梦》成功,足以改变人们对于游戏的看法,游戏将不再被认为仅
仅是消磨时间,也可以帮助大家了解文学,更进一步,则可以成为现实的另一种
表示方式。仅从红学家们支持游戏这点来说,就足够给游戏正名了。当然,这个
游戏一定要编好,不在于多么好玩,而在于体现它的表示形式是否可行,是否有
发展和是否有文学和艺术价值。
“完成这样的游戏,情感模型和社会模型非常重要,现在没有一个游戏能用
算法来模拟出哪怕有点逼真的情感。”我说。“情感应该是只能大约把握,却捉
摸不透的,绝不是简单地说你投入了多少就回报多少。”
“但我倒有个想法,用非线性迭代方程来做情感模型。非线性迭代方程产生
的混沌结果就是无法估计的,可以用它当作人物的反应,而某些参数则是真正的
情感参数,与人物的行为并没有直接的、线性的关系,就象你和别人闹矛盾并不
说明别人不喜欢你了,也许是太喜欢你才对一些事情很敏感的。”“所有情感模
型对应的方程应该都有一个‘过犹不及'的效果,再加上点随机性,并且要比较
符合常理,这样你大概可以推测情感的发展趋势,又无法预测下一步会发生什么。”
“社会模型比情感模型更复杂,但是如果情感模型成功,可能很多技术可以应用
到社会模型当中去。”“总体的感觉是,《红楼梦》不好做,但做成了的话,绝
对是一个突破。”
我们继续谈游戏,从前导的谈到其他国内的,又谈到国外的。边总给赤壁打
了60分。谈到编写游戏工作时,边总的观点是:最重要的是编程的人有兴趣,老
板则应该少管,给工作人员以尽量发挥的空间。他举了当时颇为成功的一个游戏
《大唐诗话》,说当时公司根本就不重视这个游戏,让制作组随便编编,结果却
大获成功。边总说刘的工作组目前工作比较良好,他希望保持这个工作组的稳定。
因此我提出加盟《红楼梦》制作组。
“我们还是希望主程序员比较有经验。”“我来前导,也不可能一开始就当
主程序员,我想做情感模型。”“不过我要预先提醒你,理论研究和实际工作不
一样。”“我会注意的,不过我自信,如果我做不出来,国内几乎没有人能做出
来!”
这次见面使我下决心,毕业后不管各种国家优惠待遇,也不要拿到北京户口
的机会,以普通程序员的身份来前导工作。其实我对边总的现代生活游戏前景并
不看好,但我却很感兴趣于把情感模型和社会模型用于武侠RPG游戏。这样的游戏
简直可以成为RPG的终结者。为这样的游戏,后来我设想了很多,我把我所设想的
游戏叫做——江湖行。
《江湖行》的关键在于江湖模型,江湖模型中又有门派模型,个人策略模型
等等。我想充分运用统计学、随机分布理论、非线性迭代、混沌和复杂、甚至分
形来设计这些模型。在我想象中的《江湖行》中,江湖的主要势力是各个门派,
门派之间也有普通、结盟、仇敌等等关系以及自己的势力范围。在势力范围以外
的地区,并非没有此门派的人走动,而是相对较少。另外,势力范围也在不断地
变化之中,每一次变化往往都意味着一场血雨腥风的较量。江湖中的一般小人物
随机出现即可,只有门派掌门、门派中的重要人物、与主人公关系特别密切的人
才有自己的属性。小人物的随机出现是根据出现地点的势力范围、门派的势力状
况、当时门派的行动策略以及小人物自身的属性而决定出现概率的。江湖中的人
物依武功和所参加的战斗决定其名望参数。一般名望高的人不屑于与名望低的人
较量,除了少数杀人狂魔外。但是,如果一个低名望的人杀某一帮派的人太多,
就不免要招来强敌,但另一方面,一个人为某一门派立的功太大的话,也会受到
特殊的保护的。那些有自己属性的人,不管属于哪个门派或者是无门无派,都不
意味着他们的身份已经固定,他们可以升职或被降职,可以叛变,有时也会送命。
因为每个人的资质不同,武功的进步上也带有一定的随机性。同时,江湖上也会
按照统计学的规律,随机诞生一些新星,以取代消亡者,有些则是通过消灭对手
来完成取代。因此,即使门派内部,也将会尔虞我诈。从数据结构上来说,每个
门派是一个树,树的顶点是掌门,然后再一级级地向下发展。树的节点也分明节
点和暗节点两种,暗节点就是卧底,内奸或密使。不但一个树的明节点可能和其
他树的暗节点重复,不同树的暗节点也可能重复(双重间谍),还有一棵树自己
的明节点和暗节点重复的情况(装成小人物的帮中高手)。人物正常情况下按照
明节点身份行动,只有外界条件触发才导致人物行为改变。另外,还有一些流浪
高手,归隐高手等等。战斗上是分胜败易,杀人难,决定铲除一名高手是江湖中
的大事,武功高出越多,杀死敌人的概率越大,但如果武功相差不是非常多,要
杀掉一个高手将非常辛苦,还要当心高手的伙伴帮忙。我希望最终达成的模型是
即使我们任其自然发展,它还总是江湖的样子。
而游戏中的主角的行为,有一个基本的原则:你可以做你想做的任何事,但
必须要为其付出代价。你可以杀手无缚鸡之力的人,但必须准备面对捕快的追杀,
你可以杀掉追杀你的捕快,但必须准备与名捕较量。你可以杀掉某个掌门的幼子,
但一旦被发现,就试试看能不能逃过整个门派的追杀吧。另外,你自己的感情也
会限制你的行为,如果你选择喜欢上了一个女孩,又选择杀了她,结果多半是自
己发疯。
主角的资质是随机设定的,但当然有一些有利因素:主角撞上奇遇的概率比
较大。因此,即使是资质平平的主角,也可能成为绝顶高手的。在游戏里还可以
设定故事情节,故事情节的发展是触发式的,并且大体按照江湖的规则。游戏中
可能有很多短故事和一些长故事,最高理想是用故事编辑器来编故事。游戏开始
时,主角可以是个平民,也可以是个帮派小人物,要是开始就是一派掌门,也没
什么不可以,只是这游戏就有点象三国了。主角在江湖中游荡,可以加入某个门
派,也可以哪个门派都不加入,找游侠,隐侠学武功,还可以从一个门派改投另
一个门派。练功方式有点类似MUD,可以自己练,也可以找人比试,当然,找上大
魔头算你自己倒霉。你挑战的结果会影响你的名声。名声大了,麻烦也就来了,
有人找你比试,有门派邀你加盟,总之是左右为难。但正如前面所说
,杀人是一件大事,所以小命的危险还不大。另一种危险是宝贝,匹夫无罪,
怀璧其罪。不小心找到一本秘笈之类的,武功当然可以突飞猛进,但万一被人从
武功上看出来历,招来一群争夺者,那麻烦可就大了。因此,未练成武功之前,
一定要慎重。游戏的结局可以借鉴《大航海时代II》,以触发故事的结局作为结局,
同时你还可以选择继续玩下去。对于触发故事,我也有不少设想,假设你加入了
一个门派,成为本门的重要人物,和另一个门派是死敌,不慎触发了故事,于是,
你爱上了敌对门派中的一个女孩,然后,看着办吧,如果你们选择私奔,两个门
派会一起追杀你们。
我向往的是一个变化无穷的江湖,在这个江湖之中又有自己的规律和能够体
现出人们情感的故事。
这天,钟请我晚饭,我费了很大劲才让钟明白《江湖行》的设想。“其实,
就是一个单人MUD。”钟下结论道。
“可以这样说。”
“如果做出来,真的是游戏的巨大突破。”
“我也知道很困难,但并非不可实现”我说。“我先做红楼梦的情感模型和
社会模型,如果成功,再移植到江湖人物和门派上,然后,再向整个江湖模型进
军。”
“这些东西好象难度非常大,但即使数学家做不出来,也并不一定就真的做
不出来。做这些模型最重要的是数学模型能力,和理论研究是两回事。也许没人
做出来只是因为没有高手去做。”我笑笑。“其实,老外的数学水平很差的。”
“另外,我觉得,即使能产生一些副产品,意义也很重大。”“我曾经有一个有
点关系的设想,就是在RPG游戏中加入镖局的设计。”钟说。“主角可以到镖局挣
银子,镖局接镖,走镖,强盗劫镖等等都是随机出现的。”我们商定,由钟提出
具体的要求,我考虑如何实现,并给出算法模型。刚加入前导肯定只能做一个普
通程序员,但我希望改变整个前导。我想通过钟和刘把我的很多想法实现。〈江
湖行〉的设想太遥远,我打算以〈红楼梦〉为第一步,〈烽火英雄传〉或者我的
另一个设想〈天外传说〉或者公司提出的其他游戏,关键是试着把即时战略引擎
用于RPG的设想作为第二步,如果一切顺利,我也就不打算出国,而是全力向〈江
湖行〉挑战!
聊天过程不免会涉及游戏界的现状。“前导公司情况还好吧”“象这样的小
公司,会不会突然倒闭都是说不准的。说不定哪次资金周转不灵,一下就完了。”
我笑笑,没太把这句话放在心上。
回去的路上,没来由地想起苏芮的一句歌词——是我们改变了世界,还是世
界改变了我和你。
那段时间,我拼命地买书,从《可计算性和复杂度理论》到非线性科学丛书
中的三本,从小波理论到分形图象学,还有好几本〈第一推动丛书〉用来开阔眼
界。至于运筹学、概率论、计算方法、神经网络、、数学模型、计算机图形学等
等教材,不管学过没学过,见一本买一本。我的时间除了写毕业论文外,也大都
用在了学习这些知识上。我学习的目标是知道什么时候需要用什么知识,以便将
来查阅,因此大部分书是走马观花。但读非线性科学丛书则很辛苦,因为我必须
掌握非线性迭代的一些规律。同时,我也开始编写几个小实用程序。
“送你一个小礼物。”我拿出一张光盘(我们实验室有刻盘机),“一个随
机数生成库。”“C语言里不是有随机数生成程序吗?”刘说。“C里面的速度有
限,随机性也不好。我这个是批量产生随机数的一个类,核心代码用汇编编写,
瞬间就能产生几千个随机数,并且随机性绝对好。另外,它还可以直接产生高斯
分布的随机数——”“等等,什么叫高斯分布?”“高斯分布是自然界最常见的
概率分布,很多其他分布在数量很大的时候也可以用高斯分布近似。用高斯分布
随机数模拟随机事件效果绝对好。另外,分形里也要大量用到高斯随机数。”我
执行了另一个程序,屏幕上显示出一个线条画成的山。“这就是用这个随机数发
生程序画成的分形山。”我双击鼠标左键,屏幕上的山改变了形状。“我们可以
考虑用分形算法自动生成背景。”我拿出一本书,翻开彩页,交给刘。“这里的
风景都是计算机画出来的,只要在分形算法基础上把遮掩、光、影效果加上就可
以。”彩页中有很多图象,不仅有山,有水,还有似乎是洪荒时期的植物,升起
的月球上环形山清晰可辨,云、烟更是惟妙惟肖——因为云、烟本就是遵循分形
规律的典型。刘向我讲述了〈荆州〉所希望产生的随机地形图,我略微考虑了一
下,断定分形算法可以完成它,于是我们决定用分形来做地图。
当时刘被调去给〈西游记〉组做3d打斗动画,我几次去都看见他在忙着编Di
rectX程序。〈西游记〉游戏的结尾是孙悟空与巨灵神之间的3d动画单挑。画面上
孙悟空和巨灵神的动作都挺花哨的。“是实时战斗吗?”“不是,是回合制的。
实时的太困难。”“哦。”我心里有一个声音同时问:“有多困难?”几天后,
我又来到了前导。“3d实时战斗好象并不困难。”我说。“既然单人动作已经可
以实现,那么困难就在击中判断上。就是什么时候兵器相交,什么时候某方被击
中。我们需要编写一个判断的程序。”“DirectX有这样的功能。”“但是需要判
断的项目太多,是不是?这样不是办法。但是,我们不需要象DirectX那样精细,
只需要让人感到有比较逼真的打斗效果就可以了。”“我们可以把人和兵器分解
成球体和圆柱体的组合。象一个人头是个球体,双臂、双腿总共是八个圆柱体,
身体如果说一个圆柱体不逼真,可以用三个并排的,相互重叠的圆柱体表示,手
、脚也当作球体。孙悟空的金箍棒是一个细长的圆柱体,巨灵神的双锤都是圆柱
体加球体。当然,不是真的这么画他们,只是用于击中检测。这样,一方可以用
不到二十个圆柱体和球体表示”“在计算机中,建立一个空间坐标系,坐标系中
物体数据结构是点或者线段和一个距离参数。对于球体,它的球心为点参数,球
半径为距离参数,对于圆柱体的记录,圆柱轴线段为线段参数,截面半径为距离
参数。也就是说,圆柱实际上是用和这条线段距离小于截面半径的所有点表示,
这样有一些误差,但是没什么大关系。”“这样,击中检测就变的很简单了,比
如计算孙悟空是否击中巨灵神的头,只要计算表示金箍棒的线段和表示巨灵神头
的球心之间距离是否小于金箍棒的距离参数和巨灵神头的距离参数之和就可以了。
一次判断只需要计算几十个线段和点之间的距离,整个计算时间绝对能控制在毫
秒量级以下。”“也许,〈西游记〉之〈大闹天宫〉可以用这种方法。”刘说。
我再次来到前导。“做的怎么样了?”“差不多结束了,”刘说,“玩玩看
看?”游戏中,孙悟空有体力、内力和生命值三种属性,体力有三大格,在不断
地回复中,一般攻击或者防御消耗一格体力,狠招消耗两格体力,必杀技消耗三
格体力。体力不够,不能出手。纯防御把伤害减到四分之一,但体力停止回复,
防守反击把体力回复速度降到三分之一,伤害减半。魔法有恢复和杀伤两种。光
、影和很多动作做的相当漂亮。我试了试各种攻击魔法,代价是孙悟空牺牲了好
几次。“好象攻击力最强的魔法不是画面最漂亮的。”“美工做的时候,策划没
有说哪些魔法攻击力强,哪些弱。”我拿到了一个招式威力表,看了一下。“这
样不行,”我说,“招式的威力都是固定的,那么,必然存在一个最佳策略,玩
家只要按照最佳策略进行,就必然得到最佳结果。比如现在,孙捂空的最佳策略
是:必杀技,血快满了就回复。其他的设计全都成了陪衬了。”刘去找了西游记
的策划,策划想了一下,决定让必杀技消耗魔法。刘把这个方案转告了我。“这
样还是不行!”我几乎喊了出来。“线性的规则永远得不到非线性的结果,这样
的改动最佳策略仍然存在,招式必须得和生命、状态值关联上才会有变化的效果!”
“数据结构已经定死了,”刘说。“要把它们关联上,整个数据结构都得改变,
至少得一个月。”我有点沮丧。“那么就是设计上的问题了,策划应该知道——
等等,我有办法了!”我转向刘,“程序可以判断受攻击者是在一般状态,防守
反击状态还是防御状态,是不是?”“是的。”“我们可以让防御只对攻击有效,
而对魔法无效,这样,如果是一般状态,魔法攻击是吃亏的,但如果敌人在防御
中,那么魔法攻击的效果就是最佳的。另外,每一次攻击对敌人造成的伤害可以
用高斯随机数表示,如果形势不妙,使用必杀技还有败中求胜的可能,否则求稳
胜的希望更大。不同的情况下就应该适合使用不同的招式,不能造一些花哨但没
用的招式。”“整体生命值设置要设成失败的概率比较大,但存在百分之二三十
的战胜概率,这样玩家才会觉得有意思。具体设置成多少可以计算出来,我可以
帮你们算。”刘微笑着说了一句什么,当时我太兴奋,也只顾考虑问题了,没有
听清,好象是“你还真有办法”之类,虽然语气是善意的,但却像是带点讪笑。
当我再次来到前导时,我的第一个问题是:“现在3D战斗怎么样?”“还是
老样子,”刘说,“和你上次玩的一样,一点改动都没有。”“为什么?这样所
有的魔法攻击都没用,美工的工作都成了浪费!”“他们自己都不急,我们急有
什么用。”刘平平淡淡地说,似乎早已习惯了这种情况。那一瞬间,我的心好冷。
马上就要毕业了。我把户口落回原籍,准备以打工的身份留在北京,但有一
些手续还得回合肥办一下。回合肥之前,我去了趟前导。
“有个很不好的消息,”刘说。“前导融资失败了。”“会怎么样呢?”
“不知道,最好的情况是裁去一些制作组,最糟的情况是不再做游戏了。”
如果是裁去一些部门的话,我相信最后裁去的是刘的工作室。“我去合肥十天左
右,回来之后再和你联系。”第二天,我踏上了去合肥的火车。
前导,唉,前导。也许他们铺的摊子太大了,也许他们太好高鹜远了,也许。。。
但如果他们真能融资成功,是不是一切都不同了呢?只能祝愿结果会好一点,也
许只有经过涅磐,凤凰才真正成其为凤凰吧。
回到北京的第二天,我就去前导看看结果。原先坐满了工作人员的大厅现在
冷冷清清,地上到处是废纸,这一切都预示着,最糟的结果发生了。刘还在,在
一个单独的机房里。“将来有什么打算。”
“等。”刘说。“我们这一组心还很齐,大家都想继续做游戏。但是,家里
压力也很大,他们本来就不希望我做游戏。”“你们组有多少人?”“三个程序
员,两个美工,一个策划。现在我们希望加盟别的游戏公司。”“哪个公司,联
系好了吗?”“尚洋吧。”“尚洋?!”我立刻回想起被骂的体无完肤的《血狮》。
“自从《血狮》失败以后,尚洋公司也是痛下决心改变形象。”刘说。仍然带着
他那惯有的笑容。“并且,其他公司一下子也吃不进那么多人。只是,以后工作
条件就艰苦了。”“本来我们还有3D即时战略的设计的。”
刘给我演示着画面:起伏的山峦上,零零星星地分布着持戟的士兵。“这些
可能要等到很久以后了。”我感觉自己的游戏梦正在远去。我想留住它,我想不
管收入,不管将来,对刘说:“我愿意成为你们组的第七个成员。”但话到嘴边,
变成了:“希望以后和你继续联系。”
我终于毕业了。毕业的我,却不知道该去哪里。导师和外边有一个合作项目,
派了四个学生,他建议我领着学生们工作,先干三个月,每月发我两千。工作刚
开始的时候,我从对windows95系统都不熟悉,对VxD一无所知。
在一个月多一点的时间里,我除了帮那些学生调程序外,完成了一个200K的
截取windows95文件操作的vxd,其中包括硬件等级的磁盘读写,直接获取物理内存
然后自己进行分配管理的类,对FAT16的读取以及在硬盘中直接读取长文件名,一
个读取磁盘的自定义Cache结构,Hash函数搜索的文件读取簇表等等。合作方的老
板想雇佣我,我说要等我与老师的口头协议到期以后。这时,刘的制作组已经加
盟尚洋了。我和他通过几次电话。
“现在怎么样了。”
“很忙,忙着做《烈火文明》。”“我挺希望了解你们现在的情况。”“恐
怕现在比较困难了,尚洋管理比较严格,不过,管理本来也应该严格些。”
与导师的口头协议到期之后,我与合作方的老板谈妥了,成为新老板在北京
新开的公司的技术部经理,待遇比较优厚。后来,我们搬了家,我通知了刘我们
的新电话号码。而后,我们再没有联系过。
* * * * * * * * * *
尾声
今年一月的某一天。新老板非常聪明,但并不是这个专业的专家。他的设想
虽然不严谨,但前两天我刚刚证明了他的想法不同于以往的任何一个系统,或许
这真的是一条很好的出路。
一个多月来,老板的设想一直在我的脑子里,我知道它有明显的破绽,但我
希望能找到一种方法,使得破绽不那么明显,尤其是现在,加上点理论说明,大
概就对付过去了。蓦然,脑海里灵光一闪——我找到了!这次不是对付,而是解
决。我终于沿着老板的思路,把一个真正的模型建立起来了!靠着这个成果,今
后我也许将前途似锦。
那天,我又回想起我的种种游戏设想。如果我做游戏,会这么投入吗?我的
多层策略模型、即时战略引擎下的战棋,还有我的《江湖行》,这么多幻想,会
是个什么命运呢?我做出来的游戏会是好游戏吗?或者只是充满了Bug的怪物?但
我知道,从这天起,我的游戏梦彻底结束了。
php爱好者站 http://www.phpfans.net php动态|php基础|php进阶|php模板.
当我从考场步出来的时候,似乎什么都没有想,又似乎什么都在脑子里,除
了GRE的成绩。几个月来炼狱般的生活,导师、工作、考试的巨大压力,似乎瞬间
消散,又确确实实留下了一些东西在身体里,使得我可以昂起头,面对周围的一
切。有人说不考GRE,人生就会有缺憾,
可能真的有道理吧。
快要步出清华大门的时候,我的思路逐渐清晰了起来。出国,至少两年以后
吧。我有着业余高手级的文学,诗词,历史功底,专业的计算机编程水平,半专
业的人工智能知识和数学功底,爱玩,爱幻想,喜欢投入,总在构思着故事和游
戏,有时我甚至觉得自己是个天生的游戏工作者。我要留出毕业后的一年半时间,
痛痛快快地去试试自己的梦想,不管结局如何。不然,也许我的一生将会有个永
久的遗憾。
回到实验室,我拨了钟的电话,他是前导公司的游戏策划。
“嘟。嘟。。。”,占线,钟大概又在玩MUD了。没办法,晚上去他家找吧。
见到钟已经是一周多以后,他总在公司熬夜,我找了他三次,并且留下了字
条,才终于在周六逮住了他。我说我对游戏设计有一些想法,并和他稍微聊了聊。
钟对我讲的方面做的不多,他说会找赤壁的主程序员刘和我讨论一下。同时也提
醒我,游戏设计是很麻烦的。
“为了一个箭楼的火力强度设置,我们就花了很大精力” ,钟说。
“哦”,我心里想,用上运筹学知识,这个问题不应该那么困难。
我问了前导的地址,这一次,我没有对钟说我想加盟前导。
前导总部坐落在一个旧楼的第四层,我费了很大劲才找到。钟帮我找来了刘,
刘向我介绍赤壁编写的一些情况。
“那么,士兵们寻路的算法是什么呢?”我问。
“我们自己设计的算法,效果还不错。”
“有一种集成电路布线的算法,好象可以用在这里。”
“我把谢找来吧,他是新来的,现在在做这方面的工作。”
谢是广西一所大学计算机系毕业的,木讷寡言,他说现在他使用的是A*算法,
是世界上最先进的算法,保证可以找到最短路径。
“A*算法?”
“就是在每一点估计到终点的距离,沿着最小——”
“我明白了”,我怎么给忘了,是A*算法,也叫最佳搜索算法。我不由对谢
另眼相看,看来前导确实招到了高手。
“现在寻径算法效率如何?”
“设定栈为200的话,同时跑400个兵没问题,即使考虑到其他程序耗费的时
间,同时跑一二百个士兵也可以。要把栈设成400就不行了。”谢说。果不出我所
料,我决定把自己的想法和盘托出。
“我觉得世界上的游戏,包括C&C,魔兽等等,在部队人工智能算法上都设计
的不好,部队单位一多,速度就上不去,并且存在堵死的可能。但是,在解决这
个问题上,前导的《赤壁》有着得天独厚的条件。那就是将领的设置,但是将领
的作用在赤壁中发挥的还不够充分。”“从人工智能引擎来说,可以有两个主要
改进方向,如果这两个方向实现了的话,前导的即时战略人工智能引擎将是世界
最先进的,远远超过国外游戏的水平。”“一个是给士兵、将领、统帅以不同的
智能模型,士兵围绕着将领,只需要听从将领命令,并判断附近十几乘十几区域
内的情况就可以了,这样,计算士兵行为的复杂度是几十倍的降低,将领则判断
整支部队的行进路线,可以采用A*算法对整个棋盘进行判断,将领要始终注意维
持队形,避免士兵掉队。士兵只要不掉队,就不会不知所措。这样,一支混编的
部队行军速度将由最慢的作战单位决定,这也符合常理。统帅实际上只需要计算
敌方统帅的策略,不必担心速度,因此可以编的更复杂,统帅指挥将军,不直接
指挥士兵,这样统帅也可以完成更复杂的任务。”“出现意外的,本单位无法解
决的情况则向上级汇报,士兵向将军报告,将军向统帅报告,形成一个类似消息
处理机制这样的结构,上级再决定如何统筹解决,如哪支部队让路,遭遇敌人怎
么办等等,这样,可以避免出现堵死的情况和边挨打,边傻追一个敌人的情况。”
“第二个是把判断改为计算,将领的各项属性通过一些方程式算出他的策略,
不同的将领应有各自的优缺点,都有最适合的场合,最擅长的战斗。如张飞勇猛
而欠谨慎,因此遇敌也喜欢猛打猛冲,所以善攻不善守,赵云比较谨慎,防守就
比较擅长,冲锋陷阵就不如张飞的威力。如果找到根据将领的各项属性来计算策
略的方法,各个将领的性格因素能在游戏中表现出来,那么这个游戏就具有了很
强的RPG性质。”
“主帅也分无能型,谨慎型,勇猛型等等,但主帅的性格变化可以更多,我
们甚至可以设计一些战术,比如偷袭,烧粮,骚扰等等,供主帅选用。在指挥将
领方面,只有聪明的主帅才可以知人善任。对抗相同数量的部队,和郭汜对阵与
同曹操对阵难度就大不一样。这样,才是真正的即时战略游戏而不是即时战术游
戏。”
“另外,战斗中最好有一些随机性,使得人们只能预知大概趋势,而不能预
知精确结果。我认为这应是几乎所有游戏应遵循的原则。”
我在讲这些的时候一定是神彩飞扬,以至于刘微笑着,用那种眼神看着我,
带点鼓励,也带点同情,象是在说:“我们以前也曾这样充满幻想,但当发现幻
想离现实很远时,会痛苦的。”
半个月后,我又去了趟前导。
“谢走了”,刘说,带着点苦涩的笑。“几个哥们找他开网络公司”。
真是出乎意料,但也在情理之中。
“编游戏比一般编程工作要辛苦的多,挣的钱却少”刘继续说,“如果没有
编游戏的热情,我们的工作根本做不下去。”
我们聊了《赤壁》系列的下一部——荆州。荆州虽然还是即时战略,但与赤
壁的区别很大,胜负将不仅取决于一两场局部战斗的结果,兵种也将变得更多,
更复杂。
当时前导正在全力赶制《水浒》,《西游记之齐天大圣》也在制作中,刘估
计正式开始制作《荆州》将是第二年夏天了。我们商定我抽空写写士兵策略和将
领策略,看看简化士兵策略算法和给将领策略加入性格因素是否可行,如果可行,
《荆州》将是第一个实验品。这时,前导快要搬家了。
当我再次去前导时,已经是新的一年,前导也已搬到了新家——一栋看起来
颇为整洁干净的小楼房。 看来前导的经营状况良好。
这次我交给了刘一个游戏剧本:烽火英雄传,是根据资治通鉴中契丹灭后晋
一段历史改编的。我不想写那种拯救世界的英雄,更偏爱于惊心动魄的历史事件
中见证人的角色。如同剧本中的主人公,挽回了一场大战役的结果,却挽不回后
晋的覆亡。同时,我也不想人为制造什么美满的结局,历史的结尾就够了:契丹
退回北方,随即内乱,趁人之危建立的后汉王朝风雨飘摇,汉奸们一个个走向自
己的结局,郭威、柴荣崛起,赵匡胤登上舞台,大乱即将结束,主人公也到了归
隐的时候。
“看来只是一个普通的RPG剧本。”
“我想实现的是动态战棋。象Diablo又不完全是Diablo。具体的战斗形式可
以有简单的战斗,暗杀,刺杀,追杀,逃跑,突围,以及大军混战中的斩将夺旗,
关键还是在于不同的战斗设计,实现它们需要比较高超的数学模型知识。”
“ 我在想一种战斗形式,表现大场面下个人的行为,
象两军阵前斩将夺棋,通过士气的变化来体现胜败的走向等等,而不是以简
单的屠杀为满足。我希望能有一个用即时战略的引擎做的战棋游戏。”
“我想毕业后到前导工作”,我说。
刘楞了一下,然后露出了一个比较灿烂的笑容。
“做游戏很辛苦的,待遇也不好,并且要有挨骂的心理准备。”
“我来前导,不是为了玩游戏,我给自己一年半的时间,在这段时间里,我
想尽情发挥自己。”我说。
“非常欢迎。不过,你最好和边总谈一下,选择工作很重要的是选择老板。”
我们接着聊做游戏,又谈了挺久,刘答应和边总约个时间和我见面。
第二天,刘打电话通知我,周六上午见边总。
周六我九点就到了前导,一个工作人员接待了我。我说明来意后,他问了一
句“听说你对赤壁有一些改进意见?”,看来消息已经传出去了。我们聊了一会
儿,我又等了一小段时间,十点左右,边总请我过去。
边总看上去四十多岁,没什么老板架子,他自称也是研究所里出来的。我们
的话题很快就转到了游戏工作上。我直截了当地对前导的新策划《红楼梦》提出
了担忧。“我很喜爱《红楼梦》,读过很多遍,我觉得现在所有的游戏形式都不
适合表现红楼梦,因此很担心编出来的游戏体现不出原著的魅力。”
“为了红楼梦,我前期已经投入了十万元,让几个人去研究怎么做。”边总
侃侃而谈。“最后的报告没有达到我的要求,但也有不少成果,策划的女孩说游
戏怎么编,怎么玩已经在她脑子里有了概念。”“红楼梦具体将做成一个事件迷
宫的方式。。。”“我们曾经就这些设想请教过红学家们,那些老人听说要把红
楼梦编成游戏,都特别激动,说要全力支持。。。”
“另外,我们要采取公开征集剧情的方式,让玩家参予编写。。。”“红楼
梦做出来也许不够成功,也许会赔钱,但关键在于能够体现我们的能力,做出来
之后,
别人看你就不一样了。。。”“《红楼梦》之后,我还考虑编一个现代生活
的游戏,用类似的结构。。。”
我逐渐明白了边总的苦心,
如果《红楼梦》成功,足以改变人们对于游戏的看法,游戏将不再被认为仅
仅是消磨时间,也可以帮助大家了解文学,更进一步,则可以成为现实的另一种
表示方式。仅从红学家们支持游戏这点来说,就足够给游戏正名了。当然,这个
游戏一定要编好,不在于多么好玩,而在于体现它的表示形式是否可行,是否有
发展和是否有文学和艺术价值。
“完成这样的游戏,情感模型和社会模型非常重要,现在没有一个游戏能用
算法来模拟出哪怕有点逼真的情感。”我说。“情感应该是只能大约把握,却捉
摸不透的,绝不是简单地说你投入了多少就回报多少。”
“但我倒有个想法,用非线性迭代方程来做情感模型。非线性迭代方程产生
的混沌结果就是无法估计的,可以用它当作人物的反应,而某些参数则是真正的
情感参数,与人物的行为并没有直接的、线性的关系,就象你和别人闹矛盾并不
说明别人不喜欢你了,也许是太喜欢你才对一些事情很敏感的。”“所有情感模
型对应的方程应该都有一个‘过犹不及'的效果,再加上点随机性,并且要比较
符合常理,这样你大概可以推测情感的发展趋势,又无法预测下一步会发生什么。”
“社会模型比情感模型更复杂,但是如果情感模型成功,可能很多技术可以应用
到社会模型当中去。”“总体的感觉是,《红楼梦》不好做,但做成了的话,绝
对是一个突破。”
我们继续谈游戏,从前导的谈到其他国内的,又谈到国外的。边总给赤壁打
了60分。谈到编写游戏工作时,边总的观点是:最重要的是编程的人有兴趣,老
板则应该少管,给工作人员以尽量发挥的空间。他举了当时颇为成功的一个游戏
《大唐诗话》,说当时公司根本就不重视这个游戏,让制作组随便编编,结果却
大获成功。边总说刘的工作组目前工作比较良好,他希望保持这个工作组的稳定。
因此我提出加盟《红楼梦》制作组。
“我们还是希望主程序员比较有经验。”“我来前导,也不可能一开始就当
主程序员,我想做情感模型。”“不过我要预先提醒你,理论研究和实际工作不
一样。”“我会注意的,不过我自信,如果我做不出来,国内几乎没有人能做出
来!”
这次见面使我下决心,毕业后不管各种国家优惠待遇,也不要拿到北京户口
的机会,以普通程序员的身份来前导工作。其实我对边总的现代生活游戏前景并
不看好,但我却很感兴趣于把情感模型和社会模型用于武侠RPG游戏。这样的游戏
简直可以成为RPG的终结者。为这样的游戏,后来我设想了很多,我把我所设想的
游戏叫做——江湖行。
《江湖行》的关键在于江湖模型,江湖模型中又有门派模型,个人策略模型
等等。我想充分运用统计学、随机分布理论、非线性迭代、混沌和复杂、甚至分
形来设计这些模型。在我想象中的《江湖行》中,江湖的主要势力是各个门派,
门派之间也有普通、结盟、仇敌等等关系以及自己的势力范围。在势力范围以外
的地区,并非没有此门派的人走动,而是相对较少。另外,势力范围也在不断地
变化之中,每一次变化往往都意味着一场血雨腥风的较量。江湖中的一般小人物
随机出现即可,只有门派掌门、门派中的重要人物、与主人公关系特别密切的人
才有自己的属性。小人物的随机出现是根据出现地点的势力范围、门派的势力状
况、当时门派的行动策略以及小人物自身的属性而决定出现概率的。江湖中的人
物依武功和所参加的战斗决定其名望参数。一般名望高的人不屑于与名望低的人
较量,除了少数杀人狂魔外。但是,如果一个低名望的人杀某一帮派的人太多,
就不免要招来强敌,但另一方面,一个人为某一门派立的功太大的话,也会受到
特殊的保护的。那些有自己属性的人,不管属于哪个门派或者是无门无派,都不
意味着他们的身份已经固定,他们可以升职或被降职,可以叛变,有时也会送命。
因为每个人的资质不同,武功的进步上也带有一定的随机性。同时,江湖上也会
按照统计学的规律,随机诞生一些新星,以取代消亡者,有些则是通过消灭对手
来完成取代。因此,即使门派内部,也将会尔虞我诈。从数据结构上来说,每个
门派是一个树,树的顶点是掌门,然后再一级级地向下发展。树的节点也分明节
点和暗节点两种,暗节点就是卧底,内奸或密使。不但一个树的明节点可能和其
他树的暗节点重复,不同树的暗节点也可能重复(双重间谍),还有一棵树自己
的明节点和暗节点重复的情况(装成小人物的帮中高手)。人物正常情况下按照
明节点身份行动,只有外界条件触发才导致人物行为改变。另外,还有一些流浪
高手,归隐高手等等。战斗上是分胜败易,杀人难,决定铲除一名高手是江湖中
的大事,武功高出越多,杀死敌人的概率越大,但如果武功相差不是非常多,要
杀掉一个高手将非常辛苦,还要当心高手的伙伴帮忙。我希望最终达成的模型是
即使我们任其自然发展,它还总是江湖的样子。
而游戏中的主角的行为,有一个基本的原则:你可以做你想做的任何事,但
必须要为其付出代价。你可以杀手无缚鸡之力的人,但必须准备面对捕快的追杀,
你可以杀掉追杀你的捕快,但必须准备与名捕较量。你可以杀掉某个掌门的幼子,
但一旦被发现,就试试看能不能逃过整个门派的追杀吧。另外,你自己的感情也
会限制你的行为,如果你选择喜欢上了一个女孩,又选择杀了她,结果多半是自
己发疯。
主角的资质是随机设定的,但当然有一些有利因素:主角撞上奇遇的概率比
较大。因此,即使是资质平平的主角,也可能成为绝顶高手的。在游戏里还可以
设定故事情节,故事情节的发展是触发式的,并且大体按照江湖的规则。游戏中
可能有很多短故事和一些长故事,最高理想是用故事编辑器来编故事。游戏开始
时,主角可以是个平民,也可以是个帮派小人物,要是开始就是一派掌门,也没
什么不可以,只是这游戏就有点象三国了。主角在江湖中游荡,可以加入某个门
派,也可以哪个门派都不加入,找游侠,隐侠学武功,还可以从一个门派改投另
一个门派。练功方式有点类似MUD,可以自己练,也可以找人比试,当然,找上大
魔头算你自己倒霉。你挑战的结果会影响你的名声。名声大了,麻烦也就来了,
有人找你比试,有门派邀你加盟,总之是左右为难。但正如前面所说
,杀人是一件大事,所以小命的危险还不大。另一种危险是宝贝,匹夫无罪,
怀璧其罪。不小心找到一本秘笈之类的,武功当然可以突飞猛进,但万一被人从
武功上看出来历,招来一群争夺者,那麻烦可就大了。因此,未练成武功之前,
一定要慎重。游戏的结局可以借鉴《大航海时代II》,以触发故事的结局作为结局,
同时你还可以选择继续玩下去。对于触发故事,我也有不少设想,假设你加入了
一个门派,成为本门的重要人物,和另一个门派是死敌,不慎触发了故事,于是,
你爱上了敌对门派中的一个女孩,然后,看着办吧,如果你们选择私奔,两个门
派会一起追杀你们。
我向往的是一个变化无穷的江湖,在这个江湖之中又有自己的规律和能够体
现出人们情感的故事。
这天,钟请我晚饭,我费了很大劲才让钟明白《江湖行》的设想。“其实,
就是一个单人MUD。”钟下结论道。
“可以这样说。”
“如果做出来,真的是游戏的巨大突破。”
“我也知道很困难,但并非不可实现”我说。“我先做红楼梦的情感模型和
社会模型,如果成功,再移植到江湖人物和门派上,然后,再向整个江湖模型进
军。”
“这些东西好象难度非常大,但即使数学家做不出来,也并不一定就真的做
不出来。做这些模型最重要的是数学模型能力,和理论研究是两回事。也许没人
做出来只是因为没有高手去做。”我笑笑。“其实,老外的数学水平很差的。”
“另外,我觉得,即使能产生一些副产品,意义也很重大。”“我曾经有一个有
点关系的设想,就是在RPG游戏中加入镖局的设计。”钟说。“主角可以到镖局挣
银子,镖局接镖,走镖,强盗劫镖等等都是随机出现的。”我们商定,由钟提出
具体的要求,我考虑如何实现,并给出算法模型。刚加入前导肯定只能做一个普
通程序员,但我希望改变整个前导。我想通过钟和刘把我的很多想法实现。〈江
湖行〉的设想太遥远,我打算以〈红楼梦〉为第一步,〈烽火英雄传〉或者我的
另一个设想〈天外传说〉或者公司提出的其他游戏,关键是试着把即时战略引擎
用于RPG的设想作为第二步,如果一切顺利,我也就不打算出国,而是全力向〈江
湖行〉挑战!
聊天过程不免会涉及游戏界的现状。“前导公司情况还好吧”“象这样的小
公司,会不会突然倒闭都是说不准的。说不定哪次资金周转不灵,一下就完了。”
我笑笑,没太把这句话放在心上。
回去的路上,没来由地想起苏芮的一句歌词——是我们改变了世界,还是世
界改变了我和你。
那段时间,我拼命地买书,从《可计算性和复杂度理论》到非线性科学丛书
中的三本,从小波理论到分形图象学,还有好几本〈第一推动丛书〉用来开阔眼
界。至于运筹学、概率论、计算方法、神经网络、、数学模型、计算机图形学等
等教材,不管学过没学过,见一本买一本。我的时间除了写毕业论文外,也大都
用在了学习这些知识上。我学习的目标是知道什么时候需要用什么知识,以便将
来查阅,因此大部分书是走马观花。但读非线性科学丛书则很辛苦,因为我必须
掌握非线性迭代的一些规律。同时,我也开始编写几个小实用程序。
“送你一个小礼物。”我拿出一张光盘(我们实验室有刻盘机),“一个随
机数生成库。”“C语言里不是有随机数生成程序吗?”刘说。“C里面的速度有
限,随机性也不好。我这个是批量产生随机数的一个类,核心代码用汇编编写,
瞬间就能产生几千个随机数,并且随机性绝对好。另外,它还可以直接产生高斯
分布的随机数——”“等等,什么叫高斯分布?”“高斯分布是自然界最常见的
概率分布,很多其他分布在数量很大的时候也可以用高斯分布近似。用高斯分布
随机数模拟随机事件效果绝对好。另外,分形里也要大量用到高斯随机数。”我
执行了另一个程序,屏幕上显示出一个线条画成的山。“这就是用这个随机数发
生程序画成的分形山。”我双击鼠标左键,屏幕上的山改变了形状。“我们可以
考虑用分形算法自动生成背景。”我拿出一本书,翻开彩页,交给刘。“这里的
风景都是计算机画出来的,只要在分形算法基础上把遮掩、光、影效果加上就可
以。”彩页中有很多图象,不仅有山,有水,还有似乎是洪荒时期的植物,升起
的月球上环形山清晰可辨,云、烟更是惟妙惟肖——因为云、烟本就是遵循分形
规律的典型。刘向我讲述了〈荆州〉所希望产生的随机地形图,我略微考虑了一
下,断定分形算法可以完成它,于是我们决定用分形来做地图。
当时刘被调去给〈西游记〉组做3d打斗动画,我几次去都看见他在忙着编Di
rectX程序。〈西游记〉游戏的结尾是孙悟空与巨灵神之间的3d动画单挑。画面上
孙悟空和巨灵神的动作都挺花哨的。“是实时战斗吗?”“不是,是回合制的。
实时的太困难。”“哦。”我心里有一个声音同时问:“有多困难?”几天后,
我又来到了前导。“3d实时战斗好象并不困难。”我说。“既然单人动作已经可
以实现,那么困难就在击中判断上。就是什么时候兵器相交,什么时候某方被击
中。我们需要编写一个判断的程序。”“DirectX有这样的功能。”“但是需要判
断的项目太多,是不是?这样不是办法。但是,我们不需要象DirectX那样精细,
只需要让人感到有比较逼真的打斗效果就可以了。”“我们可以把人和兵器分解
成球体和圆柱体的组合。象一个人头是个球体,双臂、双腿总共是八个圆柱体,
身体如果说一个圆柱体不逼真,可以用三个并排的,相互重叠的圆柱体表示,手
、脚也当作球体。孙悟空的金箍棒是一个细长的圆柱体,巨灵神的双锤都是圆柱
体加球体。当然,不是真的这么画他们,只是用于击中检测。这样,一方可以用
不到二十个圆柱体和球体表示”“在计算机中,建立一个空间坐标系,坐标系中
物体数据结构是点或者线段和一个距离参数。对于球体,它的球心为点参数,球
半径为距离参数,对于圆柱体的记录,圆柱轴线段为线段参数,截面半径为距离
参数。也就是说,圆柱实际上是用和这条线段距离小于截面半径的所有点表示,
这样有一些误差,但是没什么大关系。”“这样,击中检测就变的很简单了,比
如计算孙悟空是否击中巨灵神的头,只要计算表示金箍棒的线段和表示巨灵神头
的球心之间距离是否小于金箍棒的距离参数和巨灵神头的距离参数之和就可以了。
一次判断只需要计算几十个线段和点之间的距离,整个计算时间绝对能控制在毫
秒量级以下。”“也许,〈西游记〉之〈大闹天宫〉可以用这种方法。”刘说。
我再次来到前导。“做的怎么样了?”“差不多结束了,”刘说,“玩玩看
看?”游戏中,孙悟空有体力、内力和生命值三种属性,体力有三大格,在不断
地回复中,一般攻击或者防御消耗一格体力,狠招消耗两格体力,必杀技消耗三
格体力。体力不够,不能出手。纯防御把伤害减到四分之一,但体力停止回复,
防守反击把体力回复速度降到三分之一,伤害减半。魔法有恢复和杀伤两种。光
、影和很多动作做的相当漂亮。我试了试各种攻击魔法,代价是孙悟空牺牲了好
几次。“好象攻击力最强的魔法不是画面最漂亮的。”“美工做的时候,策划没
有说哪些魔法攻击力强,哪些弱。”我拿到了一个招式威力表,看了一下。“这
样不行,”我说,“招式的威力都是固定的,那么,必然存在一个最佳策略,玩
家只要按照最佳策略进行,就必然得到最佳结果。比如现在,孙捂空的最佳策略
是:必杀技,血快满了就回复。其他的设计全都成了陪衬了。”刘去找了西游记
的策划,策划想了一下,决定让必杀技消耗魔法。刘把这个方案转告了我。“这
样还是不行!”我几乎喊了出来。“线性的规则永远得不到非线性的结果,这样
的改动最佳策略仍然存在,招式必须得和生命、状态值关联上才会有变化的效果!”
“数据结构已经定死了,”刘说。“要把它们关联上,整个数据结构都得改变,
至少得一个月。”我有点沮丧。“那么就是设计上的问题了,策划应该知道——
等等,我有办法了!”我转向刘,“程序可以判断受攻击者是在一般状态,防守
反击状态还是防御状态,是不是?”“是的。”“我们可以让防御只对攻击有效,
而对魔法无效,这样,如果是一般状态,魔法攻击是吃亏的,但如果敌人在防御
中,那么魔法攻击的效果就是最佳的。另外,每一次攻击对敌人造成的伤害可以
用高斯随机数表示,如果形势不妙,使用必杀技还有败中求胜的可能,否则求稳
胜的希望更大。不同的情况下就应该适合使用不同的招式,不能造一些花哨但没
用的招式。”“整体生命值设置要设成失败的概率比较大,但存在百分之二三十
的战胜概率,这样玩家才会觉得有意思。具体设置成多少可以计算出来,我可以
帮你们算。”刘微笑着说了一句什么,当时我太兴奋,也只顾考虑问题了,没有
听清,好象是“你还真有办法”之类,虽然语气是善意的,但却像是带点讪笑。
当我再次来到前导时,我的第一个问题是:“现在3D战斗怎么样?”“还是
老样子,”刘说,“和你上次玩的一样,一点改动都没有。”“为什么?这样所
有的魔法攻击都没用,美工的工作都成了浪费!”“他们自己都不急,我们急有
什么用。”刘平平淡淡地说,似乎早已习惯了这种情况。那一瞬间,我的心好冷。
马上就要毕业了。我把户口落回原籍,准备以打工的身份留在北京,但有一
些手续还得回合肥办一下。回合肥之前,我去了趟前导。
“有个很不好的消息,”刘说。“前导融资失败了。”“会怎么样呢?”
“不知道,最好的情况是裁去一些制作组,最糟的情况是不再做游戏了。”
如果是裁去一些部门的话,我相信最后裁去的是刘的工作室。“我去合肥十天左
右,回来之后再和你联系。”第二天,我踏上了去合肥的火车。
前导,唉,前导。也许他们铺的摊子太大了,也许他们太好高鹜远了,也许。。。
但如果他们真能融资成功,是不是一切都不同了呢?只能祝愿结果会好一点,也
许只有经过涅磐,凤凰才真正成其为凤凰吧。
回到北京的第二天,我就去前导看看结果。原先坐满了工作人员的大厅现在
冷冷清清,地上到处是废纸,这一切都预示着,最糟的结果发生了。刘还在,在
一个单独的机房里。“将来有什么打算。”
“等。”刘说。“我们这一组心还很齐,大家都想继续做游戏。但是,家里
压力也很大,他们本来就不希望我做游戏。”“你们组有多少人?”“三个程序
员,两个美工,一个策划。现在我们希望加盟别的游戏公司。”“哪个公司,联
系好了吗?”“尚洋吧。”“尚洋?!”我立刻回想起被骂的体无完肤的《血狮》。
“自从《血狮》失败以后,尚洋公司也是痛下决心改变形象。”刘说。仍然带着
他那惯有的笑容。“并且,其他公司一下子也吃不进那么多人。只是,以后工作
条件就艰苦了。”“本来我们还有3D即时战略的设计的。”
刘给我演示着画面:起伏的山峦上,零零星星地分布着持戟的士兵。“这些
可能要等到很久以后了。”我感觉自己的游戏梦正在远去。我想留住它,我想不
管收入,不管将来,对刘说:“我愿意成为你们组的第七个成员。”但话到嘴边,
变成了:“希望以后和你继续联系。”
我终于毕业了。毕业的我,却不知道该去哪里。导师和外边有一个合作项目,
派了四个学生,他建议我领着学生们工作,先干三个月,每月发我两千。工作刚
开始的时候,我从对windows95系统都不熟悉,对VxD一无所知。
在一个月多一点的时间里,我除了帮那些学生调程序外,完成了一个200K的
截取windows95文件操作的vxd,其中包括硬件等级的磁盘读写,直接获取物理内存
然后自己进行分配管理的类,对FAT16的读取以及在硬盘中直接读取长文件名,一
个读取磁盘的自定义Cache结构,Hash函数搜索的文件读取簇表等等。合作方的老
板想雇佣我,我说要等我与老师的口头协议到期以后。这时,刘的制作组已经加
盟尚洋了。我和他通过几次电话。
“现在怎么样了。”
“很忙,忙着做《烈火文明》。”“我挺希望了解你们现在的情况。”“恐
怕现在比较困难了,尚洋管理比较严格,不过,管理本来也应该严格些。”
与导师的口头协议到期之后,我与合作方的老板谈妥了,成为新老板在北京
新开的公司的技术部经理,待遇比较优厚。后来,我们搬了家,我通知了刘我们
的新电话号码。而后,我们再没有联系过。
* * * * * * * * * *
尾声
今年一月的某一天。新老板非常聪明,但并不是这个专业的专家。他的设想
虽然不严谨,但前两天我刚刚证明了他的想法不同于以往的任何一个系统,或许
这真的是一条很好的出路。
一个多月来,老板的设想一直在我的脑子里,我知道它有明显的破绽,但我
希望能找到一种方法,使得破绽不那么明显,尤其是现在,加上点理论说明,大
概就对付过去了。蓦然,脑海里灵光一闪——我找到了!这次不是对付,而是解
决。我终于沿着老板的思路,把一个真正的模型建立起来了!靠着这个成果,今
后我也许将前途似锦。
那天,我又回想起我的种种游戏设想。如果我做游戏,会这么投入吗?我的
多层策略模型、即时战略引擎下的战棋,还有我的《江湖行》,这么多幻想,会
是个什么命运呢?我做出来的游戏会是好游戏吗?或者只是充满了Bug的怪物?但
我知道,从这天起,我的游戏梦彻底结束了。
php爱好者站 http://www.phpfans.net php动态|php基础|php进阶|php模板.
相关阅读 更多 +