卒業証書のトピックを選択する際に、実用的なものを作成したいという要望が考慮され、トピックの選択に影響を与えました。 AIタンクプログラミング競技会を開催するためのプラットフォームを開発することが決定されました。 一般に、このアイデアは新しいものではなく、そのようなことはすでに行われています(たとえば、 http://robocode.sourceforge.net )。 しかし、戦車が選ばれた理由はいくつかあります。
- これらの同じタンクは、卒業証書の理論的部分のプラットフォームとして機能しました:オブジェクトを管理するタスクに関連したGPの研究
- 上で述べたように、私は自分のものをエンコードし、プロトコルを開発し、サーバーとクライアントをプログラムしたかったのです。
- OpenGLを実際に使用する
- C11を試す
ここで何度も議論されてきたので、進化的プログラミングについては語りません。さらに、卒業証書を書いた後に再びそれを記述することは喜びではありません。
他の実装とは異なり、私の戦車は3Dです。 高さマップを持つ外部ファイルから読み取られる地形を走行します 。 また、計画は少なくとも多少現実的な物理学でしたが、これは十分な時間とエネルギーではありませんでした。
プロトコル
通信には、UDP経由でバイナリプロトコルが使用されます。 UDPはなぜですか? メッセージベースのプロトコルであるため、メッセージの境界を保持します。 これは、データが送信されたのとまったく同じ部分に来ることを意味し、ネットワーク部分を大幅に簡素化します。 時間の不足を考えると、これは、私の意見では、合理的な決定です。 たとえば、UDPの代わりにSCTPを使用できます。 ただし、Windowsでは実装されておらず、開発はこのOSで行われました。
プロトコルはパケットで構成され、各パケットはidで始まります。 したがって、パケットのサイズは、多くの場合、事前に-最初のバイトでわかっています。 可変長のパッケージの場合、パッケージ本体に静的部分が提供され、これによりパッケージ全体のサイズを決定できます。
コードでは、パッケージはアラインメントが無効なC構造体で記述されています。
コンポーネント
Tanchikiは、ネットワークサーバー、テストクライアント、「ジェネティック」クライアント、およびビューアプログラムで構成されています。
サーバーはリクエストを処理し、通知を送信し、すべての計算を実行します。
テストクライアントはデバッグ用です。 標準入力からタンク制御コマンドを読み取り、サーバーに送信します。 たとえば、pi(出力増加)-エンジン出力の増加、s(撮影)撮影、ll(左向き)-銃を少し左に回します。
「遺伝子」クライアント- スラッシュ/ A言語で遺伝子タンク制御プログラムを起動します。 これは、GPとVMの実行用に特別に設計された言語です。 VMコマンドセットは、タンク固有のコマンドで拡張されました。
スラッシュ/ Aのプログラム例:
input/ # gets an input from user and saves it to register F 0/ # sets register I = 0 save/ # saves content of F into data vector D[I] (ie D[0] := F) input/ # gets another input, saves to F add/ # adds to F current data pointed to by I (ie D[0] := F) output/. # outputs result from F
ビューアプログラムは、戦闘を監視するように設計されています。 WASD、F、Vを使用して地図の上に舞い上がり、マウスでカメラを回転させることができます。
開発中、いくつかのテストクライアント(被害者の戦車と勝利した戦車)と視聴者は、主要なデバッグツールの一部でした。
画面:
C11
C11は多くの異なる機能を追加しました。 以下は私にとって有用でした:
- 型に依存しないマクロ(mathおよびmath.h)
- マルチスレッド
また、C99の可変長配列と指定された初期化子が役に立ちました。 まあ、スコープの先頭だけでなく変数を宣言する機能も非常に便利でした。
Cパーツをビルドするために、ライブラリ、言語、環境に関する優れたヘルプを備えた優れたpellesc.deコンパイラを使用しました。
C ++パーツを構築するために、GCC(MinGW)が使用されました。
ソースへのリンク: http : //code.google.com/p/morrigan 残念ながら、私はライセンスにあまり詳しくないので、2番目のプロジェクトでは「その他のオープンソース」を選択します。 どういうわけか、私は間違いなくある種の教育プログラムを読みます。
原則として、ソートできない依存関係はWinsockのみです。 なぜモリガンがウィキなのか 。 最初から、私はこのプロジェクトを女性の名前と呼ぶことにしました。そして、アイデアは戦争の女神について来ました。
LaTexで卒業証書を作成しましたが、後悔することはなく、皆さんにアドバイスします。 これは、特にLaTexで実験室用のプロトコルを準備して1年が経過した後、恐ろしいことではありません。 問題が発生した場合 、googleが私を救いました(これは主にtex.stackexchange.comで発生しました )。 フレーム内のページ番号、図や表のキャプション、それらへのリンクを苦労して手動で並べた友人を見て、私は再び決定の正しさを確信しました。
全体的に、私は満足しています。 ユビキタスなOOPやプログラムから少し気を散らすことができたので、自分の喜びのために。
参照資料
- www.gamedev.ru-風景、標高マップ、衝突検出に関する記事
- インタラクティブ3D環境での衝突検出 -衝突検出に関する本全体
- www.libsdl.org-グラフィックス、サウンド、入力デバイスを操作するためのクロスプラットフォームライブラリ
- 標準 C11
- スラッシュ/ライブラリ
- Pelles Cヘルプ
- c.learncodethehardway.org-興味深いCチュートリアル(知っている人でも)と素晴らしいヘッダーdebug.h