首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >游戏AI的创建+速度算法的基本理解

游戏AI的创建+速度算法的基本理解
EN

Stack Overflow用户
提问于 2012-07-29 04:47:46
回答 2查看 4.5K关注 0票数 0

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

目前,通过这样做,我可以创建不可能击败 AI的

代码语言:javascript
复制
#ai
self.player2.center_y = self.ball.y 

其中,self.player2.center_y是NPC的y坐标(它只在y轴上移动),self.ball.y是球的y坐标。我遵循了基维网站上的教程来创建游戏的基础。

现在我不知道我如何能创造出可以战胜的人工智能。我知道我需要限制AI的速度,所以当球变得如此之快,它将无法抓住它。问题是,我实际上没有速度函数。

我所遵循的教程的问题是,它并不能解释所有内容()。我相信我可以通过说"Every x seconds, the paddle will move x pixels in the y axis."来做一个速度函数

按照kivy教程的规定,球是这样的:

代码语言:javascript
复制
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,显然控制速度.

代码语言:javascript
复制
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..。也许吧

代码语言:javascript
复制
def AI(self):
    self.AI_Speed = self.ball.velocity - 10

self.player1.指的是我的桨。

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

http://pastebin.com/8wTLbH21

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-29 06:43:24

因为这是一个很大的问题,所以我还没有对它进行测试,但是似乎您希望有某种能够移动AI的函数(我称之为call .player2.move())。如果您在game.update()中调用这个函数,那么您应该能够将AI桨逐渐移动到击球所需的位置。

-译者注:

代码语言:javascript
复制
figure out if ball is above or below paddle
move self.AI_Speed units in the direction of the ball

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

这能帮你摆脱困境吗?

票数 2
EN

Stack Overflow用户

发布于 2012-07-29 07:40:51

多亏了海怪,我已经写了一些东西,使一个不可战胜的人工智能。

代码语言:javascript
复制
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位置,如果它小于全国人大的桨的中心,我只需每次向下移动3y,直到它是相同或更大的。如果它不仅仅是全国人大桨的中心,我只会增加它。

这就定义了桨的速度(每1/300秒有3y个位置),这将使我在更困难的模式下增加难度。

谢谢!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11706756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档