0

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

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

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

NPC 的 y 坐标在哪里self.player2.center_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 和 0 y,每 1/300 秒?如果我将其更改为 1/20 之类的东西,它的移动速度会慢得多……所以我会这么认为。

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

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

self.player1.指我的桨。

是的..现在我被困住了。我不知道如何使用这个速度来控制桨的移动。有人有想法么?而且由于我的问题很可能非常模棱两可,因此我将提供游戏的来源,以防您需要更好的理解。谢谢你。

http://pastebin.com/8wTLbH21

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

4

2 回答 2

3

感谢 seaseaotternerd,我设法编写了一些可以制作可击败 AI 的东西。

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

谢谢!

于 2012-07-29T07:40:51.033 回答
2

由于这是一个很大的问题,我还没有测试过这个或任何东西,但似乎你想要某种移动 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

您可能需要更多地调整 AI 速度才能完成这项工作,但我认为这应该是正确的总体思路。如果你仔细想想,无与伦比的 AI 基本上只是无限快。

这能帮助你摆脱困境吗?

于 2012-07-29T06:43:24.353 回答