PythonでKivyを使用して学校のプロジェクト用のPONGゲームを作成しています。これまでのところ、このフォーラムのおかげで、NPCパドル用のAIを作成しました。これはコードです:
if self.ball.y < self.player2.center_y:
self.player2.center_y = self.player2.center_y - 4
if self.ball.y > self.player2.center_y:
self.player2.center_y = self.player2.center_y + 4
これは、ArtificialIntelligence()と呼ばれるPongGame()クラスのメソッドにあります。
私はこれを使ってそれを呼びます:
Clock.schedule_interval(game.ArtificialIntelligence, 1/300)
これにより、1/300秒に1回呼び出すことができます。ただ、1/300以上なら何の違いもないようです。つまり、1/9001は1/9001秒ごとに1回は呼び出されません。
それが機能する方法は、ボールの位置に対してy座標を4ピクセル増やすことであり、これは1/300秒ごとに1回行われるため、この速度で「遅れ」ることはありません。これは基本的にプレイヤーにとって「簡単な」モードです。「ハード」モードを実行したい場合は、NPCをより正確にする必要があります。私はこれを行うことによってこれを行うことができます
self.player2.center_y = self.player2.center_y + 20
このようなもの。これは非常に正確です。ただし、「流動的」ではなく、「遅延」しているように見えます。ピクセルの動きを変更して移動量を変更する代わりに、メソッドをより頻繁に呼び出すことで、同じ量の移動を取得できると思います。ただし、これを行う方法はわかりません。前述したように、1/300より上から変更しても違いはないようです。
これが私のパドルの使い方です:
if touch.x < self.width/3:
self.player1.center_y = touch.y
マウスを動かすと更新されるので、好きなだけ速く動かすことができます。また、更新が必要な頻度で更新されるため、流動的に見えます。AIでこれを行う方法がわかりません。
基本的にNPCパドルをより正確にして、流動性とラグを維持しながら、イージー-ノーマル-ハードなどを実行できるようにする方法を知っている人はいますか?私はそれを行うことができる唯一の方法を見ています:メソッドが呼び出される量を増やします。
しかし、私はもっと良い方法があるに違いない、そして私はそれをする方法を知らない。誰かが私がこれをどのように行うことができるかについて何か考えを持っていますか?ありがとう。
編集:私はこのようにそれを行うことができるように見えます:
Clock.schedule_interval(game.ArtificialIntelligence, 1/300)
Clock.schedule_interval(game.ArtificialIntelligence, 1/300)
Clock.schedule_interval(game.ArtificialIntelligence, 1/300)
Clock.schedule_interval(game.ArtificialIntelligence, 1/300)
Clock.schedule_interval(game.ArtificialIntelligence, 1/300)
しかし、それは本当に醜くて本当に非効率的なようです...私はもっとクリーンな方法を好むでしょう。