AlphaBot: Robocodeの生みの親Mat Nelson氏へのインタビュー

Robocodeが誕生した経緯と、どこへ向かっているのか

developerWorksとalphaWorksの記事に注意を向けてきた読者であれば、Robocodeと呼ばれるちっぽけに思える話題に多大のエネルギーが向けられてきたことにお気づきでしょう。これは、つい病みつきになってしまうゲームですが、期せずしてJavaプログラミングを教える道具にもなっています。過去1年半にわたって、Mat Nelson氏は生活の大半をRobocodeの開発に没頭してきました。最初は自分の楽しみのためでしたが、その後は、愛するそのプロジェクトがIBM alphaWorksで取り上げられ、さらに真剣な努力を傾けることになりました。そして、今や彼はなんと大きな報いを刈り取っているのでしょう。Robocodeの成功はほとんど爆発的なものであり、しかもまだ始まったばかりなのです。

Dana Triplett (dana@orange-atelier.com), Freelance writer

Dana Triplettは、フリーランスのライターで、その専門的関心は主に、情報アーキテクチャーおよびデザインと、人文科学分野のコンピューティングに向けられています。Danaはまた、バーモント州、ミドルベリー・カレッジ、芸術学部のスライド図書館で館長補佐を務めています。Danaの連絡先はdana@orange-atelier.com です。



2002年 5月 01日

Mat Nelson
Mat Nelson

Mat Nelson氏がJava言語に関わり始めたのは、1995年までさかのぼります。それは、彼がIBMでフル・タイム勤務を始める前のことでした。Java言語が成熟するにつれて、この熱心なゲーム・マニアは、彼が「以前からずっとプレイしたいと思っていた」ゲームを作成する機会を得ました。Robocodeを個人的に作り始めたのは2000年の後半でした。それがalphaWorksのダウンロードという形でIBMに持ち込まれて、専門的なものになったのは、2001年7月のことでした。ゲームをプレイする面とロボットを作成する面の両方でRobocodeの人気がうなぎ登りに高まってきたため (121,000以上のダウンロード)、developerWorks編集部では、寄稿者のDana TriplettにMatへのインタビューを依頼し、Robocodeを開発したきっかけや、それが将来どこへ向かっているかについて話を聞いてもらいました。

Robocode関連のリンク集

闘え、Robocode (ロボコード)!」(developerWorks、2002年1月) と「闘え、Robocode (ロボコード): 第2ラウンド」(developerWorks、2002年5月) をお読みください。

developerWorks: Robocodeの背後にある中心的なアイデアはどのようなものですか?

Nelson: Robocodeは、楽しみのためのプログラミング競技であり、この楽しみということが絶対的なキーワードなんです。数行のコードを書くだけで、自分のロボットが画面上を猛進し、行く手をさえぎるものを撃破します。そして、その過程で、現在の世界にある現実の問題を解決する本物のプログラミング言語を学んでいくわけです。

dW: これまでのお気に入りのゲームにどんなものがありますか?また、それらのゲームのどこが気に入っていますか?

Nelson: Commodore 64のWormsというゲーム (同じ名前の現行のゲームと混同しないでください) は、ゲームの動きを何らかの形で「教え込んで」から、その動きを観察できるゲームで、その種のものとして私が目にした最初のものでした。その他に、戦略ゲームやロールプレイング・ゲームの大ファンでもあります。ここ何年かの間に病みつきになったゲームといえば、Civilization、Master of Orion、Sim City、Command and Conquerシリーズ、Warcraft/Starcraftシリーズ、Ultimaシリーズ、Diabloシリーズなどがあります。もちろん、ほかにも山ほどゲームをプレイしましたが、私が気に入るものといえば、決まって、自分で何かを組み立てて、それをゲーム環境に解き放し、どのようになっていくかを観察するというゲームなんです。

dW: これまでにプレイしたゲームの中に、Robocodeを作り始めるにあたって感化されたものがありますか?

Nelson: Wormsは確かにそうですし、ほかにもC64のゲームのMail Order Monstersなどがあります。こういった古典的なゲームは、本当にすばらしいものです。グラフィックスはありませんでしたから、プレイの面白さがすべてだったわけです。私がRobocodeを開発するときに挑戦したアプローチは、まさにそのようなものです。つまり、とっつきやすく、プレイして楽しく、かつ非常に人を引きつけるゲームにしたかったんです。

しかし、Robocodeを開発するときに主に影響を受けたのは、Brad Schickが開発したRobot Battleというゲームです。そのゲームそのものは、Apple 2用のRobot Warsの影響を受けています。私がRobot Battleを見つけたのは1995年のことで、私は「The Cleaner」という自分のロボットを作成するのに、膨大な時間を費やしました。ものすごく楽しかったんです。まず他の人の作ったロボットの戦いぶりを観察してから、自分の戦略を練りました。当時の主なライバルは、シーソー ・ロボットと呼ばれる種類のロボットで、その種のロボットは前後に行ったり来たりするので、攻撃するのが大変でした。私のCleanerも、それらのロボットを攻撃するのに非常にてこずりました。それで、どうしたかって? 私は、ちょっとした三角法を使ってシーソーの角度を推測し、その角度に向けて猛攻撃を加えたんですよ。そのプログラムを書くのを楽しみましたし、Cleaner 3がトーナメントで順位を上げていくのを見て喜びました。

