ピンポンゲームのためのAIの作成+速度アルゴリズムの基本的な理解
-
13-12-2019 - |
質問
私はソフトウェア開発クラスのためにポンゲームを作っています、そして私はおそらくこれが宿題であると述べるべきです、それ故に私の限られた理そして、私は私の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サイトのチュートリアルに従いました。
今、私はbeatableになる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)
これに関して、それを仮定するのは安全ですか?..それはボールが移動する速度ですか?すなわち10ピクセルxと0y、1/300秒ごとに?私は1/20のようなものに変更すると、それははるかに遅く移動します。..だから私はそう仮定するでしょう。
次に、AIを保持する関数を作成する必要があります。..おそらく
def AI(self):
self.AI_Speed = self.ball.velocity - 10
self.player1.
私のパドルを指します。
そして、ええ。.今、私は立ち往生しています。この速度を使用してパドルの移動を制御する方法がわかりません。誰かアイデアはありますか?そして、私の質問は非常にあいまいな可能性が高いので、より良い理解が必要な場合は、ゲームのソースを提供します。お疲れさまでした。.
p.s.私はこれが大きな質問であり、尋ねるべきことがたくさんあることを認識していますが、誰かが答えることを願っています。ありがとう!.
解決
これは非常に大きな質問なので、私はこれをテストしていませんが、AIを動かす何らかの機能を持っているようです(私はそれをselfと呼びます。プレイヤー2.ムーブ())。ゲームでこの関数を呼び出す場合。update()を実行すると、AIパドルをボールを打つために必要な場所に徐々に近づけることができるはずです。
自己のためのいくつかの基本的な擬似コード。プレイヤー2.移動():
figure out if ball is above or below paddle
move self.AI_Speed units in the direction of the ball
この作業を行うには、AIの速度をさらに調整する必要があるかもしれませんが、それは正しい一般的な考えであるべきだと思います。あなたがそれについて考えるならば、無敵のAIは基本的に無限に速いです。
それはあなたをばらばらにするのに役立ちますか?
他のヒント
Seaseaotternerdのおかげで、私はbeatable 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あたり3y位置)を定義し、私は難しいモードの難易度を高めることができます。
ありがとう!