それで、私と私のパートナーは、プレイヤー対コンピューターの卓球ゲームを作ろうとしていますが、コンピューターを負けさせる方法がわかりませんでした。
すでに基本的な作業は完了しており、正常に動作しますが、コンピューターが負けることはありません。また、スリープを使用してコンピューターのペドルを遅くしようとしましたが、パドルの動きが遅くなると、ボールの動きも遅くなります。
どんなアドバイスも役に立ちます!ありがとう
それで、私と私のパートナーは、プレイヤー対コンピューターの卓球ゲームを作ろうとしていますが、コンピューターを負けさせる方法がわかりませんでした。
すでに基本的な作業は完了しており、正常に動作しますが、コンピューターが負けることはありません。また、スリープを使用してコンピューターのペドルを遅くしようとしましたが、パドルの動きが遅くなると、ボールの動きも遅くなります。
どんなアドバイスも役に立ちます!ありがとう
また、スリープを使用してコンピューターのペダルの速度を落としてみましたが、パドルの動きが遅くなると、ボールの動きも遅くなります。
あなたはそれが動くたびにそれをより短い距離で動かすことによってそれを遅くする必要があります。
元の Pong ゲームでは、パドルはボールと完全に同期していました。つまり、ボールがラインを下るたびに、パドルも同期していました。明らかに、それはゲームに勝てないものになるため、開発者が使用した解決策は、数サイクルごとに更新サイクルをスキップすることでした.
簡単に言えば、すべてのフレームで、5 番目、10 番目、15 番目などを除いて、パドルの位置をボールに追従するように調整します。これにより、パドルはボールをうまく追従しているように見えますが、何らかの遅延反応が生じます。 .
このhttps://gamedev.stackexchange.com/のような問題のためのゲームサイトがあると思います。しかし、私の答えは、AIバットの最高速度を循環させようとすることです。そして、コウモリを短くするために。(ボールが半分になったら、ボールの位置にのみ応答します。)
コンピュータはボールがどこに行くかを「知っている」ので、負けることはないと思います。その場合、何パーセントかの確率で間違った場所に移動できないのはなぜですか?
同様に、寝るのではなく、ただゆっくりしたい場合は、「どこにも行かない」という「動き」と、正しい場所であると考える場所への動きを散在させることができます. したがって、「ダウン 1、ダウン 1、ダウン 1」の代わりに、「ダウン 1、ダウン 0、ダウン 0、ダウン 1、ダウン 0、ダウン 0...」またはそれらの線に沿った何かを使用できます。
コンピュータが負けるには間違いを犯さなければなりません。問題は、間違いは現実的でなければならないということです。ミスが人為的すぎると思われる場合、人間のプレーヤーはしばらくすると興味を失います。人間は、ミスの原因は自分の良いプレーにあると信じなければなりません。
コンピューターの反応が遅くなることがあります。つまり、人間がボールを打つとフリーズします。これは、人間がエッジでボールを打った場合に特に発生する可能性があります。
意図的に遅くすることは非現実的です。ただし、バウンドするボールを防御している間、コンピュータの動作が少し遅くなることがあります。
ボールがバットの中央に当たったとき、コンピューターは間違った側に反応することがあります (たとえば、下ではなく上に上がる)。
コンピュータは、特にボールがバウンドする場合に、間違った場所 (1 つずれている) でボールを待機することがあります。
Sleep を使用すると、プログラム全体が数ミリ秒間停止します。ゲームループはありますか?その場合は、平行移動量を減らしてみてください。また、加速度ベクトルを正規化することを忘れないでください。
cpuPadlle.Position += amount * acceleration;
どこ :