dW: Robocodeの開発を始めたとき、そのゲームの対象者としてどんな人たちを念頭に置いていましたか?

Nelson: 最初に始めたときは、私だけです。Robocodeは、私が自分でプレイしたいゲームでした。ですから、それを書いたわけです。

Robocodeは、何も知らない人でもプレイできて、しかも、学習するにつれてその人といっしょに成長するようなゲームにしたいと思いました。ちょうどチェスのように、学ぶのは簡単、でもマスターするのは難しい、というわけです。APIはできるだけシンプルなものに設計し、その使い方を示すサンプルもいくつか用意しました。専門の設計者から、高校生や動物園の飼育係に至るまで、誰でも簡単なロボットを動かすことができて、「やったぞ、自分でJavaプログラムを書いた!」と言えるようにしたかったんです。その一方で、上級のユーザーは、Javaプログラミング言語のパワー全体を利用できることをすぐに理解し、そのパワーを自由自在に活用して彼らのロボットの動作を組み立てることができます。

dW: Robocodeの現実のユーザーの反応に驚かされたところがありますか?

Nelson: これが成功したこと自体、いちばんの驚きでした。このゲームを楽しんでプレイする人が出てくることには、確信がありました。私が楽しんでいるわけですから...。でも、まさかこんなに大勢 の人がこのゲームを楽しむとは、思ってもいませんでした。現時点で10万回以上のダウンロードとは、呆然とさせられる数字です。Robocodeが実に様々な利用のされ方をしているのを見ていつも驚いていますし (喜ばしいことです)、コミュニティーも私をずっと楽しませてくれています。

dW: Robocodeプレイヤーたちが作成した独創的なロボットの実例をいくつか挙げていただけますか?

Nelson: 多くの種類の標的の予測 (ロボットに対して直接に砲撃するのではなく、ロボットが間もなくいるであろう場所に向けて砲撃する)、敵ロボットの動作を追跡して記録すること、マルチ・スレッドによってロボットの様々な側面をコントロールすること、ジャストインタイム・アルゴリズム、弾丸を回避する動き、持続性、最適化されたレーダー追跡など、そのリストは延々と続きます。公開されている最高のロボットたちには、ただただ驚かされます。私は最近になってチーム・プレイを導入し、戦略を立てるまったく新しい分野が開けましたので、次にどんなものが姿を現すのか本当に楽しみです。

dW: Robocodeにどんな機能を追加したいと考えおられますか?

Nelson: 実行したい最初の事柄は、APIを再構築して、もっとシンプルで、もっとオブジェクト指向的な、そしてもっと拡張可能かつ制限の少ないAPIを実現することです。たとえば、setTurnRadarRight() ではなく、radar.setTurn() と書くようにしたいわけです。レーダーを1つのオブジェクトにしてしまえば、setRadar(new Radar(range,speed)) と書くことによって、別の種類のレーダーを作ることもできます。

APIの再設計の一部として、2つの大きな未解決の点を修正したいと考えています。それは、度とラジアン、および単位円の数学的な扱いです。ロボットでは、1回の呼び出しで度を使うかラジアンを使うかを決めることができ、別の1回の呼び出しで単位円方式とコンパス方式を切り替えることができます。単位円方式は、Javaの三角関数メソッドで使われている方式で、右方向が0度、そこから反時計回りに正の値が割り当てられます。コンパス方式では、真上の方向が0度で、そこから時計回りに正の値が割り当てられます。どの方式を好むかはプログラマーによって異なるため、これらすべての方式をサポートすると同時に、APIをシンプルなものに保ちたいと思っています。

もう1つの大きな点は、物理学です。Robocodeの物理学は、現在はごく単純なものになっています。そこで、より現実的なフィーリングを持ち込むために、力学のベクトルを導入しようと考えています。たとえば、加速は、空気抵抗と回転摩擦の差し引きによって決まります。単に「最大速度」によって決まるのではないわけです。ロボットが別のロボットの側面に衝突すると、衝突されたロボットは横方向に押されますが、それは摩擦と半弾性衝突の法則に従います。この点に関する以前の私の実験では、ゲームの「興をそそる要因」が大幅に改善されることがわかりました。ロボットに衝突すると、キーッと音を立てながら横滑りするなんて、面白いじゃないですか。さらに、前進と後退の加速も変更して、前進しているロボットはより速く移動できるようにします。

体当たり攻撃は今のところほとんど利用されていませんので、ロボット周囲の装甲板の強度に変化をつけて、これも自由に設定できるようにしたいと思っています。ロボットの側面に攻撃を加えると、より大きなダメージを与えられるようにするわけです。

さらに、競技場に壁や障害物を置いたり、競技場の形を変えたりして、まったく新しい戦略の世界を切り拓くことも考えています。

