知的ゲーム「Robocode」でJavaのチャンピオンになろう:安藤幸央のランダウン(13)
「Java FAQ(What's New)」の安藤幸央氏が、CoolなプログラミングのためのノウハウやTIPS、筆者の経験などを「Rundown」(駆け足の要点説明)でお届けします。(編集局)
Robocodeの誕生
Robocodeは、Java言語でプログラミングする対戦型ロボットシミュレータです。あなたのプログラミングしたロボットを、世界中のプログラマが開発したロボットと戦わせ、優秀さを競うことができるのです。
アメリカではメカニックな手作りロボット同士を対戦させるロボット格闘大会「バトルボット」が盛んです。バトルボットの場合は、強靱(きょうじん)なロボットの筐体を作り上げなければならないので、それなりの製作費用と経験や技術力を必要とします。
一方Robocodeはコンピュータの中で、コードとコードが仮想的な空間の中で対戦するシステムです。制作費がかかったり、筐体が壊れる、けがをするといった危険性とは無縁なのです。
Robocodeは現在IBMに勤めるMathew Nelson氏が1995年にJavaと出合ったころに発案され、2000年ごろから作り始めたものです。「Javaは遅い」とか「Javaではゲームは作れない」といった誤解を解くことを意識して開発されたそうです。
Robocodeは2001年にIBM alphaWorksにて、公開されました。alphaWorksは1996年、当時IBMのインターネット事業社長であったJohn Patrick氏の一声で開設されたサイトです。alphaWorksは、IBMが開発中や研究中のコードをアルファ版の時点から多くの人に利用・活用してもらう意図で開設されました。alphaWorksでは、RobocodeのほかにもJava/XML 関連、Linux関連など、数多くの有益なプロジェクト、プログラムを知ることができます。
Robocodeは、すでに世界中のプログラマたち、延べ10万人以上がダウンロードし、楽しんでいるそうです。
Robocodeは、知的ゲームとしての楽しみと、企業や教育機関などでJavaを学ぶ教材としても注目されています。コツさえつかめば、子どもでも容易に扱うことができるそうです。
Robocodeが教育用途で用いられる1つの理由として、プログラムした結果が明確に目で見えること、確かめることができることにあります。結果がすぐ分かるからこそ、プログラミングの楽しさを享受できるのです。
Robocodeは、まるで冒険小説の中に出てくる潜水艦と巡洋艦が、お互いが見えないまま、戦略を練りながら戦っていくようなだいご味が感じられます。ソースコードのアルゴリズムを練ることが、まるで映画や小説の1シーンを体験するような、知的ゲームなのです。
RobocodeはJ2SE(Java 2 Platform, Standard Edition)v1.3が動作する環境であれば、Windows、MacOS X、Linuxなど、さまざまな環境で動かすことができます。さらに、より高速に動かすためには、J2SE v1.4が推奨されています。
Robocodeは、Java、XML、XSLTが最大限に活用されています。Robocode APIを組み合わせてプログラミングすることにより対戦するロボットの振る舞いを作り込むことができます。
Javaプログラミングによって独自のロボットを相手のロボットと対戦させ、得点を競うシミュレーション・ゲームです。ロボットは戦車を模したもので、車両、大砲、レーダーといった3つの構造に分かれています。作成されたロボットはバトルフィールドと呼ばれる戦闘区域内に配置され、その領域内で対戦します。
プログラムによって、ロボット車両の振る舞いを定義します。基本動作を設定し、動く際の加速度や、動き方を工夫するのです。
またレーダーにより、敵ロボットの位置を把握します。弾丸をかわしたり、撃ち合って敵を撃破します。敵ロボットの動作を予測したり、敵から逃げる手段を実装するのです。レーダーの使い方として、360度すべてを見渡して敵ロボットを検出しようとしても、時間と手間がかかるだけで、事実上無意味です。敵の行動に基づいて、効率よくレーダーを使用することによって敵の位置を見つけるアルゴリズムが必要となるのです。
Robocodeのサンプルコードとして公開されているDWRotaterロボットは以下のような振る舞いをします。
- バトルフィールドの中心に向かって移動する(角に居ると追い詰められるため)
- ほかのロボットを発見するまで、大砲を回転し続ける
- 敵ロボットを発見したら、その先の移動量を見越し、発見したロボットよりも少し先に向けて、いくつかの異なる角度を試しながら発射する
- ほかのロボットからの弾丸が命中したら、素早く前後に動いて逃げる
上記の文書を読むと、なにかしらもっと良いアイデアが浮かんできませんか? 敵ロボットの行動をキャッシングしておき、必要に応じて、次の行動を予想するアルゴリズムや、一定の法則で逃げ回るのではなく、状況に応じて逐一動きを変化させる逃げ方など、方法はいくらでも考えられます。
ロボット車両の動きには、ざっと考えただけでも以下の組み合わせがあります。複雑なものほど、敵ロボットから狙われる確率が低くなることでしょう。
- 動かない
- 直線的な動き
- 曲線的な動き
- 直線的、曲線的な動きを織り交ぜた動き
- ジグザグ振動するような動き
- 乱数によりランダムに動く
敵ロボットの位置を検知するためのレーダーの実装も以下の組み合わせが考えられます。
- 動かさない(前方のみ)
- 周りを一定方向に回転しながら見渡す
- ある特定の目標を追跡
- 近くに居るロボットを対象に追跡
- 動きが単純で予測できるロボットは内部的に処理し、複雑に動くロボットのみレーダーの対処とする
Robocodeで作成した自分だけのロボットは、Roboリーグに登録してほかの人が作ったロボットと対戦させることができます。同じような力を持ったロボットは互角の戦いができるのが特徴です。また力に差があるロボット同士の対戦によって、どの部分が弱いのか、どの部分を修正するとより強いロボットになるのかを知ることができます。
Robocode最新バージョンでは複数のロボットでチームを組むことができるようになったそうです。仲間同士で情報を通信しながら、集団で作戦行動を取ることができます。チームを組むことによって、より複雑な戦略をアルゴリズムとして実装することができるでしょう。
Robocode Jジャパンカップの開催
Robocodeジャパンカップが開催されます。参加資格さえ満たせば、無料で参加することができます。米国で以前行われていたRobocode Rumbleの日本版といっていいでしょう。
Robocode Japan Cupは、9月19日に登録サイトが開設される予定です。2002年11月25日に登録が締め切られます。締め切りまでは、記述したコードを分析、検討しながら、開発したロボットを強くしていくことができるそうです。その後、予選リーグが開催されます。予選リーグを勝ち残った上位100位までのロボットが決勝リーグを戦います。
対戦はグループ分けされており、該当するクラスのロボット同士が戦います。
- プログラミング経験が6カ月以下の一般初心者クラス
- 習熟したプログラマを対象とした一般上級者クラス
- 学生クラス
以上の3クラスに分かれて対戦します。その後、12月8日までに決勝リーグが終了し、12月10日に結果が発表される予定だそうです。
注:各日程には変更があるかもしれません。詳細はRobocodeジャパンカップのWebページで確認してください
Javaプログラミングのお手本としても
Robocodeのシステム自体もJavaプログラムとしてよく考えられ設計、実装された骨格のしっかりしたものです。描画機構や各種の動作を同時に行うためのスレッド機構など、Javaプログラミングにおいて気を付けなければいけない部分には当然ながら重点が置かれています。
普通ならプログラムの優劣は簡単には比べることができません。例えば以下のような要点でプログラムを評価したとしましょう。
- 開発のスピードが速く、開発期間が短い
- 安定して動作している
- コードサイズ、プログラムサイズが小さい
- 動作速度が速い
- メンテナンス、更新の容易さ
- 再利用のしやすさ
そのほかにもさまざまな要素があるでしょう。Robocode は上記で列挙したすべての要素を兼ね備えているといっても過言ではないでしょう。自分の分身としてRobocodeロボットを開発し、世界中、日本中のプログラマを相手にプログラミングの技を磨いてみるのもいいかもしれません。
次回は10月23日の公開予定です。
プロフィール
安藤幸央(あんどう ゆきお)
1970年北海道生まれ。現在、株式会社エヌ・ケー・エクサ マルチメディアソリューションセンター所属。フォトリアリスティック3次元コンピュータグラフィックス、リアルタイムグラフィックスやネットワークを利用した各種開発業務に携わる。コンピュータ自動彩色システムや3次元イメージ検索システム大規模データ可視化システム、リアルタイムCG投影システム、建築業界、エンターテインメント向け3次元 CG ソフトの開発、インターネットベースのコンピュータグラフィックスシステムなどを手掛ける。また、Java、Web3D、OpenGL、3DCG の情報源となるWebページをまとめている。
ホームページ:
http://www.gimlay.org/~andoh/java/
所属団体:
OpenGL_Japan (Member)、SIGGRAPH TOKYO (Vice Chairman)
主な著書
「VRML 60分ガイド」(監訳、ソフトバンク)
「これがJava だ! インターネットの新たな主役」(共著、日本経済新聞社)
「The Java3D API仕様」(監修、アスキー)
Copyright © ITmedia, Inc. All Rights Reserved.