游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4845|回复: 9

[讨论] 初学者有个关于概率计算的问题向大家请教

[复制链接]

29

主题

224

帖子

224

积分

中级会员

Rank: 3Rank: 3

积分
224
QQ
发表于 2007-5-8 22:32:00 | 显示全部楼层 |阅读模式
最近刚接触这些东西,一点经验也没有,还望大家多指教。

本来是想写个小小的模拟程序,模拟两个对象对P(只是简单的你打我一下,我打你一下)。
根据两个对象的伤害范围(例如:100-200)、致命一击率(例如:30%)、躲避率(例如:20%)等,计算两个对象的血量。但计算概率时,实在想不出比较可靠的方法,希望大家能帮我出点主意,多谢!

附上我的计算方法:

开始时参数设置:
           单位A    单位B
伤害下限   100      150
伤害上限   200      180
致命一击率 10%      20%
躲避率     20%      15%
总血量     4000     4000

计算过程:
1: A攻击B  随机选取A的伤害范围内的一个量random(100,200),
            计算A的致命一击率:(这里我的方法比较毛糙,是随机从0到100选一个数,然后计算出将100平均
                                 分成A的分子加一份数的几个数,看这个随机选取的数是不是属于这几个数。
                                 这样导致大于等于50%时,问题出现。可能说的不好理解,举个例子,
                                 比如1%时:将0到100分成(1+1)份的数是50,如果从0到100随机抽取的数
                                 是50,说明命中,否则不达成致命一击。3%时:将0到100分成(3+1)份的
                                 数是25、50、75三个数,如果从0到100随机抽取的数是25或50或75,说明
                                 命中,否则不达成致命一击。)见笑了,我就是想了解这里的计算方法。
            如果达成致命一击,随机选取的A的伤害加倍,否则伤害不变,
            计算B的躲避率:(方法同计算A的致命一击率),
            如果达成躲避,A对B不造成伤害,否则B的总血量减去A对B的伤害量,
            A攻击B完成。
2: B攻击A  步骤同1,略。

154

主题

4567

帖子

4579

积分

论坛元老

Rank: 8Rank: 8

积分
4579
QQ
发表于 2007-5-9 00:02:00 | 显示全部楼层

Re:初学者有个关于概率计算的问题向大家请教

伤害用平均值,致命和躲避都用期望值(也就是你填的那个数)

你那个分法有局限,最小单位是1%,而且2%怎么办呢 100/3是没法整除的,还是按区间算吧,1% = 取值满足 99-100之间,3% = 取值满足 97-100之间。

个人浅薄的建议。

29

主题

224

帖子

224

积分

中级会员

Rank: 3Rank: 3

积分
224
QQ
 楼主| 发表于 2007-5-9 01:54:00 | 显示全部楼层

Re:初学者有个关于概率计算的问题向大家请教

多谢楼上回复。我就是因为觉得随机数取好后,再加上自己定的规则判断,会不会影响最终判断的概率,所以不知道怎么计算概率问题。现在想想,你说的也对,因为本来数字就是随机抽取的,抽取每一个的几率都一样,直接从某一端向另一端增长来判断概率应该也对。就是0-99之间,1%包括0,2%包括0、1,3%包括0、1、2;或1%包括99,2%包括99、98,3%包括99、98、97。我理解的没错吧,呵呵。这样就简单多了。

还有就是概率我是加了2位小数,所以计算时都乘了100,如 20.37% 转换成了 2037/10000

52

主题

979

帖子

1066

积分

金牌会员

Rank: 6Rank: 6

积分
1066
QQ
发表于 2007-5-11 23:46:00 | 显示全部楼层

Re:初学者有个关于概率计算的问题向大家请教

随机数的计算,,不是像楼主那么做的,,,这个你发在程序版,也许更有效

我这里就我自己的仅有的一些信息,简单说一下

程序里做的随机数,全都是数学意义上的假随机,一般是取时间常量进行程序做的随机运算之后,得到一个值,之后与你规定的范围做比较..如果有现成的引擎,程序根本就不用操这个心了.