こうした変更を加えると、かなり複雑なプログラミングが必要になってきますので、ロボットをより容易に拡張できるようにすることを計画しています。エキスパート・ユーザーは、壁をよけて進む経路を見つけ出せる、再利用可能なロボット・クラスを記述できると同時に、ビギナーはそのクラスを単に利用して、優れたロボットをすぐに作成できる (そして、コードを再利用する方法を学習できる) ようにするわけです。

dW: Robocodeを将来的に、alphaWorksをホストとする分散型のゲームにする構想はお持ちですか?

Nelson: 今のところ、私が努力を傾けているのは、簡潔さです。ゲームのプレイをより楽しくすることに関係しない複雑さを持ち込む必要はないと考えています。分散環境でのRobocodeは、現状でのRobocode、つまり他のロボットをダウンロードして楽しむスタンドアロン型のゲームよりも楽しくなるでしょうか?私はその点で確信が持てません。もちろん、分散型のJavaプログラミング・ゲームで、非常に面白いものを実現できると思います。しかし、それは何か別の新しいゲームであって、Robocodeではないと思います。

dW: RobocodeをJavaで書くことにしたのはなぜですか?

Nelson: 1995年にJavaを見つけたとき、私はすぐに夢中になりました。整然とした、美しい言語だったのです。Javaを使うと、別の言語を使う場合の半分の時間で物事を完成させることができ、しかも、まったく別のシステムでもそれを実行できます。たとえば、RobocodeはMac OS Xでも動きますが、私はこれまでMacを触ったこともありません。

今や、Javaは高速 なのです。多くの人は、まだそのことを実感していませんが。コンピューターの速度は驚くほどのペースで高速化してきましたし、JVMはこれまでより高速で、Javaは成熟し、しかもハードウェア・アクセラレーター付きのグラフィックス機能もあります。今やJavaはクライアント用に利用する用意ができています。Robocodeが、そのことを証明する助けになればよいと願っています。

dW: あなたのプログラミング・スキルを利用して、ただ楽しむためだけの派手なゲームではなく、プログラマー向けの教育的なゲームを作成しようと思ったのはなぜですか?

Nelson: 特に理由はありません。私が書いたのは、ただ楽しむためだけの派手なゲームです。私たちが教育的な側面に気づいたのは、後になってからなんです。

25年間もゲームをプレイしてきて、私は数えきれないほどの時間を、ゲームをプレイする方法を学ぶのに費やしてきました。マニュアルを読み、ヘルプ・メニューを調べ、ゲームの解説書を読み、ヒントを求めてWebを調べました。もちろん、他のゲームと同じように、Robocodeの場合にも同じことをするでしょう。でも、大きな違いがあります。マニュアルが、Javaのマニュアルなんです。解説書はJavadocで、ヘルプ・メニューはJavaのチュートリアルです。Robocodeをプレイする方法を学ぶことそのもの が、Javaを学ぶことにほかなりません。私は、そのことに最初は気づきませんでした。

プログラミングの入門クラスの教授や教師が、学ぶことを楽しいものにするのにRobocodeが役立つことに気づいてくださり、Java言語を選んでくださることを願っています。少しのチュートリアル (ゲームに関係しないものと、ゲームに関係するものの両方) を加えれば、Robocodeをより優れた自習ツールにできると思います。私は、達成するべきいくつかの簡単なミッションとか、ゲーム内のチュートリアルを手がけるかもしれません (たとえば、「この10のミッションを達成すれば、Javaをかなり理解したことになります」など)。少しの手助けをすれば、誰でもJavaプログラマーになれるのです。

振り返ってみると、もちろん、教育用のツールであることは明白なように思えます。しかし、Robocodeは、まったく新しい角度からそこに到達しました。Robocodeはゲームです。しかし、そのプレイの仕方を学ぶと、なんとまあ、Javaを学習できるわけです。私は、あくまでも楽しいゲームとしてRobocodeを書きました。教育用のツールとして書いたわけではありません。そして、これからもそのつもりで開発を続けていきます。でも、楽しみながらJavaを学習できるのであれば、すばらしいじゃありませんか!

参考文献

  • Robocodeの生みの親、Mathew Nelson氏が、Robocodeの公式サイトを開設しています。Robocodeを真剣に検討したい人にとって、このサイトは良い入門となります。 要望の高い機能の「最新状況」をリストしたto-do list (今後の計画リスト) もチェックしてください。
  • Christian Schnell氏によるRoboLeague は、Robocode用のリーグおよびシーズンの管理ツールです。すべての可能なグループ分けで競技を実施し、その結果を管理し、HTMLの状況レポートを生成できます。
  • 闘え、Robocode (ロボコード)!」(developerWorks、2002年1月) では、Robocodeを解剖し、自分でカスタマイズした、無駄のない標準的な戦闘マシンを作成し始める手助けをします。
  • 闘え、Robocode (ロボコード): 第2ラウンド」(developerWorks、2002年5月) では、Sing Li氏が、高度なロボットの作成とチーム・プレイについて取り上げています。
  • その他のJavaの参考資料は、developerWorks のJava technologyゾーンで参照できます。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Java technology
ArticleID=219999
ArticleTitle=AlphaBot: Robocodeの生みの親Mat Nelson氏へのインタビュー
publish-date=05012002