Algorithm 版 (精华区)
发信人: sino (茶水博士), 信区: Theory
标 题: 我的游戏梦5
发信站: 哈工大紫丁香 (Sun Aug 27 13:32:40 2000), 转信
发信人: yuanyuan (大侠), 信区: Algorithm
发信站: 南京大学小百合站 (Sun Mar 5 11:01:04 2000), 站内信件
那段时间,我拼命地买书,从《可计算性和复杂度理论》到非线性科学丛书中的三本,从
小波理
论到分形图象学,还有好几本〈第一推动丛书〉用来开阔眼界。至于运筹学、概率论、计
算方法、神经网
络、、数学模型、计算机图形学等等教材,不管学过没学过,见一本买一本。我的时间除
了写毕业论文外
,也大都用在了学习这些知识上。我学习的目标是知道什么时候需要用什么知识,以便将
来查阅,因此大
部分书是走马观花。但读非线性科学丛书则很辛苦,因为我必须掌握非线性迭代的一些规
律。
同时,我也开始编写几个小实用程序。
“送你一个小礼物。”我拿出一张光盘(我们实验室有刻盘机),“一个随机数生成库。”
“C语言里不是有随机数生成程序吗?”刘说。
“C里面的速度有限,随机性也不好。我这个是批量产生随机数的一个类,核心代码用汇
编编
写,瞬间就能产生几千个随机数,并且随机性绝对好。另外,它还可以直接产生高斯分布
的随机数——”
“等等,什么叫高斯分布?”
“高斯分布是自然界最常见的概率分布,很多其他分布在数量很大的时候也可以用高斯分
布近
似。用高斯分布随机数模拟随机事件效果绝对好。另外,分形里也要大量用到高斯随机数
。”
我执行了另一个程序,屏幕上显示出一个线条画成的山。
“这就是用这个随机数发生程序画成的分形山。”我双击鼠标左键,屏幕上的山改变了形
状。
“我们可以考虑用分形算法自动生成背景。”
我拿出一本书,翻开彩页,交给刘。“这里的风景都是计算机画出来的,只要在分形算法
基础上
把遮掩、光、影效果加上就可以。”
彩页中有很多图象,不仅有山,有水,还有似乎是洪荒时期的植物,升起的月球上环形山
清晰可
辨,云、烟更是惟妙惟肖——因为云、烟本就是遵循分形规律的典型。
刘向我讲述了〈荆州〉所希望产生的随机地形图,我略微考虑了一下,断定分形算法可以
完成它
,于是我们决定用分形来做地图。
当时刘被调去给〈西游记〉组做3d打斗动画,我几次去都看见他在忙着编DirectX程序。
〈西游记〉游戏的结尾是孙悟空与巨灵神之间的3d动画单挑。画面上孙悟空和巨灵神的动
作都
挺花哨的。
“是实时战斗吗?”
“不是,是回合制的。实时的太困难。”
“哦。”我心里有一个声音同时问:“有多困难?”
几天后,我又来到了前导。
“3d实时战斗好象并不困难。”我说。“既然单人动作已经可以实现,那么困难就在击中
判断
上。就是什么时候兵器相交,什么时候某方被击中。我们需要编写一个判断的程序。”
“DirectX有这样的功能。”
“但是需要判断的项目太多,是不是?这样不是办法。但是,我们不需要象DirectX那样
精细,
只需要让人感到有比较逼真的打斗效果就可以了。”
“我们可以把人和兵器分解成球体和圆柱体的组合。象一个人头是个球体,双臂、双腿总
共是
八个圆柱体,身体如果说一个圆柱体不逼真,可以用三个并排的,相互重叠的圆柱体表示
,手、脚也当
作球体。孙悟空的金箍棒是一个细长的圆柱体,巨灵神的双锤都是圆柱体加球体。当然,
不是真的这么
画他们,只是用于击中检测。这样,一方可以用不到二十个圆柱体和球体表示”
“在计算机中,建立一个空间坐标系,坐标系中物体数据结构是点或者线段和一个距离参
数。
对于球体,它的球心为点参数,球半径为距离参数,对于圆柱体的记录,圆柱轴线段为线
段参数,截面
半径为距离参数。也就是说,圆柱实际上是用和这条线段距离小于截面半径的所有点表示
,这样有一些
误差,但是没什么大关系。”
“这样,击中检测就变的很简单了,比如计算孙悟空是否击中巨灵神的头,只要计算表示
金箍
棒的线段和表示巨灵神头的球心之间距离是否小于金箍棒的距离参数和巨灵神头的距离参
数之和就可以
了。一次判断只需要计算几十个线段和点之间的距离,整个计算时间绝对能控制在毫秒量
级以下。”
“也许,〈西游记〉之〈大闹天宫〉可以用这种方法。”刘说。
我再次来到前导。
“做的怎么样了?”
“差不多结束了,”刘说,“玩玩看看?”
游戏中,孙悟空有体力、内力和生命值三种属性,体力有三大格,在不断地回复中,一般
攻击
或者防御消耗一格体力,狠招消耗两格体力,必杀技消耗三格体力。体力不够,不能出手
。纯防御把伤
害减到四分之一,但体力停止回复,防守反击把体力回复速度降到三分之一,伤害减半。
魔法有恢复和
杀伤两种。光、影和很多动作做的相当漂亮。
我试了试各种攻击魔法,代价是孙悟空牺牲了好几次。
“好象攻击力最强的魔法不是画面最漂亮的。”
“美工做的时候,策划没有说哪些魔法攻击力强,哪些弱。”
我拿到了一个招式威力表,看了一下。
“这样不行,”我说,“招式的威力都是固定的,那么,必然存在一个最佳策略,玩家只
要按
照最佳策略进行,就必然得到最佳结果。比如现在,孙捂空的最佳策略是:必杀技,血快
满了就回复。
其他的设计全都成了陪衬了。”
刘去找了西游记的策划,策划想了一下,决定让必杀技消耗魔法。刘把这个方案转告了我。
“这样还是不行!”我几乎喊了出来。“线性的规则永远得不到非线性的结果,这样的改
动最
佳策略仍然存在,招式必须得和生命、状态值关联上才会有变化的效果!”
“数据结构已经定死了,”刘说。“要把它们关联上,整个数据结构都得改变,至少得一
个月。”
我有点沮丧。“那么就是设计上的问题了,策划应该知道——等等,我有办法了!”我转向
刘,“程序可以判断受攻击者是在一般状态,防守反击状态还是防御状态,是不是?”
“是的。”
“我们可以让防御只对攻击有效,而对魔法无效,这样,如果是一般状态,魔法攻击是吃
亏的,
但如果敌人在防御中,那么魔法攻击的效果就是最佳的。另外,每一次攻击对敌人造成的
伤害可以用高
斯随机数表示,如果形势不妙,使用必杀技还有败中求胜的可能,否则求稳胜的希望更大
。不同的情况
下就应该适合使用不同的招式,不能造一些花哨但没用的招式。”
“整体生命值设置要设成失败的概率比较大,但存在百分之二三十的战胜概率,这样玩家
才会
觉得有意思。具体设置成多少可以计算出来,我可以帮你们算。”
刘微笑着说了一句什么,当时我太兴奋,也只顾考虑问题了,没有听清,好象是“你还真
有办
法”之类,虽然语气是善意的,但却像是带点讪笑。
当我再次来到前导时,我的第一个问题是:“现在3D战斗怎么样?”
“还是老样子,”刘说,“和你上次玩的一样,一点改动都没有。”
“为什么?这样所有的魔法攻击都没用,美工的工作都成了浪费!”
“他们自己都不急,我们急有什么用。”刘平平淡淡地说,似乎早已习惯了这种情况。
那一瞬间,我的心好冷。
--
<><><><><><><><><><><><><><><><><><><><><><><>
<> 我是一只兔子,没有长耳朵,只有三瓣嘴 <>
<><><><><><><><><><><><><><><><><><><><><><><>
※ 修改:.fib 於 Aug 27 13:30:14 修改本文.[FROM: bbs.hit.edu.cn]
--
※ 转寄:.南京大学小百合 bbs.nju.edu.cn.[FROM: bbs.hit.edu.cn]
--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: fib.bbs@bbs.nju.edu.]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.558毫秒