而作为策划,一般不需要了解这些,你只需要告诉程序,你在什么步骤需要一个什么样的随机数就可以了..

我通常用.R[x,y](m)>n,来表示需要获取的随机值
其中,x,y表示随机范围的上下限,m表示精度,n表示逻辑比较值,即,如果所得随机值大于n,则返回值为逻辑值"真",否则为假,,如果只用R[x,y](m)来表示,则代表,返回值为一个整型量

以上为我个人编造的书写格式,你可以随意修改格式,但是不管怎么样,你都必须要在策划案中做清晰的说明,以使程序员可以读懂你的意思,而这4个变量是不可缺少的,必须要交代清楚

致命和命中方面,一般比较省资源的做法,是将一段范围分为3段,随机数在第一段里,为致命,随机数在第二段里,为命中但不致命,随机数在第三段里,则未命中,逻辑上比较合理,但是公式方面麻烦一点,不过在程序的性能方面会比分步判断好一些

29

主题

224

帖子

224

积分

中级会员

Rank: 3Rank: 3

积分
224
QQ
 楼主| 发表于 2007-5-14 10:43:00 | 显示全部楼层

Re:初学者有个关于概率计算的问题向大家请教

多谢楼上这么详细的解答,听着很复杂啊,一个公式搞定还真有难度.

3

主题

320

帖子

353

积分

中级会员

Rank: 3Rank: 3

积分
353
发表于 2007-5-14 15:27:00 | 显示全部楼层

Re:初学者有个关于概率计算的问题向大家请教

分段式效率是高点,但有个毛病,就是万一出现各种概率相加之和大于1的情况,就不好处理了。比如说,致命率70%,闪躲率70%。

52

主题

979

帖子

1066

积分

金牌会员

Rank: 6Rank: 6

积分
1066
QQ
发表于 2007-5-14 19:31:00 | 显示全部楼层

Re: Re:初学者有个关于概率计算的问题向大家请教

BF: Re:初学者有个关于概率计算的问题向大家请教

分段式效率是高点,但有个毛病,就是万一出现各种概率相加之和大于1的情况,就不好处理了。比如说,致命率70%,闪躲率70%。


没什么不好处理的..我说的分段是,程序的处理方式

但策划案中,甚至可以不必交代程序的处理流程,因为部分的优化工作是程序的事情,策划不必操心,做得也不会比程序好,但是策划必须要交代流程,,即,命中和致命的优先判定顺序,有了这个,其他的就好做了

29

主题

224

帖子

224

积分

中级会员

Rank: 3Rank: 3

积分
224
QQ
 楼主| 发表于 2007-5-24 21:16:00 | 显示全部楼层

Re: 初学者有个关于概率计算的问题向大家请教

我用VB做了个演示,大家看看,呵呵

sf_2007524211544.rar

14.85 KB, 下载次数:

0

主题

32

帖子

32

积分

注册会员

Rank: 2

积分
32
发表于 2007-5-25 14:37:00 | 显示全部楼层

Re:初学者有个关于概率计算的问题向大家请教

要么先判定了造成致命就一定命中(魔兽世界里采用的),要么只有判定命中了才判定是否致命。

lz的设定似乎是造成致命了却未必会命中

这三种判定次序会决定设置的致命率和躲避率在战斗中是否会真正发挥它的几率,比如一个致命率100%的人砍一个回避率100%的人

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2007-6-11 11:01:00 | 显示全部楼层

Re: 初学者有个关于概率计算的问题向大家请教

开始时参数设置:
各种项目   单位A    单位B
伤害下限   100      150
伤害上限   200      180
致命一击   10%      20%
躲避概率   20%      15%
总的血量   4000     4000

简化为:
伤害平均   150      165
致命一击   10%      20%
躲避概率   20%      15%
总的血量   4000     4000

那么,
A对B的平均伤害速度是 150*(100%+10%)*(100%-15%)=140.25
B对A的平均伤害速度是 165*(100%+20%)*(100%-20%)=158.40

结论:
B赢的概率比A的高.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-7-17 02:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表