アルゴリズムの作成(V1_1)

※V1_0で作成したプレイヤーファイルはV1_1でも問題なく動きます。

アルゴリズム作成の基本

ダウンロード頂いたプロジェクト中には上図のようにサンプルスクリプトが含まれています。

SampleAIにはJavaScript版とC#版の2つを用意しています。

まずはこの2つのうちから自分が使いたい言語版の方を複製して自分用のスクリプトファイルを作りましょう。

複製は選択してCtrl+Dで可能です。

 

下記(※コードはjavascriptの場合を参考にしています。C#をご利用の方は適宜読み替えてください)のStart関数内部のwepon_Front,wepon_Middle,wepon_Backの変数の値を編集することで前方、側方、後方の砲門の種類を選択できます。

	function Start()
	{
		// 武装選択(Startのみで設定可能)
		// - : Shot_Canon-> 近距離, Shot_ShotGUN-> 近距離散弾, Long_Canon-> 遠距離, Long_ShotGUN-> 遠距離散弾
		wepon_Front = BaseAI.ShotType.Shot_ShotGUN;
		wepon_Middle = BaseAI.ShotType.Shot_Canon;
		wepon_Back = BaseAI.ShotType.Long_ShotGUN;

		Init(playerName, playerNo);
	}

自艦の行動を制御するには下記DecisionCommand関数を編集してください

最終行のsuper.DecisionSend ();以外(C#ではbase.DecisionSend();)は自由に編集していただけます。

	protected override function DecisionCommand ()
	{


		//最後のここは変更禁止
		super.DecisionSend ();
	}

 

具体的には上記関数中のDecisionSend();の前までに参照可能パラメータを基に

自艦の動きを決定する9つの変数を決定していただくだけです。

 

	/// ■■■■■設定パラメータ■■■■■
	/// 
	///- 移動目標座標
	///- : xz(0.0)が中心点
	/// 		float go_x = 0;	//X座標
	/// 		float go_z = 0;	//Z座標
	/// 
	/// - 近距離射撃の射撃角度(船首方向を0として右+,左-,degree指定)
	/// 		float shot_F_angle = 0;	// 前方砲台 (射撃可能角 -100 ~ +100)
	/// 		float shot_M_angle = 90;	// 中央砲台 (射撃可能角 +45 ~ +135, -45 ~ -135)
	/// 		float shot_B_angle = 90;	// 後方砲台 (射撃可能角 +80 ~ +180, -80 ~ -180)
	/// 
	/// - 遠距離射撃の攻撃目標座標
	/// 		float arrow_x = 0;	//X座標
	/// 		float arrow_z = 0;	//Z座標
	/// 
	/// - 停泊モードフラグ(座標原点(0,0)から距離5以内なら停泊可能)
	/// 		bool  anchorage = false;
	/// 
	/// - 回数限定特殊効果(3回限定、持続時間10秒)
	/// - : 0-> 使用しない, 1-> HP20回復&移動速度2x, 2-> 連射速度2x, 3 -> ダメージ0
	/// 		int effect = 0;
	/// 
	/// ■■■■■参照可能パラメータ(Read Only)■■■■■
	/// 
	/// - プレイヤーの現在の座標
	/// 		float now_x;
	/// 		float now_z;
	/// 
	/// - プレイヤーが現在向いている方向(単位ベクトルの成分)
	/// 		float now_dir_x;
	/// 		float now_dir_z;
	/// 
	/// - 敵の現在の座標
	/// 		float enemy_x;
	/// 		float enemy_z;
	/// 
	/// - 敵が現在向いている方向(単位ベクトルの成分)
	/// 		float enemy_dir_x;
	/// 		float enemy_dir_z;
	/// 
	///  - プレイヤーの現在のHP
	/// 		int hitpoint;
	/// 
	/// - 敵の現在のHP
	/// 		int enemy_hitpoint;
	/// 
	/// - ゲーム経過時間
	/// 		int now_time;
	/// 
	/// - 出兵総数(死亡含む)
	/// 		int soldier_send;
	/// 
	/// - 死亡兵数
	/// 		int soldier_killed;
	/// 
	/// - 敵出兵総数(死亡含む)
	/// 		int enemy_soldier_send;
	/// 
	/// - 死亡敵兵数
	/// 		int enemy_soldier_killed;
	/// 
	/// - 現在生存している敵兵の中で最も古いものの番号(0~)
	/// - 生存敵兵がいない場合-1
	/// 		int live_enemysoldier_num;

 

右の艦と左の艦でワールド座標は異なりますが、

本体側プログラムで反転処理させているためどちら側の艦でもアルゴリズム自体は同じになります。

詳細な座標設定、初期位置、方向などは仕様を御覧ください。

関数DecisionCommand () はゲーム時間1秒毎にコールされます。

また、DecisionCommand () 外の編集可能な場所に自分のアルゴリズムの中間処理用の

変数、関数を定義することは自由です。

 

使用可能クラス

     クラスに関しては下記の計算用クラスのみを利用してください。

     Mathf, Random, Vector2, Vector3

     そのほかに使用したいクラスがございましたらこちら(skype2@usanavi.jp)へメールするか

     もしくはtwitterで金田(@HiroshiKanada)までご質問ください。

 

禁止事項

     プレイヤープログラムの上の部分には、変数の定義プログラム

     下の部分にはゲームプログラム本体への通信プログラムがありますが

     それらのプログラムの内容には手を加えないでください。

     プログラムの中央部分が変更可能なアルゴリズムプログラムの部分です。     

     また、アルゴリズムプログラムから、 プレイヤープログラムの入出力以外の他のプログラムのパラメータに

     直接アクセスするようなプログラムを書くことは禁止させていただきます。

     プログラム内に送られてくる変数だけを元に行動を決定してください。

     第一大会はアルゴリズムの中での乱数の使用を禁止していましたが

     今回はそのような制限はありません。