1

プレイヤーが味方の行動をプログラムできるプログラミングゲームを作っています。プレーヤーは、任意の Java コードで埋めることができますが、アクションを返さなければならない、特定の味方の決定() 関数の本体を作成します。各味方にセットを与え、ティックごとの計算量を制限したいので、1) エンティティを追加してもゲームの速度が遅くなりすぎないようにし、2) エンティティが計算に費やす時間がゲームに反映されるようにします。行動する頻度が減るだろうと「考える」ことに多くの時間を費やします。これがどのように機能するかについての私のインスピレーションはBattlecode です。これは、ユニットにターンごとに一定量のバイトコードを与え、その後計算を一時停止し、プログラマーに物事が変化したときに気付くように対処させます。

私の質問は、スレッドで決定機能を実行しているエンティティを一時停止して再開する方法です。これを行う「適切な」方法は、スレッドを一時停止して時々チェックするようにフラグを設定することだと理解していますが、プレーヤーに決定()関数内のフラグを強制的にチェックさせることはできないため、私はスレッドを一時停止する方法がわかりません。エンティティは世界の固定表現のみを見ており、列挙値を返す必要があるだけなので、何かをロックする必要はないと思いますが、廃止されたものを使用するよりもこれを行うためのより良い方法があることを願っていますスレッド一時停止メソッド。私はプレイヤーがコードを書く方法を変更することにオープンですが、決定ループを書くことを混乱させたり面倒にしたりせずに一時停止フラグのチェックをユーザーから隠しながらそれを行う方法を思いつきません。

4

2 に答える 2

0

「スレッドを一時停止」することはできず、プレーヤーが「うまくプレイ」してフラグなどをチェックするという要求に従うことを期待することはできません。別のスレッドを中断することはできますが、スレッドで実行されているコードは簡単に回復できます。これ。したがって、制御スレッドが制御を保持する方法が必要です。

スレッドが何をしているのかを心配する代わりに、次のことができます。

  • プレーヤーのスレッドにアクションを返す最大時間を与え、時間内に戻らない場合は、「デフォルトのアクション」を実行します
  • 彼らが計算に費やした時間を記録し、彼らがより頻繁に彼らに電話をかけるのは彼らがより少ない時間を使うかなどです

これらのタイプの懸念のほとんどは、java.util.concurrent図書館によって提供されます。チェックアウト:

于 2012-08-24T03:07:03.827 に答える
0

現在のスレッドを「一時停止」する場合は、java.util.concurrent.locks.LockSupportが役立ちます。他のスレッドを一時停止したい場合は、Java設計の範囲外だと思います。一時停止せずに、別のスレッドに割り込むか、フラグを設定することしかできません。

于 2012-08-24T02:55:45.263 に答える