物理ロボコード

この資料は、もともと記事「Robocodeの最初のステップ」のセクションとして準備されましたが、私はそれを提出することにしました。 既に大きな初期記事のサイズが大幅に増加したため、基本的なものではなく、最初のステップの実装には必要ありません。 すぐに2番目のステップに興味を持つようになった場合、または徐々にそれに成長した場合は、猫をお願いします。



単位



最初に、ユニットについて説明します。



起源は、伝統的に、左下隅にありますが、角度は異常です。 0ラジアンは北を指し、次に時計回り:Pi / 2-東、Pi-南、(Pi * 3)/ 2-西、2 * Pi-北。

画像



タンクの性能特性



ロボットは、ボディ、タワー、レーダーの3つの部分で構成されています。これらの回転は互いに依存しています(ただし、自動圧縮のフラグを設定できます)。 ロボットの性能特性は次のとおりです。



TTXでは、3つのトリックに注意する必要があります。

  1. ゼロを通過する場合、特別な規則が適用されます。 まず、コースの必要な部分であるタンクの速度が低下し、次に残りが加速されます。 したがって、タンクの速度が0.8で、彼が後退するコマンドを与えた場合、結果の速度は-0.6(または反対方向では0.6)になります。 ブレーキ時間はストロークの0.8 / 2 = 0.4、加速する残り時間は(1-0.4)= 0.6、速度は1 * 0.6 = 0.6です。
  2. 速度がゼロで、3つのコンポーネントすべてが同じ方向に回転する条件では、レーダーは45 + 20 + 10 = 75度回転できます。 レーダーが船体とタワーから反対方向に回転する場合、ターンごとに45-20-10 = 15度しか回転しません。
  3. タンクの部品の回転の自動補正は、回転の最大角度に影響しません。 たとえば、タンクにすべてのパーツのターンの自動補正のフラグが設定されている場合、レーダーの方向は90度で、機体を右に10度回転するコマンドが与えられた場合、レーダーの方向は90度のままになります。 体を回すことに加えて、レーダーを左に45度回転させるコマンドも与えられた場合、レーダーの方向は90-(45-10)= 65度になります。




衝突



ゲームでは次の衝突が発生する可能性があります。





計算ループ(Robocode処理ループ)



ゲームの計算サイクルは次のとおりです。

  1. ゲームのプレゼンテーションを再描画します。
  2. すべてのロボットは、独自のスレッドでコマンドが発行されるまでコードを実行し、その後スレッドは一時停止します。
  3. 時間は更新されます(時間=時間+ 1)
  4. すべての弾丸が移動され、衝突が計算されます。 これには、新しい弾丸のショットが含まれます。
  5. すべてのロボットは、タワー、レーダー、車体、加速度、速度、位置の順に移動します。
  6. すべてのロボットがスキャンします。
  7. ロボットスレッドの実行が再開します。
  8. イベント処理は、ロボットのスレッドで発生します。


ここでは、よくある間違いに注意する必要があります-銃が回転する前に弾丸が発射されます(手順4および5を参照)。 したがって、ショット時に銃を回転させるのではなく、その前にティックを回転させる必要があります。



これについて(記事「Robocodeの最初のステップ」を含む)、Robocodeに関する基本的な知識は終わり、原則として、あなたは最初のロボットのプログラミングを始める準備ができています。 引き続きロボットで読むことができます。PMで質問したり、Robocodeの一連の記事を続けることに興味があることをコメントで確認することもできます。



All Articles