2009-04-16 41 views
3

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

回答

13

为什么不只是保持人类玩家可以攻击电脑播放器的瞬间次数?我的意思是,你显然必须检查他是否在范围内,为什么不检查他是否在范围内,如果他是,则增加could_have_attacked计数器。然后,如果他真的有攻击,则增加一个attacked计数器。然后你可以比较人类玩家的攻击频率和他有多少次机会。

或者,比较他在范围内的频率,以及他不在范围内的频率,或者更一般地追踪球员之间的平均距离。更积极的球员可能会比被动球员更接近对手。

你最好的选择可能是不同方法的组合。保持几种不同的测量结果,并尝试用不同的方法来衡量方法,并使用广泛的测试来选择哪一个更好。

0

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

+0

我想你可能误解了这个问题......他想知道如何确定PLAYER是否具有侵略性,而不是为AI的侵略性开发功能。 – 2009-04-16 06:45:09

+0

正确的,尖锐的提示是我打算为计算机攻击逻辑做些什么。 – blueintegral 2009-04-16 06:46:55

1

你必须定义什么是积极的。例如,你可以说攻击性是一个追逐AI的玩家,所以你应该检查他是否在范围内比他超出范围。或者你可以说侵略性是一个攻击每一个机会的玩家,所以你会检查成功攻击的比例与玩家攻击的时间。或者你可以说一个攻击性的球员在受伤时会发起攻击。一旦你定义了你的游戏世界中“积极”的含义,你就可以建立玩家何时落入该定义的关键性能指标。

0

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

float avgTimeWithoutCombat; 
float currentTimeWithoutCombat; 

float avgRateOfFire; 
int shotsFired; 
float combatTimeElapsed; 

只要球员不打,你算在currentTimeWithoutCombat“和平”的时间。当他发射时,将其添加到avgTimeWithoutCombat并将其除以2得到平均值。

每次玩家攻击时,增加ShotFired的次数。另外,计算战斗的时间。如果在没有任何攻击的情况下一定时间检查主循环。如果是这样,战斗结束,你可以计算avgRateOfFire。

现在你有两个值来衡量球员的侵略性:

  • avgTimeWithoutCombat:越大这个数字,少侵略性的球员。
  • avgRateOfFire:这个数字越大,玩家就越积极。