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

2022-02-23 00:00:00 python kivy performance pong

问题描述

我正在为我的软件开发班级制作一个乒乓球游戏,我可能应该声明这是家庭作业,因此我的理解有限。我在为我的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速度才能使其工作,但我认为这应该是正确的总体思路。如果你仔细想想,无与伦比的人工智能基本上就是无限快。

这能帮助您解困吗?

相关文章