我正在为我的软件开发课做一个乒乓球比赛,我应该说这是作业,因此我的理解有限。我在为我的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.
指的是我的球拍。
是的..现在我被卡住了。我不知道如何使用这个速度来控制移动桨。有人有主意吗?由于我的问题很可能非常模糊,我会提供游戏的来源,因为你需要更好的理解。谢谢。
P.S。我意识到这是一个很大的问题,还有很多要问,但我希望有人能回答。感谢。
答案 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基本上只是无限快。
这有助于你解开吗?