如何检测游戏中玩家的攻击性?

时间:2009-04-16 06:33:53

标签: c artificial-intelligence

我正在为gameboy advance编写游戏,我正在以二叉搜索树的形式实现基本的AI。有1个人类玩家和1个电脑玩家。我需要找出一种方法来告诉人类玩家攻击计算机的攻击性。人类将按下按钮进行攻击(并且必须在计算机的某个半径范围内),所以我首先想到的是看到攻击次数与我的主while循环的迭代次数相比有多大经历了。这似乎是一种糟糕的方式,因为这个数字将取决于帧速率,帧速率可能会波动。有没有人有更好的方法来做到这一点?

4 个答案:

答案 0 :(得分:13)

为什么不只计算人类玩家可以攻击计算机玩家的时刻?我的意思是,你显然必须检查他是否在范围内,所以为什么不检查他是否在范围内,如果他是,则增加could_have_attacked计数器。然后,如果他确实进行了攻击,请增加attacked计数器。然后你可以比较人类玩家攻击的频率和他有机会的频率。

或者,比较他在范围内的频率与他在范围内的频率,或者更一般地跟踪玩家之间的平均距离。更积极的玩家可能会比被动玩家更接近对手。

您最好的选择可能是不同方法的组合。保持几种不同的测量方法,并尝试几种不同的方法来相互比较方法,并使用广泛的游戏测试来选择更好的方法。

答案 1 :(得分:1)

你必须定义积极的东西。例如,你可以说攻击性是一个追求AI的玩家,所以你会检查他是否比他超出范围更频繁。或者你可以说攻击性是一个攻击他获得的每一次机会的玩家,所以你要检查成功攻击的比例和玩家必须攻击的时间。或者你可以说一个好斗的球员会在受伤时进攻。一旦你定义了游戏世界中“积极”的含义,你就可以建立玩家属于该定义的关键绩效指标。

答案 2 :(得分:0)

您可以使用伪随机生成器。假设你有一个rnd()函数,它返回一个从0到1的值 - 更大的值对应于更高的攻击性。你引入了一个从0到1的系数。每次你需要确定角色是否会攻击时你调用rnd()并将该值与系数进行比较。如果它大于那个 - 攻击,否则不是。

答案 3 :(得分:0)

我想到了计算战斗之间平均时间和计算战斗中平均射速的方法。要做到这一点,你需要5个这样的变量:

float avgTimeWithoutCombat;
float currentTimeWithoutCombat;

float avgRateOfFire;
int shotsFired;
float combatTimeElapsed;

只要玩家没有战斗,你就算在currentTimeWithoutCombat中的“和平”时间。当他开火时,将其添加到avgTimeWithoutCombat并将其除以2以获得平均值。

每次玩家攻击时,都会增加射击次数。此外,计算战斗的时间。如果某个时间没有任何攻击,请检查主循环。如果是这样,战斗已经结束,你可以计算出avgRateOfFire。

现在你有两个值来衡量玩家的攻击性:

  • avgTimeWithoutCombat:这个数字越大,玩家的攻击性越小。
  • avgRateOfFire:这个数字越大,玩家就越激进。