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

目前我可以创建 不可能被击败 人工智能通过这样做:

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

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

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

我遵循的教程的问题是它没有解释 一切. 。我相信我可以通过说来制作速度函数"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) 关于这一点,可以安全地假设......这就是球移动的速度?IE。10 个像素 x 和 0 y,每 1/300 秒一次?如果我将其更改为 1/20 之类的值,它的移动速度就会慢得多...所以我想是这样。

现在我需要创建一个函数来保存人工智能......也许

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.move() 的一些基本伪代码:

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

你可能需要更多地调整人工智能速度才能使这项工作正常进行,但我认为这应该是正确的总体想法。如果你仔细想想,无与伦比的人工智能基本上是无限快的。

这能帮助你摆脱困境吗?

其他提示

多亏了seaseaotnerd,我才成功地写出了一些可以打败人工智能的东西。

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 位置),并且允许我增加更难模式的难度。

谢谢!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top