luolody 发表于 2004-5-25 21:16:26

[原创]关于自建公式计算

在自建战斗系统中,最重要的就是公式的计算问题.大体可以涉及到一下几个问题

1.命中率计算

2.伤害值计算

3.成功率计算

4.特殊计算

1.命中率计算:在命中率计算中可能需要考虑的是攻击发起者和接受者的属性差异来作为命中率的计算依据.在一般的设定中,等级,敏捷,所持装备,都是重要的判断命中率的判断数据.如何制作一个理论上合理的公式呢?

首先来确定命中率的范围是0%~100%,当为0时不需要做任何判断,因为发起者应该处于攻击不可的状态.同样在为100时也不用做任何判断,因为必中.在中间范围的才需要做出判断.首先来考虑使用敏捷值来判断的方法.A为发起者的敏捷,B为接受者的敏捷.当A大于B时,肯定命中率要比A小于B时大.这样可以考虑使用差值或者比例来完成AB的对比关系.我们不希望命中率因为敏捷一个属性值的不同就在1~99上无限制的界定范围.所以可以引进装备的命中率来作为基准命中率.在基准命中率的基础上再作出对敏捷属性的命中率偏移.A大于等于B,和A小于B是两个不同的启动计算的范围.因为不论是差值比较还是比例比较都会出现两种不同类型的数值.

一般理论上我们希望得到一个比例涨幅来作为命中率的系数,这样可以方便的将敏捷属性带入命中率的计算,这样就要求AB在比较后应该负给命中率公式一个简单的系数即可.所以考虑使用比例,也就是使用A/B和B/A.这里写出下面的一个计算公式推导.原谅我使用了英文,因为在编译注释的过程中已经养成了英文注解的习惯.

hitp=hit probabilty;whp=weapon hit probabilty;Aagi=A's agility;Bagi=B's agility

Aagi>=Bagi

hitp=whp+((100-whp)(10000(Aagi-Bagi)/Aagi))/10000(这里分AB大小两种情况计算是因为考虑可以在引入比例系数时,始终引入一个介于0~1之间的小数,有函数基础的应该可以意识到,在0~1之间和在1~正无穷之间的比例是完全相同的,但是将数值控制在了最小范围内)

Aagi<Bagi

hitp=(whp(5000+1000Aagi/2Bagi))/10000(之所有在这里使用了一个系数2,是因为考虑到一种极限情况,当B两倍于A时,B就应该凌驾于A之上处于对A的无敌状况了,毕竟差别太大了.以次作为命中率的最低极限情况考虑,同理在A两倍于B时,A也处于相对无敌,作为命中率最高极限情况考虑)

2.伤害值计算:伤害值的算法相对简单

Aoff=A's offence;Bdef=B's defence;RAMDOM=80~120(注意这里的ramdom取数应该是不固定的)

damage=(RAMDOM((Aoff/2)-(Bdef/4)))100(这里参考了rm内战公式的取数,完全可以依照自制游戏的数据来制作其他系数的公式.)

3.成功率计算:在使用技能时,会出现一些厉害的技能,希望成功率偏低来控制游戏的平衡性.有些需要成功率偏高.

skioff=skill offence;Bdef=B's defence;magdam=magic damage;magdet=magic detract(有时候需要考虑技能的随机厉害性,所以引入magdet这个变量)

RAMDOM=(100-magdet)~(100+magdet)(这里就是对技能随机厉害性的处理)

magdam=(RAMDOM((skioff)-(Bdef/4)))100(伤害值的算法依旧是很简单的)

manap=mana probabilty;skip=skill probabilty;Amin=A's mind

black manap=skip+(20(10000Amin/999))/10000;skip<=80(攻击型魔法需要高的成功率,但是又不希望是每击必中,可以引入对精神的判断,直接和最大精神值做比较即可.技能的基准成功率因该不太高,但是加入系数后可以有很好的改善,所以我设置的是80%)

gray manap=skip+(20(10000Amin/999))/10000;skip<=40(辅助型魔法需要不高的成功率来制造更大的不可预见性,所以基准成功率设置不高,设置为40%,随精神值升高可以改善到60%,还是不算太高,但是可以在升级过程中明显感觉到改善)

white manap=100(治疗型魔法需要的是100%的成功率来作为继续游戏的保障)

4特殊计算:包括物品使用,特殊状态

物品使用

behp=behavior probabilty;itep=item probabilty;Alev=A's level

hostility behp=itep+(20(10000Alev/99))/10000;itep<=80(可投掷型攻击物品,和攻击型魔法设置一样,只是系数改为和发起者的等级有关)

assistant behp=itep+(20(10000Alev/99))/10000;itep<=40(使用型辅助物品,和辅助型魔法设置一样,只是系数改为和发起者的等级有关)

neighbor itep=100(不需要做任何成功率判断的物品)

状态的判断,可以有,必中,必不中,防御无效,魔防强化等不同的系数可以添加.

这样,在制作自战系统的时候,不至于自作出过于缺乏平衡性的算法公式.

玄天 发表于 2004-5-25 21:17:46

不会

chaochao 发表于 2004-5-25 21:21:22

以后记住如果是原创,一定要写清楚“不可转载”或者“请尊重作者,转载时请说明XXX”。
PS:这个好象是防君子不防小人,不过能对付小人的也只有这招了。

luolody 发表于 2004-5-25 21:26:14

妈妈说这个世界好人多........
还有公式中使用到的数字都没有约分,因为在rm里面都是整数型,没有双精度数据,所以提高位数来保留小数数值

瓜仔 发表于 2004-5-26 13:50:54

弓虽、高、厉害、佩服,你可以开一个高手培训班了。嘻嘻~

ps:你能不能改用中文版的,要不看你的帖子还要先翻译一遍,累啊。

[此贴子已经被作者于2004-5-26 16:21:21编辑过]

luolody 发表于 2004-5-26 19:50:46

其实就是用了中文版我还是有写入英文的习惯,这个习惯实在是很困扰我,因为潜意识里面怕生疏了英文所以无时无刻不在惦记着使用英文...可恶的大学......以前我的剧本和注解都是英文写得......现在看起来都费时了,因为很多单词都忘记了......

512 发表于 2004-7-26 07:45:27

wasa119 发表于 2004-7-26 15:14:54

[原创]关于自建公式计算

这个不错
页: [1]
查看完整版本: [原创]关于自建公式计算