问题描述
我正在为我的软件开发班级制作一个乒乓球游戏,我可能应该声明这是家庭作业,因此我的理解有限。我在为我的NPC球拍创建人工智能时遇到了一些问题。我正在使用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)
关于这一点,是否可以肯定地认为……这就是球移动的速度吗?即10个像素x和0y,每1/300秒?如果我把它改成1/20左右,它的移动速度会慢得多…所以我想是这样的。
现在我需要创建一个函数来保存AI.也许
def AI(self):
self.AI_Speed = self.ball.velocity - 10
self.player1.
指的是我的球拍。
而且是的..现在我被困住了。我不知道怎样才能用这个速度来控制球拍的移动。有谁有什么主意吗?由于我的问题很可能非常含糊,我将提供游戏的来源,以防您需要更好的理解。谢谢您。
http://pastebin.com/8wTLbH21
附注:我知道这是一个很大的问题,也有很多问题要问,但我希望有人能回答。谢谢。
推荐答案
由于这是一个很大的问题,我还没有对其进行测试,但是您似乎想要有某种移动AI的函数(我将其称为self.player2.move())。如果在game.update()中调用此函数,则应该能够增量地将AI球拍移动到击球所需的位置。
self.player2.mobile()的一些基本伪代码:
figure out if ball is above or below paddle
move self.AI_Speed units in the direction of the ball
您可能需要更多地调整AI速度才能使其工作,但我认为这应该是正确的总体思路。如果你仔细想想,无与伦比的人工智能基本上就是无限快。
这能帮助您解困吗?
这篇关于为乒乓球游戏创建AI+对速度算法有基本了解的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!