我正在使用 Python 中的 Kivy 为学校项目制作 PONG 游戏。到目前为止,感谢这个论坛,我已经为 NPC 桨制作了一些 AI。这是代码:
if self.ball.y < self.player2.center_y:
self.player2.center_y = self.player2.center_y - 4
if self.ball.y > self.player2.center_y:
self.player2.center_y = self.player2.center_y + 4
这是在 PongGame() 类的一个方法中,称为ArtificialIntelligence()。
我用这个来称呼它:
Clock.schedule_interval(game.ArtificialIntelligence, 1/300)
这允许我每 1/300 秒调用一次。但是,任何超过1/300的东西,我似乎都没有区别。即 1/9001 不会每 1/9001 秒调用一次。
它的工作方式是相对于球的位置将 y 坐标增加 4 个像素,并且每 1/300 秒执行一次,因此它不会以这种速度“滞后”。这对玩家来说基本上是一个“简单”的模式。如果我想做一个“硬”模式,我需要让NPC更准确。我可以这样做
self.player2.center_y = self.player2.center_y + 20
像这样的东西。这将是非常准确的。但是,它看起来并不“流畅”,它看起来“滞后”。我假设我可以通过更频繁地调用该方法来获得相同的移动量,而不是通过改变像素移动来改变它的移动量。但是,我不知道如何做到这一点,因为正如我所说,从 1/300 以上的任何位置更改它似乎没有任何区别。
这就是我使用桨的方式:
if touch.x < self.width/3:
self.player1.center_y = touch.y
我可以随心所欲地移动它,因为它会随着我移动鼠标而更新。它看起来很流畅,因为它会根据需要更新。我不知道如何用我的 AI 做到这一点。
有谁知道我怎样才能基本上使 NPC 桨更准确,让我做 Easy-Normal-Hard 等,同时保持流动性和没有滞后?我只看到一种方法可以做到:增加调用方法的数量。
但是我打赌有更好的方法,我不知道该怎么做。有谁知道我怎么能做到这一点?谢谢。
编辑:看起来我可以这样做:
Clock.schedule_interval(game.ArtificialIntelligence, 1/300)
Clock.schedule_interval(game.ArtificialIntelligence, 1/300)
Clock.schedule_interval(game.ArtificialIntelligence, 1/300)
Clock.schedule_interval(game.ArtificialIntelligence, 1/300)
Clock.schedule_interval(game.ArtificialIntelligence, 1/300)
但这看起来真的很丑陋而且效率很低......我更喜欢更清洁的方式。