ココを密かにロボコードのページにするとしよう。 右下のはココに住み着いてる亡霊です、外し方、普通に分からん。
進んだり

下がったり

左向いたり

右向いたり

玉発射

砲台を左に

砲台を右に

他にもレーダーのみを動かしたりするTurnRaderなんかもありますが基本的な動きとしては上記のものでOK。
*組み合わせる
public class SpinBot extends の文の後に AdvancedRobot と書き込み public
class SpinBot extends AdvancedRobot とすると、
命令をまとめて行うことが出来るようになる、しかしそのデメリットとして壁にぶつかったときにダメージを受ける。
命令をまとめる時の原則として命令文の頭にsetをつけ命令文の頭文字を大文字にする必要がある。
例えるなら
ahed(100);
100ピクセル前進する。

と
turnLeft(90);
90度左を向く

の2つを組み合わせるとこうなる。
ahed(100);
setTurnLeft(90);
そして動きは

となる。
もしAdvancedRobotでなければ。
上記の目的の場所までに移動するには「向きを変える」の実行の後に「移動」、と、2つの動作が必要になってしまい動きに無駄が生まれてしまう。
この命令を同時に行うのは非常に効果的で世間に存在する殆どの多くのロボットはAdvancedRobotである。
この辺までがロボコードでロボットを動かし基本的概要である。
robocode(ロボコードにおける基本的概要)
| Robocodeの処理ループ | 以下の順序でRobocodeは実行されます。
|
| Robocodeにおける時間と距離の測定 | |
|---|---|
| 時間 (t) | Robocodeの時間は"刻時(tick)"で計測されます。これは画面に表示されたフレーム数と等しいです。それぞれのロボットは刻時ごとに1ターンもらいます。1刻時 = 1ターン = 1フレームです。 |
| 距離の測定 | Robocodeの単位は基本的にピクセルで測定されますが、2つ例外があります。第1に、すべての距離は double の精度で測定されます。そのため実際には1ピクセルよりも少なく動けます。第2に、Robocodeは自動的に画面にあわせるようバトルを縮尺します。この場合、距離の単位は実際にはピクセルよりも小さくなります。 |
| ロボットの移動における物理的性質 | |
| 加速度 (a) | ロボットは 1 ピクセル / 刻時 の割合で加速します。ロボットは 2 ピクセル / 刻時 の割合で減速します。Robocodeはあなたのための加速度を、あなたが移動しようとしている距離に基づいて決定します。 |
| 速度の方程式 (v) | v = at 。速度はけして制限速度8を越えません。注意: 厳密には速度はベクトルですが、Robocodeでは単純にベクトルの方向をロボットのヘディングとしています。 |
| 距離の方程式 (d) | d = vt 。 |
| ロボット・大砲・レーダーの回転 | |
| ロボットの回転の割合の最大値 | (10 - .75 * abs(速度)) 度 / 刻時。移動が速いほど回転は遅くなります。 |
| 大砲の回転の割合の最大値 | 20 度 / 刻時。これはロボットの現在の回転の割合に加えられます。 |
| レーダーの回転の割合の最大値 | 45 度 / 刻時。これは大砲の現在の回転の割合に加えられます。 |
| 弾丸 | |
| ダメージ | 4 * 発射パワー。もし発射パワー > 1 なら、2 * (発射パワー - 1)追加されます。 |
| 速度 | 20 - 3 * 発射パワー。 |
| 発生する大砲の熱 | 1 + 発射パワー / 5。大砲の熱 > 0 なら発射できません。すべての大砲はララウンド開始時には熱を持っています。 |
| 命中すると戻るパワー | 3 * 発射パワー |
| 衝突 | |
| 他のロボット | それぞれのロボットはダメージを0.6うけます。もしロボットがこの衝突から離れていこうとしていたら、ロボットは停止しません。 |
| 壁 | AdvancedRobotsはダメージをMath.abs(velocity) * 0.5 - 1うけます(0未満にはなりません)。 |
例として基本的なロボットのソースコードをここに置く
package sample;
import robocode.*;
/** * MyFirstRobot - a sample robot by Mathew Nelson
* MyFirstRobot - Mathew Nelsonによるサンプルロボット
*
* Moves in a seesaw motion, and spins the gun around at each end
* 前後に行ったり来たりし、両端では大砲をぐるりと回転します。
*/ public class MyFirstRobot extends Robot { /*
*
* MyFirstRobot's run method - Seesaw
* MyFirstRobotのrunメソッド - シーソー
*/ public void run() { while (true) {
ahead(100);
// Move ahead 100 // 前方に100移動します。
turnGunRight(360);
// Spin gun around // 大砲をぐるりと回転します。
back(100);
// Move back 100 // 後方に100移動します。
turnGunRight(360);
// Spin gun around // 大砲をぐるりと回転します。 } }
/**
* Fire when we see a robot * ロボットを見つけたら発射します。
*/ public void onScannedRobot(ScannedRobotEvent e) { fire(1);
} /** * We were hit! Turn perpendicular to the bullet,
* so our seesaw might avoid a future shot. * 被弾しました! 弾丸に対して垂直になるように回転します。
* そうすれば私たちの前後移動は将来の攻撃を回避できるかもしれません。
*/ public void onHitByBullet(HitByBulletEvent e) { turnLeft(90 - e.getBearing()); } }
次にロボコードに大会の規約などを書きたいが日本語のページがほとんど存在しないので翻訳からはじまりそうな予感。
ウツミ代わりにやってくれ。
まだまだたくさんあるくぽ
論文
| ロボコードにおいての論文。私達はロボコードにより、JAVA言語の基本を学ぶと共にロボコードの歴史、そしてロボコードにおける高度な戦術を身につけることを目的とした研究をテーマにしました。まずはじめにロボコードを学ぶためにIBMのホームページからロボコードのデータを入手することから始め、それに伴いロボットのコード数を調べる事の出来るソースを入手することもしました。ロボットのコード数については後に述べることにします。まずはJAVA言語の技術知識習得から始まりました、JAVA言語は基本的にC言語と変わらず、むしろC言語よりも簡略化されたものとして捕らえると分かりやすいと思います、しかしその技術は奥が深くそれらを習得するのには労力が必要となります、その部分も兼ねてロボコードを学ぶと共に学びました。JAVA言語の根本を学んだら、まずは基本的なロボットを作ることから始めました、ロボットの基本命令の種類には3つあり、通常時の行動と敵を発見したときの行動と被弾したときの行動です。そしてロボットには大きく分けて3箇所に分かれた部位があります、まず砲撃するための砲台です、この砲台は砲弾を発射するものであり、砲弾の威力を任意で設定でき威力に応じて次弾の装填時間や砲台の熱量なども決まり、また対戦相手とのスコアにも大きく関わってきます。砲撃の命令文には「fire」を用います。次にキャタピラになります、このキャタピラによって方向を決め、進み、その速度なども決まります、このキャタピラは加速度などが関わっておりその度の運動量が重要となってきます、次にレーダーがあり、このレーダーに敵を捕捉したとき初めて敵を捕捉したときにとる行動、即ち攻撃命令へと移行するわけです。そしてこのレーダーを用いることによって敵の動きを予測する「線形予測」「円形予測」「振動予測」などの狙撃標準アルゴリズムを作成するのです。線形予測とはレーダーで敵を捕らえたときに敵の速度と向きと位置がわかります、この時に対戦相手が等速度運動をしていると仮定すると任意の時刻における位置が正確に予測できます、また自弾も認知しているので敵に攻撃があたる方向を二次方程式などを用いることによって求めることが出来ます。次に円形予測とは敵が円運動をしているとき線形予測とおなじようにレーダーで捕らえると敵の速度と向きと位置がわかります、そしてその以前の敵の以前の情報を保持していれば二点における速度がわかるため等円運動をしていると仮定すると任意の時刻における敵の位置がわかるために弾を撃つべき方向が求まるのです。ただし、線形標的合わせの時と同様に、砲台の回転時間を考慮に入れ補正する必要があります。また、Robocode において ロボットは正確には円運動をしません。少し前進して、少し回転、この繰りかえしです。この場合、二点での速度の垂線の交点はその軌道の中心ではないので注意が必要です。具体的には、二点での速度の向きの差が中心角であることと、二点の垂直二等分線が中心を通ることを利用して、中心と軌道を計算します。例を挙げると地球大気圏内でディアッカがバスターガンダムで砲撃をした際に大気圏内のビームの減衰率を計算に入れてなかったために敵を取り逃したと言うことと同じようなことです。次に振動予測とは敵が同じ位置を行ったりきたりしている場合にする予測でまた同じようにレーダーで敵の情報を手に入れることによって敵の折り返しの地点を割り出し、攻撃すべき方向決まります。まずこの「線形予測」「円形予測」「振動予測」を実装することを研究の第一目的にしました。次にカオス現象と呼ばれる現象を研究課題としました、このカオス現象とはロボットの基本的な命令文には手を加えずにその数値のみを変えることにより、ロボット自体の性能向上と対戦相手別の勝率をあげるという研究です。そこで冒頭に言ったロボットのコード数を調べるソースを用いてロボットのコード数を調べ、ロボット自体に格付けをしました、基本的にメガボットクラス、ロボットクラス、ナノボットクラス、ピコボットクラスとあり、さらにコード数を削ることによってフェムトボットクラスという新たなクラスを作り、極めてコードの少ないロボットでメガボットクラスの上位ロボットにこのカオス現象で勝利するという研究をしました。って、データ足りねこれ以上書くのまんどらくせぇえ、ちょっと後で資料あるときに書く核。 |