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

アルゴリズム作成の基本

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

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

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

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

ファイル中に


	////////////////////// //ここからプレイヤー編集 //////////////////////

	~~
	////////////////////////////////////////////////////////////////////////////////////////

	//ここより下は編集禁止

	////////////////////////////////////////////////////////////////////////////////////////

という箇所がありますが、ここが今回皆さんに編集していただく部分です。

 

 

上記箇所の上部にある

// 初期設定パラメータ
// - 砲撃種(途中変更不可)
// - : 0-> 近距離, 1-> 近距離散弾, 2-> 遠距離, 3-> 遠距離散弾
private var shot_F : int = 3;	// 前方砲台
private var shot_M : int = 0;	// 中央砲台
private var shot_B : int = 1;	// 後方砲台

この部分で自艦に装備する砲台の種類を選択してください。

このすぐ下にある関数

 void  DecisionCommand (){

~(中略)~

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

で自艦の動きを制御するアルゴリズムを書くことになります。

具体的には上記関数中のDecisionSend();の前までに自艦の動きを決定する変数

/////////////////////////////////
// アルゴリズムによる設定対象パラメータ
/////////////////////////////////
// - 移動目標座標
private var go_x : float = 0;	//X座標
private var go_z : float = 0;	//Z座標
// - 近距離射撃の射撃角度(船首方向を0として右+,左-,degree指定)
private var shot_F_angle : float = 0;	// 前方砲台 (射撃可能角 -100 ~ +100)
private var shot_M_angle : float = 90;	// 中央砲台 (射撃可能角 +45 ~ +135, -45 ~ -135)
private var shot_B_angle : float = 90;	// 後方砲台 (射撃可能角 +80 ~ +180, -80 ~ -180)
// - 遠距離射撃の攻撃目標座標
private var arrow_x : float = 0;	//X座標
private var arrow_z : float = 0;	//Z座標
// - 停泊モードフラグ(座標原点(0,0)から距離5以内なら停泊可能)
private var anchorage : boolean = false;
// - 回数限定特殊効果(3回限定、持続時間10秒)
// - : 0-> 使用しない, 1-> HP20回復&移動速度2x, 2-> 連射速度2x, 3 -> ダメージ0
private var effect : int = 0;

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

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

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

上記の意思決定変数を決定するために参照することのできる情報は

////////////////////
// 参照可能パラメータ
////////////////////
// - プレイヤーの現在の座標
private var now_x : float;
private var now_z : float;
// - プレイヤーが現在向いている方向(単位ベクトルの成分)
private var now_dir_x : float;
private var now_dir_z : float;
// - 敵の現在の座標
private var enemy_x : float;
private var enemy_z : float;
// - 敵が現在向いている方向(単位ベクトルの成分)
private var enemy_dir_x : float;
private var enemy_dir_z : float;
// - プレイヤーの現在のHP
private var hitpoint: int;
// - 敵の現在のHP
private var enemy_hitpoint: int;
// - ゲーム経過時間
private var now_time : int;
// - 出兵総数(死亡含む)
private var soldier_send : int;
// - 死亡兵数
private var soldier_killed : int;
// - 敵出兵総数(死亡含む)
private var enemy_soldier_send : int;
// - 死亡敵兵数
private var enemy_soldier_killed : int;
// - 現在生存している敵兵の中で最も古いものの番号(0~)
// - 生存敵兵がいない場合-1
private var live_enemysoldier_num : int;

以上の通りです。

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

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

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

 

使用可能クラス

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

     Mathf, Random, Vector2, Vector3

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

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

 

禁止事項

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

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

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

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

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

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

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

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

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