乒乓球:球拍如何知道击球的位置?

24 algorithm artificial-intelligence pong

在实施Pacman和Snake后,我正在实施下一个非常经典的游戏:Pong.

实现非常简单,但我只剩下一个小问题.当其中一个桨(我不确定它是否被称为桨)由计算机控制时,我无法将其定位在正确的位置.

球具有当前位置,速度(现在是恒定的)和方向角.所以我可以计算它将撞到计算机控制桨的一侧的位置.所以我可以把桨放在那里.但是在真实游戏中,计算机的球拍有可能会错过球.我该如何实现这个概率?

如果我只使用0.5的概率,计算机的球拍将会击球,问题就解决了,但我认为并不那么简单.

从原始游戏中我认为概率取决于当前球拍位置与球将击中边界的位置之间的距离.

有没有人有任何提示如何计算?

Jam*_*lgh 29

引用非常有趣的书"赛车梁"(Google Books:http://books.google.co.uk/books? id = DqePfdz_x6gC&lpg = PP1&dq =racing%20the%20beam&pg = PA40 #v = onepage&q&f = false)原创技术是:

为了帮助模拟精确桨叶定位中固有的人为错误,AI桨叶每八帧跳过一次调整.由此产生的行为明显不明显,但它允许计算机玩家的目标漂移到足以偶尔错过球.实现技术上也是微不足道的,只需要单个掩码和二进制AND操作,对此存在相应的6502指令.程序员可以使用另一个操作码测试结果是否为零,如果需要,可以跳过移动焊盘的指令.

即使是这种行为也必须稍加修改才能使游戏完全正常工作.如果AI玩家每隔8帧就停止跟踪一次球,那么几秒内它就会无可救药地失去同步.为了防止这种情况,AI在球场的顶部和底部附近遵循二次球跟踪方案.如果球与其中一个墙碰撞而桨也与其对齐,则桨重新调整,从球最后撞击墙壁后累积的任何漂移中恢复.结果是计算机桨和球的随机错位和重新对准.


Meh*_*dad 20

我们为高中CS班制作了一个(伪)3D乒乓球比赛.我们做的是,我们让计算机始终将球拍向球移动,但是以最大速度 - 这样,如果球太远,它可能会错过球,但它仍然很聪明.这有帮助吗?

  • 我认为这就是原Pong的工作方式. (5认同)
  • 汤姆:那是作弊:P (3认同)
  • 当我在大学时,我们通过将球拍的中心设置为等于球的中心(减去半径)来做到这一点.计算机不可能错过. (2认同)

cjr*_*oth 5

我认为你应该让桨叶始终从当前位置移动到特定点,这将是球与桨叶垂直对齐的位置.然后你可能有50%的几率将球拍移动到这个精确的位置并使球偏转,25%的可能性它将超过,可能是一些X像素,并且有25%的可能性它会下冲.更好的方法可能是让它在钟形曲线上移动到那个位置,这样每次都会错过不同的数量.


j_r*_*ker 5

其他答案讨论了如何在不同情况下决定正确的前进方向。您还可以在计算机玩家开始朝这个方向移动“反应”之前添加一个延迟时间——这反映了人类玩家的典型反应。