首页
学习
活动
专区
圈层
工具
发布

台球AI
EN

Stack Overflow用户
提问于 2010-05-10 08:49:17
回答 5查看 4.7K关注 0票数 9

我正在用Java实现一个台球游戏,它运行得很好。这是一个多人游戏,但尽管如此,它也应该可以单独玩。为此,我尝试实现一个简单的KI。目前,KI只是随机选择一个方向和一个随机强度的脉冲(不知道正确的英文单词)。当然,这种人工智能非常差,不太可能挑战玩家。

所以我想要改进KI,但有几个很难解决的问题。首先,我只想选择最近的球,并试着把它直接放进最近的洞里。这并不是那么糟糕,但是如果中间有其他球,它就不再工作了。此外,这并没有解决计算脉冲强度的问题。

那么有什么一般性的建议吗?或者有什么想法?最佳实践?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-05-10 09:16:19

计算游戏一次“移动”的结果需要多少CPU时间和内存?你能负担得起分析一个以上的走法吗?如果这样做相对便宜,只需选择N个随机方向/脉冲,计算结果并选择最好的。你可以消除一些“棘手”的情况,当球在太多的碰撞后进入口袋。此外,为了简化,您可以限制每次移动的模拟时间(即,不要等到所有球停止,只计算前T秒)。

这样,你可以有不同级别的计算机玩家--较高的N(和T)对应较高的游戏级别。

票数 7
EN

Stack Overflow用户

发布于 2010-05-10 22:17:24

根据台球游戏的不同,你通常有两个任务

评估桌面上的情况(获取可能的镜头)

  • 在完美的情况下(完美的瞄准,完美的投篮)所有可能的投篮都是同样困难的,如果你只考虑直接投篮到一个球,那么最多只有6个洞x n个球的情况需要你分析(分析简单的佳能-打两个球只需要额外的n^2个球x 6个洞的情况)。对于这些情况中的每一种,确定它们是否可行都需要简单的分析(除非您正在进行非常逼真的碰撞模拟)。因此,在非常简单的模拟中,您可能希望尝试构建所有可能的情况,并对它们进行排序。为了分析银行外的投篮,你可能想要在列举可能的情况时镜像球和holes.
  • Alternatively,你可以简单地对表进行行扫描,标记对于投篮是非法的区域,并枚举和构建潜在的投篮,如...

angle1、ball1、pocket2

angle2、ball1、pocket3

angle3、ball1、ball2、pocket1

angle4、cushion2、ball2、pocket1

  • 对于更好的AI你想要模拟不完美,例如,击球是通过在某个点x(可能定义为远离直接击球的角度)击球来进行的,让我们假设dx会有一个错误(由于瞄准不好,或者击球不好,等等)-这反过来会导致球在方向上的错误,这将随着到口袋的距离而增加。这给出了一种根据难度对投篮进行排序的方法-根据瞄准/投篮中的错误来衡量投篮的敏感度(一些投篮比其他投篮更容易)。这将取决于从白色到球以及从球到洞的路径的长度。
  • 还有一件事需要注意,那就是白球进洞的风险,或者其他非法投篮的风险

选择击球(不仅基于难度,还基于潜在的增益)

  • 你还需要看看策略(一个简单的投篮可能会让你在下一轮一无所获)
  • 这不仅是因为第一次投篮有多容易,而且还有第二次投篮有多难(为此,你可以再次对模拟的情况进行评估,这里你可以让球员变得更强或更弱,这取决于他能向前看多少次);你也可以给你的球员个性-寻找解决方案深度优先或广度优先)
  • 在选择策略时,你应该寻找难度总和最小的击球组合(你可能需要评估后面的击球的重要性,考虑到你将在游戏中miss)
  • depending的概率你可能会考虑引入纯粹的位置游戏的安全击球,其目的不是立即将球装入口袋,而是迫使对手犯错或缓解你自己的情况(当玩这样的击球时,还有其他情况将是有益的-例如,当你不能击中任何东西,但需要分割几个球或将它们从垫子上移开)。在这种情况下,您需要从头开始。
  • 所有这些在真实的物理中变得更加复杂:旋转,真实的碰撞,反弹,真实的坐垫,球杆滑落等等。
票数 5
EN

Stack Overflow用户

发布于 2010-05-10 08:58:58

我可以想到两种广泛的方法。

  1. 列出了主球周围的所有可能的球杆位置和力量级别,然后搜索列表以找到第一个让你下沉球的位置。这是一个相当大的列表,你可以通过使用少量的力量级别和排除任何“明显”的糟糕投篮来削减它。
  2. 向后工作--查看桌子上的每个球,看看是否可以让主球接触到它。然后计算出正确的球杆位置和用力水平,使其进入洞内。您可以将其展开以在树中搜索多球投篮。

我最喜欢解决方案1;它可以让你找到一次可以沉两个或更多球的情况。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2799785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档