C-Robotsのメモ

// 俺りふぁれんす。

why? C-Robots

 C言語風プログラミング言語で最強のロボット(AI)を作るゲームです


・基本
 1000*1000Map
 ロボットは、ダメージを100以上受けると破壊される
 ロボッは移動・索敵・攻撃することができる。

・注意
 C言語風の文法だがwiki曰く『浮動小数点数、構造体、共用体、ポインタ、一部の制御構文などがない』

・ロボットの制御関数
 scan(索敵)
 cannon(砲撃)
 drive(移動)
 damane(ダメージ取得)
 speed(スピード制御)
 loc_x/loc_y(現在位置取得)


・角度はロボット向きではなくMAP依存
 右端から始まり(0,0)、左上(999,999)
  
   90
+------+
|180   |0
|      |
+------+
 270

・scan(角度,解像度)
 スキャンした範囲に敵がいないと"0"を返します。
 敵を発見した場合"範囲"を返します。
 角度は0-359
 解像度+/- 0-10(精度?)

・cannon(角度,範囲)
 角度0-359
 scan()の見える範囲0-359まで砲撃可能。
 最大0-700
 発射されると返り値として"1"を返します。
 リロード中は"0"を返す(?)
 (角度というのは砲台のこと)

・drive(角度,速度)
 方向は0(東)-360、速度は0-100
 (こいつは車体)

・damage(引数無し)
 返り値で現在の耐久値(0-99)をパーセントで返します。
 100%の損害は破壊されて動くことができません。

・speed(引数無し)
 現在のロボットの移動速度(0-99)を帰り値で返します。

・loc_x()、loc_y()
 loc_x()は、x軸(0-999)を返します。
 loc_y()は、y軸(0-999)を返します。
 どちらも引数はありません。

・rand (limit)
 0からlimitまでの乱数を返します、最高32767。

・その他関数

・sqrt (引数)
 引数から平方根を返します。

・sin (degree)
・cos (degree)
・tan (degree)
・atan (ratio)

・サンプル(チュートリアルから拝借)

1.(移動と旋回)
 drive(0,100);  /* 東へ100%の速度で移動 */
 drive(90,0);   /* 停止したまま90度曲がる */

2.(ダメージの活用)
 d = damage();       /* 現在のダメージ値をdに */
 ; ; ;               /* その他もろもろの処理 */
 if (d != damage())  /* もし、前の状態と違っていたら */
  {
	drive(90,100);    /* ロボットは攻撃を受けたか動けないかもしれないので移動します */
	d = damage();     /* そして現在のダメージ値をdへ */
 } 

3.(停止の判定)
 drive(270,100);   /* 移動なう */
 ; ; ;             /* その他処理 */
 if (speed() == 0) /* ロボットが止まっていないかチェック */
 {
	drive(90,20); /* 止まってたら別方向へ移動*/
 }

4.(索敵と砲撃)
 int angle,Range;
 angle = 0;
 while (angle < 358) {        /* angle(角度)が358よりも小さかったら */
	Range = scan(angle,1); /* レーダーでその角度で索敵して範囲(Range)へ*/
	if (40 < Range) {	/* もし範囲40内に敵がいたら */
		cannon(angle, Range);  /* その角度と範囲で攻撃 */
		angle = angle - 2; /* 調整 */
	}
 angle = angle + 1; /* 範囲内に敵がいなければ現在の角度+1加算 */
 }

・参考
 CROBOTS: C-Robots
 http://corewar.co.uk/crobots/

・使用ソフト
 CRobots 3D
 http://antru.ru/


inserted by FC2 system