今更ながらRobocodeっ!

いよいよ冷え込んできて冬っぽくなってきました。
ようやく師走を実感しているエンジニアMです。



さて、今回はRobocode(ロボコード)です。


Robocodeってなに?


公式サイト

Java言語でプログラミングしたロボット同士を戦わせることができるプロジェクトです。

IBMのソフトウェア・エンジニアMathewNelson氏によって発案され2001年に発表されました。
もう、随分昔の話ですね。


なぜ、いまごろRobocodeなのか?

それは社内で流行っているからです!!

社内のエンジニアだけの勉強会のお題としてみんなで
ライブコーディングしながらロボットを作り戦わせています。




どうやるの?


まずは公式サイトからDownloadに進み、setup.jarをダウンロードします。
適当な場所に置きインストールを行います。

 java -jar robocode-setup.jar
 
インストールしたディレクトリに「robocode.sh」というファイルがあるので
実行することにより起動することができます。


メニューの「Robot」を選択し、「Source Editor」でRobotを作るための
「Robot Editor」が起動します。
「Robot Editor」の「File」-「New」-「Robot」と進めて
ロボット名を決めてパッケージ名を決めるとデフォルトロボットの完成です!


さてここからがいよいよロボット作成の本番です。
最初はたった数行のプログラムで作られているロボットを
自分の好きなようにカスタマイズしていきます。


ロボットプログラム


ロボットの見た目は戦車です。
ロボットは「本体」「砲台」「レーダー」で構成されています。
それぞれが独立して動くことができます。

ロボットは基本的な動きをrunメソッドに記述し、
何かが起こった時に発生するイベントをトリガーとして動作を行う、
というのが基本的な動きになります。

下記はデフォルトロボットのrunです。
100前に進む
砲台を右に1回転
100後ろに進む
砲台を右に1回転



 public void run() {
  // Initialization of the robot should be put here

  // After trying out your robot, try uncommenting the import at the top,
  // and the next line:

  // setColors(Color.red,Color.blue,Color.green); // body,gun,radar

  // Robot main loop
  while(true) {
   // Replace the next 4 lines with any behavior you would like
   ahead(100);
   turnGunRight(360);
   back(100);
   turnGunRight(360);
  }
 }



代表的な命令とイベントを書きます。

【メソッド】
ahead(double distance) //ロボットを前に進めます
back(double distance) //ロボットを後ろに進めます
scan() //他のロボットを探します
fire(double power) //弾丸を発射します
turnLeft(double degrees)  //ロボットを左回転させます
turnRight(double degrees)  //ロボットを右回転させます
turnGunLeft(double degrees)  //砲台を左回転させます
turnGunRight(double degrees)  //砲台を右回転させます
turnRadarLeft(double degrees)  //レーダーを左回転させます
turnRadarRight(double degrees)  //レーダーを右回転させます


【主なイベントメソッド】
onBulletHit(BulletHitEvent event)     //敵のロボットに弾が当たった(命中)時に呼び出されます
onScannedRobot(ScannedRobotEvent event)      //敵のロボットを発見した時に呼び出されます
onHitByBullet(HitByBulletEvent event)    //ロボットに弾が当たった(被弾)時に呼び出されます
onHitRobot(HitRobotEvent event)   //ロボットが他のロボットに衝突した時に呼び出されます




レッツバトル!

ロボットを作成したらいよいよ対戦です。



複数のロボットが同時に戦うバトルロワイヤル方式のため
単純な結果にはなりにくく、そこがより難しさを上げているようです。
ひたすら逃げまくるのもよし、手当たり次第突撃していくのもよし。
戦い終えたら反省をもとにまたロボットをバージョンアップさせて戦わせる、
ロマンですね。

おわりに

社内で大会を開いたところ僕は惨敗でした・・・。
楽しみながらプログラムを学ぶことができ、
さらに人のコードを解析する良い機会にもなるため社内学習としてもなかなか使えます。
歴史があるので既に先人たちの知識は豊富にあります。
そこから学ぶこともできますし、あえて見ないで自分で研究していくのも楽しいものです。

今後も社内で大会開くそうなので強そうなロボット作られた方はぜひ戦ってください!




トンガルマンWebサイト
https://tongullman.co.jp/index.php
facebook
https://www.facebook.com/Tongullman

0 件のコメント:

コメントを投稿