游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2329|回复: 4

关于单次攻击的判定程序组问题,和大家讨论下。

[复制链接]

5

主题

118

帖子

118

积分

注册会员

Rank: 2

积分
118
发表于 2007-7-30 10:14:00 | 显示全部楼层 |阅读模式
最近在设计一款作品,其中关于最基本的攻击/命中判定内容,我有一个想法,但不知道是否符合实际,

在这里请诸位程序高手帮忙看看。

这款作品内容比较复杂,一次攻击之后可能产生多种不同的效果——回避。格挡,普通命中,必杀命中,

击晕,击倒……等等。
为了节约资源,我希望系统仅仅通过一次判定就能得出结论,这光靠一个公式显然是不行的,要靠一组程

序来完成。

对于这个程序组,我有一个大致的构想,其核心内容还是通过随机判定来实现。

大致构想如下:

判定的具体方式为“范围确定法”——将被攻击者的回避值,格挡值,反击值,攻击者的普通命中值,必

杀命中值,以及各种特殊效果的命中值全部相加,以其总和作为随机数上限,然后依次减去各自值数,确

定其有效的随机数范围,最后看系统所给予的随机数在哪一范围之内,就确定其效果。

例如,某人的命中值1000,必杀值20,击晕值50,击倒值100,对方的回避值600,格挡值

200,反击值10。
那么,系统判定时,随机数的选择范围就是:1000+20+50+100+600+200+10=

1980,也就是说,系统将从1~1980的范围中任意选择一个随机数。
当此随机数在1~20的范围内时,判定结果为必杀;
当此随机数在21~70的范围内时,判定结果为击晕;
当此随机数在71~170的范围内时,判定结果为击倒;
当此随机数在171~1170的范围内时,判定结果为普通命中;
当此随机数在1171~1370的范围内时,判定结果为格挡;
当此随机数在1371~1970的范围内时,判定结果为回避;
当此随机数在1971~1980的范围内时,判定结果为反击;
…………

如果画流程图的话,大致是这样:

系统发出一个随机数——————进入程序组判定——————系统得出结论(命中,必杀,回避等等)

采用这种方式的优点是
1。简洁,不需要多次判定,只需要最少的资源。
2。直观,人物的每一点属性增加,都会直接体现在随机数效果上,比方目标命中值哪怕只加了一点,也

会增大命中的概率。

缺点:
1,判定得出一个效果,就不会出现其他的。
2,可能会出现某种想象不到的后果,例如,由于普通命中太高,反而减少了必杀的可能性?
3,不会同时出现几种效果。

请各位高手帮忙看看,这个构想
1,有没有实现可能?
2,是否合理?有哪些不合理的地方。

76

主题

1100

帖子

1107

积分

金牌会员

Rank: 6Rank: 6

积分
1107
发表于 2007-7-30 14:24:00 | 显示全部楼层

Re:关于单次攻击的判定程序组问题,和大家讨论下。

数值上做个rand(),还有就是一些特殊效果最好能配合上技能或道具.靠普通就出现这么多没价值呀。

switch() {}
控制?

76

主题

1100

帖子

1107

积分

金牌会员

Rank: 6Rank: 6

积分
1107
发表于 2007-7-30 14:32:00 | 显示全部楼层

Re:关于单次攻击的判定程序组问题,和大家讨论下。

应该将这个划分一下,如果是回合游戏:——
对于角色而言,角色是个类,他包含以下成员,回避。格挡,普通命中,必杀命中,击晕,击倒...

应该分为攻击类对象成员函数
主动攻击(缩写temp01)
class temp01
{
  temp01(int i);
  int range();
};

被攻击类对象成员函数
被人攻击(缩写:temp02)
{
  temp02(int k);
  int range02();
};

inline temp01::temp01(int i)
{
}

inline int temp01::range01() //负责处理图象表现
{比如调用播放动作或啥}

inline temp02::temp02(int i)
{
}

inline int temp02::range02()   //负责处理图象表现
{同上}

int main()
{
相关判断执行代码

}


代码随意乱写,刚学C++不是很熟悉。这个逻辑挺适合做进回合游戏里。你把数值反过来。必杀放高位数值,反击反低位.

这样才能出现必杀会随着数值增加出现几率变化。不然1-20是固定数值,体现不了,而反击应该和职业技能挂钩,不是每个职业都有反击。这样算法也行.但感觉不够科学,lz在考虑下。

5

主题

118

帖子

118

积分

注册会员

Rank: 2

积分
118
 楼主| 发表于 2007-7-31 09:45:00 | 显示全部楼层

Re:关于单次攻击的判定程序组问题,和大家讨论下。

嗬嗬,果然有高手啊。
我是做策划的,对数学问题很抓瞎,但基本原理还懂点。

正在考虑用三次判定,第一次决定命中,回避,击飞和击倒,或者反击,第二次决定是否出必杀,第三次判定各种特殊效果,但是这样一来是不是会造成判定过程太繁琐而浪费资源?

当然好处就是几种状态可能同时存在,比方说把对方打倒的同时也可能出必杀,感觉更好玩一点。

76

主题

1100

帖子

1107

积分

金牌会员

Rank: 6Rank: 6

积分
1107
发表于 2007-7-31 16:15:00 | 显示全部楼层

Re:关于单次攻击的判定程序组问题,和大家讨论下。

我随便瞎写的,相信实际开发也不是这样的。因为你这个和程序处理流程没什么关系,主要是游戏设计逻辑的玩法逻辑问题。这个你可以到策划区问问;
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 15:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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