0

私はソフトウェア開発のクラスで卓球ゲームを作っていますが、これは宿題だと言っておかなければならないので、私の理解は限られています。NPC パドルの AI の作成に問題があります。私はKivyとPythonを使用しています。

現在、これを行うことで AIを打ち負かすことはできません。

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

ここself.player2.center_yで、 は NPC の y 座標 (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ピクセルの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)これに関して、ボールが動く速度は…と仮定しても安全でしょうか? つまり、1/300 秒ごとに 10 ピクセル x と 0 y ですか? 1/20くらいに変えると動きがかなり遅くなってしまうので…と思います。

次に、AI を保持する関数を作成する必要があります...おそらく

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

self.player1.私のパドルを指します。

そしてええ..今私は立ち往生しています。この速度を使用してパドルの移動を制御する方法がわかりません。誰にもアイデアはありますか?私の質問は非常に曖昧である可能性が高いため、理解を深める必要がある場合に備えて、ゲームのソースを提供します. ありがとうございました。

http://pastebin.com/8wTLbH21

psこれは大きな質問であり、多くの質問があることを認識していますが、誰かが答えてくれることを願っています. ありがとう。

4

2 に答える 2

3

seasaotternerd のおかげで、打ち負かす 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 に答える