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

时间:2012-07-29 04:47:46

标签: python performance pong kivy

我正在为我的软件开发课做一个乒乓球比赛,我应该说这是作业,因此我的理解有限。我在为我的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。我知道我需要限制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)关于这一点,可以安全地假设...这是球移动的速度吗?即10个像素x和0 y,每1/300秒?如果我把它改成像1/20这样的东西,它移动得慢得多......所以我会假设它。

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

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

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

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

http://pastebin.com/8wTLbH21

P.S。我意识到这是一个很大的问题,还有很多要问,但我希望有人能回答。感谢。

2 个答案:

答案 0 :(得分:3)

感谢seaseaotternerd,我设法写了一些可以打败人工智能的东西。

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

我得到了球的位置,如果它小于NPC桨的中心,我只需每次将NPC向下移动3,直到它相同或更大。 同样如果它不仅仅是NPC桨的中心,我只是增加它。

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

谢谢!

答案 1 :(得分:2)

由于这是一个很大的问题,我还没有测试过这个问题,但似乎你想要某种能够移动AI的功能(我将它称为self.player2 。移动())。如果你在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

您可能需要更多地调整AI速度才能使其工作,但我认为它应该是正确的总体思路。如果你考虑一下,无与伦比的AI基本上只是无限快。

这有助于你解开吗?