2012-07-29 122 views
0

我正在做一個乒乓球比賽我的軟件開發課,我也許應該指出,這是家庭作業,因此我有限的瞭解基本的瞭解創建AI。我在爲NPC槳製作AI時遇到了一些問題。我正在使用Kivy和Python。對乒乓球比賽+速算法

目前,我可以創造不可能通過這樣做是爲了擊敗 AI:

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

其中self.player2.center_y是y座標NPC(只移動在y軸)和self.ball.y是y座標球。我遵循Kivy網站上的教程來創建遊戲的基礎。

現在我不知道我怎麼可以創建AI,這將是不可戰勝的想法。我知道我需要限制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像素×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

p.s.我意識到這是一個很大的問題,需要問很多,但我希望有人能夠回答。謝謝。

回答

2

由於這是一個大問題,我還沒有測試了這一點,或任何東西,但好像你想擁有某種功能的移動AI(我稱之爲self.player2.move( ))。如果您在game.update()中調用此函數,那麼您應該能夠逐漸將AI槳移動到需要擊球的位置。

self.player2的一些基本僞代碼。移動():

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

您可能需要調整AI速度更使這項工作,但我認爲這應該是正確的總體思路。如果你仔細想想,無與倫比的AI基本上是無限快速的。

這是否有助於讓你脫落?

+0

謝謝,這有助於很多...我已經標記你的答案是最好的,我真的覺得有點愚蠢,因爲解決方案非常簡單! > _ <我會發布我的答案。 – Anteara 2012-07-29 07:37:28

+0

謝謝!我很高興它幫助!回想起來,這些事情總是顯得更加明顯:) – seaotternerd 2012-07-29 20:14:14

+0

這正是我在將我的Pong版本展示給CS類時所使用的過程。我確定這是許多版本使用的,因爲它是一個易於實現的算法。 – 2012-08-06 11:31:52

2

感謝seaseaotternerd我已經設法寫出了一些可拍人工智能的東西。

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每次移動的NPC,直到它要麼相同或更大。 同樣的事情,如果它超過了NPC的槳的中心,我只是增加它。

然後,它定義了槳的速度(每1/300秒的3個位置),並允許我增加難度模式的難度。

謝謝!