我正在为gameboy advance写一个游戏,我正在以二叉搜索树的形式实现基本的AI。有1个人类播放器和1个电脑播放器。我需要找出一种方式来说明人类玩家在攻击计算机方面的攻击性。人类会推动一个按钮进行攻击(并且必须位于计算机的某个半径范围内),所以我的第一个想法是查看攻击次数与主循环所经历的迭代次数相比有多大。这似乎是一个很糟糕的做法,因为这个数字将取决于可能波动的帧速率。有没有人有一个更好的方法来做到这一点的想法?如何检测玩家在游戏中的侵略性?
回答
为什么不只是保持人类玩家可以攻击电脑播放器的瞬间次数?我的意思是,你显然必须检查他是否在范围内,为什么不检查他是否在范围内,如果他是,则增加could_have_attacked
计数器。然后,如果他真的有攻击,则增加一个attacked
计数器。然后你可以比较人类玩家的攻击频率和他有多少次机会。
或者,比较他在范围内的频率,以及他不在范围内的频率,或者更一般地追踪球员之间的平均距离。更积极的球员可能会比被动球员更接近对手。
你最好的选择可能是不同方法的组合。保持几种不同的测量结果,并尝试用不同的方法来衡量方法,并使用广泛的测试来选择哪一个更好。
您可以使用伪随机生成器。假设你有一个rnd()函数返回一个从0到1的值 - 更大的值对应于更高的侵略性。您引入一个从0到1的系数。每次需要确定角色是否会发起攻击时,都会调用rnd()并将该值与系数进行比较。如果它大于 - 攻击,否则不。
你必须定义什么是积极的。例如,你可以说攻击性是一个追逐AI的玩家,所以你应该检查他是否在范围内比他超出范围。或者你可以说侵略性是一个攻击每一个机会的玩家,所以你会检查成功攻击的比例与玩家攻击的时间。或者你可以说一个攻击性的球员在受伤时会发起攻击。一旦你定义了你的游戏世界中“积极”的含义,你就可以建立玩家何时落入该定义的关键性能指标。
我想到了一些计算战斗间平均时间和计算战斗中平均射速的方法。要做到这一点,就需要5个变量是这样的:
float avgTimeWithoutCombat;
float currentTimeWithoutCombat;
float avgRateOfFire;
int shotsFired;
float combatTimeElapsed;
只要球员不打,你算在currentTimeWithoutCombat“和平”的时间。当他发射时,将其添加到avgTimeWithoutCombat并将其除以2得到平均值。
每次玩家攻击时,增加ShotFired的次数。另外,计算战斗的时间。如果在没有任何攻击的情况下一定时间检查主循环。如果是这样,战斗结束,你可以计算avgRateOfFire。
现在你有两个值来衡量球员的侵略性:
- avgTimeWithoutCombat:越大这个数字,少侵略性的球员。
- avgRateOfFire:这个数字越大,玩家就越积极。
- 1. 游戏中的玩家停止游戏
- 2. OO Javascript游戏,如何添加玩家游戏的玩家数组?
- 3. 太空侵略者游戏
- 4. 多人游戏玩家2人游戏
- 5. 3玩家卡牌游戏
- 6. 玩家死亡/ c游戏#
- 7. CPU玩家骰子游戏
- 8. iOS游戏玩家ID
- 9. 如何检测子弹击中太空侵略者控制台游戏与lncurses
- 10. 在Java游戏中切换玩家
- 11. 在游戏中设置两个玩家
- 12. Twitch API让玩家玩X游戏
- 13. 跟踪游戏中的玩家(Java)
- 14. 玩家游戏对象在游戏中消失
- 15. SQL如何从关系数据库中的游戏获取玩家VS玩家游戏数量
- 16. 如何模仿在线游戏中的玩家
- 17. 如何在游戏AS3中显示玩家的生活
- 18. 如何在pacman游戏中编码收集点的玩家?
- 19. 如何在socket.io游戏中限制玩家轮到的时间?
- 20. 如何在我的冒险游戏中分配玩家
- 21. 有多少玩家使用游戏中心或等待游戏
- 22. socket.io多人游戏玩家的视图
- 23. 查找涉及玩家的游戏
- 24. Android游戏的多个玩家
- 25. 与同时玩家的网页游戏
- 26. Java游戏与玩家的死代码
- 27. Google Play游戏:不同的玩家ID
- 28. Steam API:如何在当前游戏中获得玩家?
- 29. 如何在多人游戏中处理很多玩家?
- 30. 如何在井字游戏中验证玩家输入?
我想你可能误解了这个问题......他想知道如何确定PLAYER是否具有侵略性,而不是为AI的侵略性开发功能。 – 2009-04-16 06:45:09
正确的,尖锐的提示是我打算为计算机攻击逻辑做些什么。 – blueintegral 2009-04-16 06:46:55