2002 -1007 ver 0.00 第1草稿開始 -1012 ver 1.10 発行 -1013 ver 1.20 言い回しの修正 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃.&&&& **** %%%%.  JavaScript&Javaで目指そう!基本情報技術者試験  ┃ ┃&&&&&&******%%%%%%  執筆&編集 斎藤末広 suehiro@he.mirai.ne.jp  ┃ ┃'&┃&''*┃*''%┃%'  発行    江口昌宏 jmaga@yscon.co.jp    ┃ ┗━┻━━┻━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ★解除・登録 :http://www2.odn.ne.jp/~egu33/jmaga/java-maga.html ★広告募集  :http://www2.odn.ne.jp/~egu33/jmaga/jmaga-ad.html ★発行済み  :http://www.yscon.co.jp/j/java/jmaga/ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓  第30号 2002/10/12  ロボコード(Robocode) ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛  プログラムを作成する上での注意事項:  Windows98SE, SDK(JDK) 1.3.1,IE 5.5 を前提としています。  拡張子を表示するに設定してください。 ------------------------------------------------------------------------ お知らせ(新しいSDK)  新しいSDK(JDK)がダウンロード可能になりました。  Java2 SDK J2SE 1.4.1  http://java.sun.com/j2se/1.4.1/ja/download.html ------------------------------------------------------------------------ お知らせ(Java開発用無料エディター)  Java開発用のエディターとして,フープ! FREE版が公開されています。 Java インタープリター内蔵です。JDK 1.4 以上の環境が必要です。  http://www.hirokiok.com/ja/hooope/ ======================================================================== ▼ ロボコードとは?  ロボコード(Robocode)とは,IBM に勤めているマット・ネルソン(Mat Nelson) が作成した,戦車ゲームです。このゲームは,自分の戦車ロボットを Java でプ ログラミングして,他人が作った戦車ロボットと対戦させるゲームです。  http://www-6.ibm.com/jp/developerworks/java/020712/j_j-nelson.html  IBM には,alphaWorks という,IBM 社内での研究中のものを,アルファ版(出荷 前のテスト版をβ版といいそれ以前という意味)として公開するサイトがあります。 この Robocode も正式にそこのサイトで扱われるようになりました。趣味で始め たネルソンさんは,今では,勤務中にゲームを楽しんでいるかもしれません。  http://www.alphaworks.ibm.com/  現在,IBM が主催で,世界的に対戦を主催しており,日本でも,日本IBMが懸賞 を提供して,対戦を主催されています。Jマガの読者のみなさんも,挑戦されると いいですよ。私の専門学校の授業でも教材として扱っています。 日本IBM主催:Robocodeジャパン・カップ http://www-6.ibm.com/jp/event/robocode/home/ ------------------------------------------------------------------------ ▼ ロボコードを動かす  では,さっそくロボコードを動かしてみましょう。ダウンロードから説明しま す。常時接続でない方は,雑誌から入手した方がいいですよ。 雑誌『Java Developer』http://www.javadeveloper.jp/  以下の作業は,ウィルスチェック等があると余分なメッセージがでる可能性が あります。また,常駐のユーティリティプログラムがあると正常にインストール できないときがあります。できるだけ,シンプルな状態にしてインストールされ ることをお薦めします。  また,会社などで,自分の責任で使えないパソコンなどにインストールされる のはよした方が無難です。  以下は,ロボコード のバージョンは,1.0.6 の場合の手順です。 1 ダウンロードの仕方  まず  http://www.alphaworks.ibm.com/tech/robocode/  を開いて下さい。  右のところに,「Download now」の横長のボタンがありますので,クリックし ます。  開いたページの下の方に,「Click to continue」がありますので,それをク リックします。  そうすると,現在のパソコンに,Java のプログラムを実行する Java VM があ るかどうかを自動的に調べます。もし,なければ,それをダウンロードします。 JDK(SDK)をインストールをすると自動的に入りますので,Jマガの読者の方は, たいてい次の段落の内容は省略されます。  Java VM が無いとき,「セキュリティ警告」の画面が現れ,Java Plug-in をイ ンストールする状態になります。その画面の下のある,「はい」をクリックして 進めて下さい。12Mバイトほどダウンロードされます。ADSL で数分覚悟する必要 があります。このファイルのダウンロードが終了すると,installShield ウィザー ドの画面が開きます。「次へ」を押します。使用承諾契約の画面がでます。「は い」を押さないと次ぐに進めません。「インストール先の選択」がでます。通常 そのままで,「次へ」を押します。「ブラウザの選択」画面が出ます。妥当なも のが選ばれているか確認して「次へ」を押します。インストールが始まるます。  IBM の alphaworks が表示されているページの内に「installing Robocode - Windoes」の画面に変わります。そこの 文字の方のrobocode-setup.jar をクリッ クします。絵の方は,クリックできません。そうすると「ファイルのダウンロー ド」画面が現れます。サイズは,2.2M バイトです。「このファイルをディスクに 保存する」を選んで,「OK」を押します。保存場所を指定する画面になりますの で,デスクトップを指示して下さい。ダウンロードが終了したら,Web を閉じます。 2 インストール  デスクトップの robocode-setup.jar をダブルクリックをします。そうすると, 「License Agreement」の画面が出ます。左下の「Accept」をクリックしないと 次ぎに進めません。  次に進むと,ロボコードの保存場序を聞いてきます。デフォルトのままでいい なら,「はい」で進みます。  「c:\robocode does not exit. Would you like to creat it?」とフォルダを 作っていいかと聞いてきますので,「はい」と答えます。  いくつかのファイルが展開されます。  次に,「Create Shortcuts」の画面がでます。「はい」を選びます。  メッセージ画面が開き,「Install successful」と表示されます。「了解」を押 します。  インストールが終わりました。デスクトップに,Robocode のアイコンが出来て いるはずです。 3 実行  デスクトップの Robocode のショートカットをダブルクリックすれば実行でき ます。  また,以下のように,バッチファイルを作成しても実行することができます。  c:\jwork に jstart.bat がある場合,それをコピーして,jworkフォルダに, robostart.bat という名前にして,中を次のように変更します。 Jマガ第2号に登場した, http://www.yscon.co.jp/j/java/jmaga/jmaga002.txt jstart.batは jstart.bat rem Javaの開発作業を開始するにあたっての設定を行う。 path %path%;c:\jwork;c:\jdk1.3\bin doskey command これを robostart.bat rem robocode作業の設定を行う。 path %path%;c:\jwork;c:\jdk1.3\bin c: cd \robocode robocode と変更して下さい。  この robostart.bat をダブルクリックすると robocode のメインが画面が 出ます。 ------------------------------------------------------------------------ ▼ ロボコードを動かす  Robocode のショートカット,もしくは,robotstart.bat を実行するとメニュー 部分が次のような画面が表示されます。 ----------------------------------------- □Robocode | ----------------------------------------- Battle Robot Options Help | -----------------------------------------  この画面がロボコードのメイン画面になります。黒く大きな部分で,戦車の戦 いが実行されます。  メニューの説明します。  [Battle] 戦車の戦いの設定を行います。回数,登場する戦車を選びます。  [Robot]  ロボットを作成したり,他人が作成したロボットをimport します。  [Option] 戦いの進行スピード等のパラメータを設定します。  [Help]  Robot を作成するときに参考なるドキュメントなど参照します。 ------------------------------------------------------------------------ ▼ 戦闘開始  上記メニューで,[Battle]-[New] と選びます。  そこで,戦いに出す戦車ロボットを決定します。Robots の枠に中に並んでいる 名前が,戦車の機種名になります。sample.Cornes,sample.Crazy,sample.fire の3台を戦わせてみましょう。  Robots のところから,sample.Corners をマウスでクリックして,右側の[Add] を押します。同じように,sample.Crazy,sample.fireも[Add]して下さい。  次は,真ん中にある,Number or Rounds の数字を2にして下さい。戦いの回数 です。そしたら,下の方にある,[StartBattle]で戦いを開始します。  戦車が1台になったところで,1ランド(第1回戦)が終了します。指定された ランド数が終わったら成績の表示されます。  成績が表示されたら,成績の窓は閉じて下さい。 ------------------------------------------------------------------------ ▼ 戦車ロボット作成  では簡単な戦車ロボットを作成しましょう。  メイン画面のメニューから,[Robot]-[Editor] を選びます。そうすると,左 上が ----------------------------------------- □Robot Editor | ----------------------------------------- File Compiler Help     | ----------------------------------------- の画面が開きます。  これは,Robot エディター画面です。新しく戦車ロボットを作成するときには, [File]-[New]-[Robot] と選びます。そうすると,「New Robot」の名前を聞いて くる小画面が現れます。xRobo としてみます。これが,Java のクラス名に対応 してきます。[了解]を押すと,XRobo に修正しなさいと小画面がでます。大文字 で始める必要があるようです。XRobo となっているので,[了解]を押します。 次に,「XRobo - package name」の小画面が出ます。これは,Java のパッケージ 名をどうするかと聞いています。パッケージは,まだ,Jマガでは扱っていません。 ここでは,xpack としましょう。これは,フォルダ名に対応します。  自動的に,「Editing - XRobo*」の画面が開き,そこに,プログラムが表示 されています。自動的に XRobo.java が作成されます。  自動的に作成された,XRobo.java を見てみましょう。 1: package xpack; 2: import robocode.*; 3: //import java.awt.Color; 4: 5: /** 6: * XRobo - a robot by (your name here) 7: */ 8: public class XRobo extends Robot 9: { 10: /** 11: * run: XRobo's default behavior 12: */ 13: public void run() { 14: // After trying out your robot, try uncommenting the //(本来は上の継続行) import at the top, 15: // and the next line: 16: //setColors(Color.red,Color.blue,Color.green); 17: while(true) { 18: // Replace the next 4 lines with any behavior you would like 19: ahead(100); 20: turnGunRight(360); 21: back(100); 22: turnGunRight(360); 23: } 24: } 25: 26: /** 27: * onScannedRobot: What to do when you see another robot 28: */ 29: public void onScannedRobot(ScannedRobotEvent e) { 30: fire(1); 31: } 32: 33: /** 34: * onHitByBullet: What to do when you're hit by a bullet 35: */ 36: public void onHitByBullet(HitByBulletEvent e) { 37: turnLeft(90 - e.getBearing()); 38: } 39: 40: }  概要を解説します。 2: import robocode.*;  で,robocode 関連の各クラスが使用可能となっています。どんなクラスが利用 であるかは,メイン画面の[Help]-[Robocode API]から調べることが出来ます。  なお,私のパソコンで試したところ,2台のパソコンのうち,1台は,見つか らないとエラーが出て [Help]から見ること出来ませんでした。その場合は,  c:\robocode\javadoc\index.html で見ることができます。 13: public void run() { 14: // After trying out your robot, try uncommenting the //(本来は上の継続行) import at the top, 15: // and the next line: 16: //setColors(Color.red,Color.blue,Color.green); 17: while(true) { 18: // Replace the next 4 lines with any behavior you would like 19: ahead(100); 20: turnGunRight(360); 21: back(100); 22: turnGunRight(360); 23: } 24: }  このところが,戦車のいつもの動作を決めます。ahead:前進,turnGunRight:大砲 右回転,back:後退をします。右回転とは,時計回りです。 26: /** 27: * onScannedRobot: What to do when you see another robot 28: */ 29: public void onScannedRobot(ScannedRobotEvent e) { 30: fire(1); 31: }  レーダで別の戦車を見つけた(onScannedRobot)ら,fire:撃て ですね。 33: /** 34: * onHitByBullet: What to do when you're hit by a bullet 35: */ 36: public void onHitByBullet(HitByBulletEvent e) { 37: turnLeft(90 - e.getBearing()); 38: }  弾(Bullet)が当たった(onHitByBullet)ら,turnLeft:左回転します。  この戦車の動きは,前後に動いて,大砲を右回転して,敵を見つけたら,弾を 撃ち,敵の弾に当たったら,左回転をします。  このプログラムを発展させて強い戦車を作るのがこのゲームの楽しみです。  このサンプルを動作させてみましょう。「Robot Editor」のメニュー, [Compiler]-[Compile] を選んで下さい。このプログラムはどこも触っていないの で,コンパイルは成功するはずです。 ------------------------------------------------------------------------ ▼ XRobo いよいよ,戦場へ  Robocode のメイン画面のメニューで,[Battle]-[New] をします。Package の とところに,xpack があると思います。これは私たちが作成したものです。xpack をクリックすると,その中にある Robots が表示されます。XRobo です。これを 選んで Add して下さい。これを繰り返して,あと2台の Xrobo をAdd して下さ い。次に,Packages の中から,(all) を選んで,sample.Crazy を一つ Addして, [StartBattle] を押して下さい。  戦いを始めます。xRobo は結構強いことが分かりますね。 ------------------------------------------------------------------------ ▼ XRobo をさらに強く?  XRobo を改良してみましょう。現在のプログラムは 1: package xpack; 2: import robocode.*; 3: //import java.awt.Color; 4: 5: /** 6: * XRobo - a robot by (your name here) 7: */ 8: public class XRobo extends Robot 9: { 10: /** 11: * run: XRobo's default behavior 12: */ 13: public void run() { 14: // After trying out your robot, try uncommenting the //(本来は上の継続行) import at the top, 15: // and the next line: 16: //setColors(Color.red,Color.blue,Color.green); 17: while(true) { 18: // Replace the next 4 lines with any behavior you would like 19: ahead(100); 20: turnGunRight(360); 21: back(100); 22: turnGunRight(360); 23: } 24: } 25: 26: /** 27: * onScannedRobot: What to do when you see another robot 28: */ 29: public void onScannedRobot(ScannedRobotEvent e) { 30: fire(1); 31: } 32: 33: /** 34: * onHitByBullet: What to do when you're hit by a bullet 35: */ 36: public void onHitByBullet(HitByBulletEvent e) { 37: turnLeft(90 - e.getBearing()); 38: } 39: 40: } です。これを XRobo01.java としましょう。 名前の変更してのコピーの仕方は,このなかで, 8: public class XRobo extends Robot の XRobo を XRobo01 にします。次に,Robot Editor のメニューから,[File]- [Save As] を選び,XRobo01.java という名前で保存します。プログラムの内で, 先に,XRobo01 という名前にしないと,保存のときに,ファイル名とクラス名が 不一致とエラーがでます。  プログラムを見ると, 16: //setColors(Color.red,Color.blue,Color.green); とコメントアウトされたところがあります。コメントアウトというのは,プログ ラムの一部をコメントに指定して,実行から除外するようにした部分です。ここ の // をとることもできるというヒントです。  setColors という名前から想像すると,これは戦車の色ではないかと思われま す。試してみましょう。  ここの // をこの行を有効にします。これに関係する, 3: //import java.awt.Color; の,// もとります。さらに, 5: /** 6: * XRobo - a robot by (your name here) 7: */ の(your name here)ところは,"斎藤末広(Jマガ)" にすることにします。 次のプログラムになります。 1: package xpack; 2: import robocode.*; 3: import java.awt.Color; 4: 5: /** 6: * XRobo - a robot by 斎藤末広(Jマガ) 7: */ 8: public class XRobo01 extends Robot 9: { 10: /** 11: * run: XRobo's default behavior 12: */ 13: public void run() { 14: // After trying out your robot, try uncommenting the //(本来は上の継続行) import at the top, 15: // and the next line: 16: setColors(Color.red,Color.blue,Color.green); 17: while(true) { 18: // Replace the next 4 lines with any behavior you would like 19: ahead(100); 20: turnGunRight(360); 21: back(100); 22: turnGunRight(360); 23: } 24: } 25: 26: /** 27: * onScannedRobot: What to do when you see another robot 28: */ 29: public void onScannedRobot(ScannedRobotEvent e) { 30: fire(1); 31: } 32: 33: /** 34: * onHitByBullet: What to do when you're hit by a bullet 35: */ 36: public void onHitByBullet(HitByBulletEvent e) { 37: turnLeft(90 - e.getBearing()); 38: } 39: 40: }  では,ここでコンパイルをしましょう。メニューの[Compiler]からコンパイル して下さい。修正してから保存してなかったので,保存を促す画面が出ます。保 存して下さい。  コンパイルが成功したら,実行してみましょう。メイン画面で,実行して下さ い。今度は,XRobo と 新たに作った XRobo01 を1台ずつ [Add] して,実行し てみましょう。 16: setColors(Color.red,Color.blue,Color.green);  としました。実際の戦車をみると,最初の赤は戦車の色,青はどこの色はよく 分かりません。緑のところが中央にありますね。 ここで,マニュアルを確認しましょう。 メイン画面の [Help]-[Robocode AIP] を選んで下さい。それとも,ブラウザのア ドレス欄に,C:\robocode\javadoc\index.html をコピーして貼付して,エンター キーを押しても同様です。  ブラウザの左にクラスの一覧が表示されます。今,私たちが触っているプログ ラムは 8: public class XRobo01 extends Robot から,Robot クラスを拡張していることが分かります。Robot クラスを調べて見 ることにします。ブラウザの左のクラス一覧から,Robot クラスを探して,クリッ クして下さい。  そこには, Class Robot java.lang.Object | +--robocode._Robot | +--robocode.Robot とあります。探したいものが,Robot クラスに無いときは,_Robot クラス,そ れでも無いときは,Object クラス に探していけばいいことが分かります。  setColor を このページの Method Summary の表から探しましょう。 public void setColors(Color robotColor, Color gunColor, Color radarColor) と載っていました。  setColors() の () の中は,順に,戦車の色,大砲の色,レイダーの色でした。  実行させて,よく見ると,大砲の筒は,白ですが,戦車の中央で回転している ところが,青です。  今回のサンプルは,色を変えただけですが,このようにプログラムを修正して 強い戦車ロボットを目指します。  どんなメソッドが使えるかは,このマニュアルを読んで研究できます。英語が 大変ということで,公式ではありませんが,日本語で公開してくれているところ があります。 Robocode(ロボコード)日本語ドキュメント http://www.geocities.co.jp/SiliconValley/9155/  すべてのクラス   http://www.geocities.co.jp/SiliconValley/9155/api/    クラス Robot    http://www.geocities.co.jp/SiliconValley/9155/api/robocode/Robot.html ------------------------------------------------------------------------ ▼ 関連リンク  自分の戦車ロボットを強くするには,他人の強いロボットを研究するのが,一 番です。  強い戦車が公開されています。ダウンロードして,研究して強くして下さい。 日本IBM主催:Robocodeジャパン・カップ http://www-6.ibm.com/jp/event/robocode/home/ Robocode(ロボコード)日本語ドキュメント http://www.geocities.co.jp/SiliconValley/9155/ IBM developerWorks: Java technology : Robocode関連記事リンク集 達人テクニックが公開されています。 http://www-6.ibm.com/jp/developerworks/java/020802/robocode_link.html ------------------------------------------------------------------------ ▼ 次号の予定  次号は,継承を過去問題から勉強します。  感想は,斎藤まで,suehiro@he.mirai.ne.jp  広告等のお問い合わせ:jmaga@yscon.co.jp ------------------------------------------------------------------------ ▼ 当メールマガジン情報 当メールマガジン Jマガ情報  http://www.yscon.co.jp/j/java/jmaga/ 登録・削除  http://www2.odn.ne.jp/~egu33/jmaga/java-maga.html 広告受付  http://www2.odn.ne.jp/~egu33/jmaga/jmaga-ad.html ------------------------------------------------------------------------ ▼ 著作権について  このメールマガジンで公開しているプログラムソースは,著作権を当方スタッ フが所有しますが,商用を含めて,再利用,改変,発表を制限しません。  本文に関しては,斎藤末広が著作権を所有します。再利用に関しては,承諾を 必要とします。 ------------------------------------------------------------------------ ▼アンケート(以下を返信してください)  この号のJマガに対するご意見をお待ちしてます。ぜひ,ご返信下さい。 内容のレベルは 1 難しいのでもっと簡単にしてほしい 2 ちょうどよい 3 もっと難しくてもよい その他ご要望