CodeCraft-プログラマーの戦い







CodeCraftは、 プログラミングゲームのジャンルに属します。 あなたの多くは、おそらくHabraWarsプロジェクトまたは他のプログラミングゲームについて知っています。 つまり、多くの人々の間でプログラマーの戦いのための環境を書きたいという欲求が生じました。 たとえば、私はこの考えを持っていました。

彼女の特徴的な機能:





なぜプログラマーの戦いの環境はそれだけであると決めたのですか?



はい、私は常に単一のユニットではなく、戦略の競争として精神的な決闘を想像していました。 そうでない場合、戦略ではなく動作がプログラマーによってプログラムされている可能性が高くなります。

軍隊の行動アルゴリズムを見ると、はるかにカラフルです:敵を系統的に移動させる指骨の列、前方に突進するユニットの群れ、速いユニットによる巧妙な操縦、後方からの予期しない攻撃、環境のおかげでより強い敵に対する古典的な勝利など 多くの点で、ゲームは歴史の教科書からの描画に触発され、軍隊のさまざまな支部とその動きの条件付きグラフィック画像がマークされています。 退屈なカップルでは、​​想像力がそれらを動かし、CodeCraftコンセプトを作成します。













物語





ゲームを作成するというアイデアは次のように思いつきました。私は誕生日を多様化しなければなりませんでした。 したがって、プロジェクトの作成を開始しました。 彼はこのアイデアを支持し、すぐにMad_Fishの開発に参加しました。 当初、ユニット管理はHabraWarsでの管理に少し似ていました。 プレーヤーは、ユニットを回転させ、前方に飛んで、充電されると撃つことができます。 違いは、単一の戦闘ではほとんど意味のないラムの可能性と、速度ではなく加速の制御にありました。 DRに招待されたすべての人に、プレーヤーと一緒に来るというタスクが与えられました。 つまり、フラッシュドライブに持ち込みます。 作成されたプレイヤーは非常に愚かであることが判明しました-勝者は、少なくとも自分で撃たず、彼らを叩きつけなかった人でした。 したがって、非射撃および不動のプレイヤーが時々非常に自信を持って勝ちました。 休日の後、私は雄羊や友好的な火などを避けることは、ゲームにとって面白くない日常的なことであることに気付きました。



シンプルさ





実際には、ユニット管理の極端な簡素化の必要性が明らかになりました。 したがって、興味深いものだけを書く機会が利用可能になりました。 EtalonAIライブラリーという、ユニットとユニットのグループの動作の標準的な実装を作成しました。

たとえば、コード



foreach (UnitPilot pilot in friends) <br> pilot.AttackClosest(); <br><br> * This source code was highlighted with Source Code Highlighter .







すでに適切な戦闘アルゴリズムです。 また、ユニットは、位置を維持する、特定の敵を攻撃する、指定された座標に飛行する、または注文を待つように注文できます。 ユニットには、それに近いユニット、ユニット、それを狙う敵のリストがあります。 また、すべてのユニットは友人と敵のリストで利用できます。

ユニットのグループを制御するために、分隊を作成できます。 この例では、10人の戦闘機の分遣隊が作成されます。



DestroyersSquad1 = new SquadronColonel(friends[0], game);<br> for ( int i=0;i<10;i++)<br> DestroyersSquad1.AddUnit(friends[i]); <br>







さらに、チーム全体を特定のポイントに送ることができます



DestroyersSquad1.GoToOrder( new GameVector(-3000, -2000)); <br>







「攻撃を通過する」ように命令することができます



DestroyersSquad1.AttackOrder( new GameVector(-3000, -2000)); <br><br>







フォーメーションのタイプ-ライン、長方形、ウェッジ、パック(フォーメーションなし)を指定できます。

DestroyersSquad1.SetFormationTypeLine(WidthBetweenUnits, AngleForward); <br>





独自の構築ジオメトリを作成することもできます。

また、最も近い敵を攻撃し、敵を突っ込む命令もあります(ところで、戦闘機で敵の巡洋艦を破壊するのは良いことです)



また、敵を探索することもできます-EnemyAnalyzingクラスは定期的に敵をクラスター化します-つまり、敵が艦隊を分割したユ​​ニットを簡単に見つけることができます



ジオメトリの操作も考慮されます-GameVectorベクトルクラスには回転のためのメソッドが含まれ、ベクトル数学演算子はオーバーロードされます。 千度を取得することを恐れずに角度を追加したり、差や角度間の距離などを見つけたりできる角度クラスがあります。 詳細-ドキュメントを参照してください。



もちろん、そのような程度の標準化は、特にクールなジェダイ・チャクノリの戦闘機であるユニットに固有の動作を作成する可能性を排除しますが、ゲームはイデオロギー的に戦略的です。 さらに、前述のように、ゲームとの相互作用には2つのレベルの抽象化があります。1つ目は高レベルで、プレイヤーは攻撃する場所または分遣隊が飛行する場所をどの順序で示すかです。 2番目のレベルでは、プレーヤーは直線加速度、ユニットの旋回加速度、およびショットの瞬間を直接示します。 したがって、ユニットは誕生日の前に制御されました。 悔い改めてチャック・ノリスを作る機会が残っていることがわかりました。



デバッグ





デバッグするにはいくつかの方法があります。









設定ファイルにより



プレイヤーの書き方



「Hello world」と適切なアルゴリズムを書くのに数分しかかかりません。 プレーヤーは、任意の.NET言語で作成できます。

これを行うには、次のものが必要です。



それがすべてで、ほぼ完全なガイドです。



詳細





ゲームはC#でXNAを使用して作成されたため、申し訳ありませんが、Windows専用です。 結局のところ、彼は彼の友人以外の誰にも見せたいとは思わずに書いたが、それでもC#は確かな便利さだ。 Mad Fishは現在、ゲームをLinuxに移植しています。

コントロールキー





おわりに





プロジェクトをさらに発展させていきたいと思います。 たとえば、人間が作成したグラフィックスなど。 Mad_Fishは現在CodeCraftをOpenGLに移植しており、Microsoftに依存すべきではないと言っています)

しかし、最も興味深いのは、もちろん、あなたが書いたプレイヤーをダウンロードすることです。 彼の戦術を見てください。 彼を倒す方法を見つけます。 プレイヤーを倒してプレイヤーを倒し、対戦相手が反応するのを待ちます。

ここで見知らぬ人をダウンロードして、プレーヤーを追加できます







参照資料







CodeCraftのゲームの記録。 参加者-プレーヤーの例





素敵なゲームを






All Articles