先日から、私はAIプログラミング対戦ゲーム「CodeBattlerAce」の開発を進めてきました。
前回に進捗報告した時には、コードエディタのみの紹介でしたが…。
今回は、もっと良いお知らせができますよ!
なんと…CodeBattlerAceがリリースできるところまで完成してしまいましたっ!
開発期間は、ちょうど「7日」になりますね。
もっと時間がかかるかと思ったのですが…。
予想以上に開発が順調に進みまして、無事完成までこぎつけることができました。
そこで、せっかく完成したアプリケーションですので…。
ここで公開したいと思います。
ぜひとも一人でも多くの方にプレイしてもらいたいですね。
今回の記事では、CodeBattlerAceの基本的な遊び方とダウンロード方法について解説します。
Contents [hide]
CodeBattlerAceとは?
CodeBattlerAceというのは、私が開発したJavaFXアプリケーションです。
ロボット戦車の動きを制御するプログラム(AI)をプログラミングして対戦させるゲームになります。
プレイヤーは、16×16のグリッド上にプログラム(コード)を記述していきます。
コードというのは、大きく分けて「行動」「取得」「計算」「条件」「制御」の5種類になります。
これらのコードを自由に組み合わせて、任意の動きを作り出します。
作り上げたプログラム(AI)は、他のプログラム(AI)と対戦させることができます。
その対戦結果によって、各プログラムのレーティングが変化します。
レーティングは、高ければ強く、低ければ弱い、ということを表します。
できる限り強いプログラム(AI)を作り上げることが、このゲームの目的の1つとなります。
CodeBattlerAceのダウンロード
CodeBattlerAceのダウンロードは、以下のリンク先になります。
ZIPファイルとなっていますので、ダウンロード後に解凍してください。
解凍後にできる「CodeBattlerAce」フォルダを、任意の場所に移動してください。
ちなみに、主な動作対象となるOSはWindows/Mac/Linuxです。
AndroidとiOSでは動作しませんのでご注意ください。
CodeBattlerAceの実行
CodeBattlerAceは、JavaFXで作成しています。
そのため、このアプリケーションを実行するためにはJavaの実行環境が必要になります。
もしJavaをインストールしていない場合には、お手数ですがインストール作業をお願いします。
以下のリンク先のページから、Javaの実行環境をダウンロードできます。
Javaをインストール後、「CodeBattlerAce」ディレクトリにある「CodeBattlerAce.jar」をダブルクリックすると起動するはずです。
CodeBattlerAceの基本操作
それでは、CodeBattlerAceの基本的な操作方法について解説します。
コードエディタ
CodeBattlerAceを起動すると、まず以下のようなコードエディタ画面が表示されます。
この画面上で、あなたはプログラム(AI)を作成していきます。
新規ファイルの作成
新規ファイルを作成するには、メニューの「File」→「New」をクリックする、または「Ctrl+N」を押します。
すると、以下のような画面が表示されます。
画面中央のテキストフィールドに、あなたが作成したいファイルの名前を入力します。
ロボットファイル(通常のファイル)を作成したいなら拡張子を「.robot」、ファンクションファイルを作成したいなら拡張子を「.function」にします。
この時に、「.」をファイル名の間に入れるとディレクトリ分けができます。
例えば、ファイル名を「sample.Hello.robot」とすると、「sample」ディレクトリの下に「sample.Hello.robot」を作成します。
基本的に、ファイル名には「ID」を表す文字列を最初に付けてください。
私の場合なら「suzushinlab」を先頭につけて、「suzushinlab.Hello.robot」といった具合です。
あなたなりのIDを考えて付与してください。
ここでは、例として「sample.Hello.robot」を作成することを想定しています。
「sample.Hello.robot」と入力してから、Enterキーを押してください。
もしくは「Create」ボタンをクリックしてください。
プログラミング
ファイルを作成すると、Nameの欄が「sample.Hello.robot」と表示されていますね。
この状態で「sample.Hello.robot」が編集可能になります。
プログラムの入力方法についてですが…。
まず、コードを入力したい位置をダブルクリックします。
すると、以下のようなコード入力画面が表示されます。
テキストフィールドに、あなたがその位置で実行したいコードを入力します。
文字を入力するたびに、利用可能なコードのフォーマットが表示されます。
コードを入力後、Enterキーを押して確定です。
ちなみに、間違ったフォーマットで確定しようすると、エラーになりますので注意してください。
ここでは、「前進」するコードである「ahead」を使ってみます。
(1,0)の位置をダブルクリックしてコード入力画面を表示後、テキストフィールドに「ahead 200 1 0 0 0」と入力してください。
これは、「200前進する。その後、ポインタを(+1,0)する。」という意味になります。
同様にして、(2,0)の位置に「back 200 1 0 0 0」、(3,0)の位置に「return 1 0 0 0 0」を入力してください。
それぞれ、「200後退する。その後、ポインタを(+1,0)する。」、「1を返す。」という意味になります。
ロボットファイルの場合は、returnを実行すると「main」コードの位置にポインタが移動します。
ファンクションファイルの場合は、returnを実行すると、その返り値によってポインタの移動先を変えられます。
以上のようにコードを入力すると、以下のような状態になりますね。
このプログラムは、予想がつくように「200前進して、200後退する。」という動きを繰り返すものです。
ファイルの保存
ファイルの保存は、メニューの「File」→「Save」を選択、または「Ctrl+S」を押します。
効果音がなれば保存が完了です。
ファイルの保存先は、「CodeBattlerAce.jar」と同じディレクトリに「data」ディレクトリが作成されます。
ロボットファイルは、その中の「robots」ディレクトリになります。
ファンクションファイルは、その中の「functions」ディレクトリになります。
この例の場合では、「data/robots/sample/sample.Hello.robot」となります。
Head-On Targeting
それでは、もう1つロボットファイルを作成してみましょう。
新規ファイルを作成して、そのファイル名を「sample.HeadOnTargeting.robot」とします。
そして、コードを以下のように入力してください。
(1,0): getHeading heading 1 0 0 0
(2, 0): e.getBearing bearing 1 0 0 0
(3, 0): getGunHeading gunHeading 1 0 0 0
(4, 0): add heading bearing angle 0 1 0 0
(4, 1): sub angle gunHeading angle -1 0 0 0
(3, 1): normalize angle angle -1 0 0 0
(2, 1): turnGunRight angle -1 0 0 0
(1, 1): fire 3.0 -1 0 0 0
(0, 1): return 1 0 0 0 0
これは、「Head-On Targeting」という攻撃のアルゴリズムになります。
敵のいる位置に向かって弾丸を発射するプログラムです。
getHeading、e.getBearing、getGunHeadingはそれぞれ、「自機の方向」「敵との相対角」「自機の砲塔角」を取得する取得系コードです。
add、sub、normalizeはそれぞれ、「加算」「減算」「正規化」をする計算系コードです。
turnGunRight、fireはそれぞれ、「砲塔を右回転」「弾丸を発射」する行動系コードです。
対戦
それでは、さきほど作ったロボットファイル同士を戦わせてみましょう。
対戦画面を表示するには、メニューの「View」→「Battle」を選択する、または「Ctrl+B」を押します。
「設定」タブでは、対戦の設定を行います。
Red、Blueのそれぞれにロボットファイルを設定します。
右側にある「Select」ボタンを押すと、ファイル選択画面が表示されます。
対戦させたいロボットファイルを選択してください。
その後、各ラウンド数、試合数、FPSを設定します。
それぞれ、「Round Num」「Match Num」「FPS」に対応しています。
スライダーを動かして任意の値にしてください。
設定が完了したら、「Battle Start」ボタンをクリックしてください。
バトルが開始すると、自動的に「Battle」タブが選択されます。
「Battle」タブでは、バトルの様子がリアルタイムに更新されます。
各ロボット戦車と弾丸、そしてデバッグ画面が表示されています。
どちらかのロボット戦車のHPが0になるとラウンド終了。
指定したラウンド数が終わると、1試合が終了。
指定した試合数が終わると、バトルが終わります。
バトルの最終結果は、「Result」タブに表示されています。
各ラウンドで、勝利した側のロボットファイルのレーティングが上がり、逆に敗北した側のロボットファイルのレーティングは下がります。
何度も対戦していると、レーティングがある値で安定してきます。
それが本来のレーティングとなります。
より正確なレーティングを計算するために、色々な種類のロボットファイルと多くの試行回数を繰り返してください。
ランキング
CodeBattlerAceでは、レーティングを基準にしたランキング画面を用意しています。
ランキング画面を表示するには、メニューの「View」→「Ranking」を選択する、または「Ctrl+K」を押します。
最初に表示されているのは、CodeBattlerAceを起動した時点で存在しているロボットファイルのランキングです。
「Update」を押すと、最新のランキング情報に更新します。
何度かバトルをしたあとに更新すると良いでしょう。
画面上にあるテキストフィールドは検索用です。
入力された文字列を名前に含むロボットファイルのみを検索して表示します。
ちなみに、「Overall」は全てのロボットファイル、「Small」はSサイズのロボットファイル(コスト256以下)、「Medium」はMサイズのロボットファイル(コスト512以下)、「Large」はLサイズのロボットファイル(コスト1,024以下)を対象にしたランキングとなります。
できるだけ小さいコストで、強いロボットファイルを作成することを目標にすると良いかもしれませんね。
まとめ
今回の記事では、AIプログラミング対戦ゲーム「CodeBattlerAce」の遊び方について、簡単にですが解説してみました。
いかがでしょうか?
何となく雰囲気がつかめましたでしょうか?
このゲームでまず重要となるのは、利用可能なコードを把握することでしょう。
アシスト機能がありますので、コードのフォーマットは理解しやすいですよね。
それぞれ試してみて、どんな挙動をするのか確認してみましょう。
各コードについての解説は、後日記事にまとめる予定です。
もう少々お待ちください。
せっかく作ったゲームアプリケーションですので…。
一人でも多くの方に遊んでもらいたいですね〜。
完全無料でプレイできますので、ぜひあなたもダウンロードしてみてはいかがでしょうか?
CodeBattlerAceは、私が作成した本格的なJavaFXゲームアプリケーションです。
ロボット戦車の動きを制御するプログラム(AI)をプログラミングして、他のプログラム(AI)と対戦させるゲームです。
完全無料で遊べますので、ぜひダウンロードしてみてください。
ファイルのダウンロード先は以下のリンク先になります。
簡単な遊び方の解説記事は以下のリンク先です。