为乒乓球游戏创建AI+对速度算法的基本理解



我正在为我的软件开发类制作一个乒乓游戏,我可能应该声明这是家庭作业,因此我的理解有限。我在为我的NPC球拍创建AI时遇到了一些问题。我正在使用Kivy和Python。

目前,我可以通过以下操作创建无法击败AI:

#ai
self.player2.center_y = self.ball.y 

其中self.player2.center_y是NPC的y坐标(它只在y轴上移动),self.ball.y是球的y坐标。我按照Kivy网站上的教程创建了游戏的基础。

现在我不知道如何创造出可以打败的人工智能。我知道我需要限制AI的速度,所以当球变得如此之快时,它将无法抓住它。但问题是,我实际上并没有速度函数。

我遵循的教程的问题是它没有解释所有。我相信我可以通过说"Every x seconds, the paddle will move x pixels in the y axis."

这就是按照kivy教程发球的方式:

def serve_ball(self, vel=(10,0)):
    self.ball.center = self.center
    self.ball.velocity = vel

好吧,现在我试着去理解这个。。。vel=(10,0)):可能意味着,移动10个像素X和0个像素Y,将其分配给ball.velocity,显然这控制了速度。。。

class PongApp(App):
    def build(self):
        game = PongGame()
        game.serve_ball()
        Clock.schedule_interval(game.update, 1.0/300.0)
        return game

Clock.schedule_interval(game.update, 1.0/300.0)关于这一点,可以安全地假设。。。这就是球移动的速度?即每1/300秒10个像素x和0个像素y?如果我把它改成1/20,它的移动速度会慢得多。。。所以我想是的。

现在我需要创建一个函数来保存AI…也许是

def AI(self):
    self.AI_Speed = self.ball.velocity - 10

self.player1.指的是我的球拍。

是的。。现在我被卡住了。我不知道如何使用这个速度来控制划桨的移动。有人有什么想法吗?由于我的问题很可能非常模糊,如果你需要更好的理解,我会提供游戏的来源。非常感谢。

http://pastebin.com/8wTLbH21

附言:我意识到这是一个大问题,有很多问题要问,但我希望有人能回答。谢谢

多亏了seasotternerd,我成功地写了一些东西,使AI变得无与伦比。

if self.ball.y < self.player2.center_y:
    self.player2.center_y = self.player2.center_y - 3
if self.ball.y > self.player2.center_y:
    self.player2.center_y = self.player2.center_y + 3

我把球放在y的位置,如果它小于NPC球拍的中心,我会每次把NPC向下移动3y,直到它相同或更大。如果它超过NPC球拍的中心,我只会增加它。

这就定义了划桨的速度(每1/300秒3个y位置),并将允许我增加更难的模式的难度。

谢谢!

由于这是一个很大的问题,我还没有测试过,但似乎你想拥有某种移动AI的函数(我称之为self.player2.move())。如果你在game.update()中调用这个函数,那么你应该能够逐渐将AI球拍移动到击球所需的位置。

self.player2.move()的一些基本伪代码:

figure out if ball is above or below paddle
move self.AI_Speed units in the direction of the ball

你可能需要更多地调整人工智能的速度来实现这一点,但我认为这应该是正确的总体思路。如果你仔细想想,无与伦比的人工智能基本上只是无限快。

这有助于你摆脱困境吗?

最新更新