2

IBMには、RoboCodeと呼ばれる無料の学習Javaプログラムがあります。このプログラムでは、2D空間で戦闘を行うカスタムロボットを作成できます。そのようなロボットをサポートする環境を書きたいのですが、どのパターンやデザインを使うべきかわかりません。各ロボットはスレッドです。各スレッドには、JREによって一定の(不確定な)実行時間が与えられます。ロボットワールドエンジンは、プレーヤー/ロボットのリストを作成することから始め、次に各プレーヤーが好きなことを順番に実行できるようにするループに入ります。前進、左折、北西の角に向かって発射します。各ロボットには、関心のあるイベントも通知されます。敵または複数の敵が範囲内にいる、弾丸が当たったなどです。

イベントリスナーでもある(プロデューサーでもある)スレッドの処理の組み合わせは、私を混乱させます。ゲームエンジンにはまだまだあるようです。いくつかの一般的なアイデアでさえ役立つでしょう。

4

1 に答える 1

3

私はRobocodeエンジンの開発者です。私は 2 年前に参加し、ほとんどの時間を Robocode エンジンのリファクタリングに費やしました。その間、理解が深まるにつれていくつかの記事を書きました。それらのすべてが最新であるとは限りません。

それにはいくつかの難しい部分があります。

1) 同期: ロボットと戦闘の間でメッセージを「送信」することで解決しました。UI とその他のコンポーネントの更新はプロデューサー/コンシューマーであり、それぞれの新しい状態に関する変更不可能なメッセージ (ゲーム ティック)

2) 悪意のあるコードのサンドボックス化 (私たちのコードから学びましょう)

3) エンジンが進化するため、API とルールの設計は長年にわたって一定であり、古いロボットは同じままですが、以前と同じように実行してスコアリングする必要があります。ここでいくつかの問題にぶつかりました。たとえば、API のクラスを独自のロジックで使用する人がいます。これは意図したものではありません。クラスを final にし、保護されたコンストラクターを使用する必要がありました。しかし、今は既存のロボットを壊さないように変更することはできません。

Robocodeのイベントに関する質問について。それらはすべてティックごとに発生し、EventManager (優先キュー) に入力してから、ロボットが 1 つずつプルします。コールは、イベントごとにロボットの実装にディスパッチされます。サブスクリプションは自動で、実装は常に基本クラスに存在し、ロボット クラスでオーバーライドできます。ロボット用のシングルスレッドがあります。

ところで: 次の大きなことは、カスタム/プラグ可能なルールを可能にする Robocode の拡張のようです。デザインチャレンジです。Robocode プロジェクトに参加して、私たちを助けてくれる賢くて勤勉な人を探しています。興味がある ?

于 2010-03-09T11:01:51.817 に答える