全国高校生プログラミングコンテスト

CHaser2011
ステップアップヒント 1
１

はじめに

ステップアップヒントは CHaser2011 にチャレンジする人のためにプログラムの作り方やサンプルを掲載したテキストです。ぜひ参考にしてください。
CHaser2011 のサーバプログラムや競技部品はすべて Java で作られています。これらはダウンロードすれば入手できますので作成する必要はありません。スッテップアップヒント
では、Java を使用してクライアントプログラムを作っていきます。
２

CHaser2011 の概要

CHaser2011 は競技サーバへ２つのクライアントプログラムがそれぞれネットワークで接続し、サーバプログラムとクライアントプログラムの間で通信を行って、クライアント同士が１対１で対戦する競技です。先に接続したクライアントを Cool と呼び（以後 C）、先攻となります。後から接続したクライアントを Hot と呼び（以後 H）、後攻となります。勝敗
は①相手の上にブロックを置く②ハート型のアイテムの拾った数②相手の周囲 4 方向をブロックで囲む、などで決まります。ルールの詳細につきましては、末尾の Appendix を参照して下さい。
CHaser2011 にチャレンジするにはクライアントプログラムを作る必要があります。クライアントプログラムは C 又は H をいくつかのメソッド（命令）と Java の制御文である if文や while 文を組み合わせて自律的に制御していくものです。メソッドは競技部品として提供されていますので、開発する必要はありません。
また、クライアントプログラムはサーバプログラムと通信することにより、サーバから周囲情報を受信したりメソッドをサーバへ送ったりといった役割もあります。
大会ではひとつのプログラムを 1 台のコンピュータで動作させるため、図１のように合計 3 台のコンピュータが必要になります。しかし、開発段階では各プログラムを 1 台のコンピュータで実行しても対戦を行うことは可能です。サーバやクライアントというのはハードウェアで決まるのではなく、ソフトウェアの役割によって決まるのです。
サーバ
サーバプログラムクライアントクライアント

サーバプログラムｸﾗｲｱﾝﾄﾌﾟﾛｸﾞﾗﾑ１
ｸﾗｲｱﾝﾄﾌﾟﾛｸﾞﾗﾑ２

ｸﾗｲｱﾝﾄﾌﾟﾛｸﾞﾗﾑ１

図１

ｸﾗｲｱﾝﾄﾌﾟﾛｸﾞﾗﾑ２

3 台のコンピュータで実行する場合

図 2 1 台のコンピュータで実行する場合

３Java 開発環境のインストール（既にインストールしてある場合には省略可です）

Java でプログラミングを行うには開発キット（JDK：Java Development Kit）をインストールしなければなりません。以下の手順でインストールします。
①JDK のダウンロード先JDK は Java の開発元である Sun Microsystems 社のホームページから無償でダウンロードできます。最新バージョンは JDK 6 Update24 です（2011 年 5 月 17 日現在）。バージョンが新しくなると Update24 の数字部分が増えていきます。
ブラウザを開き、下記のアドレスにアクセスします。
http://java.sun.com/javase/ja/6/download.html②JDK のダウンロード
赤い四角で囲まれた「JDK ダウンロード」をクリックします。

JDK をクリック【画面 1】ダウンロードページ

③プラットフォームの選択
Platform（プラットフォーム）は開発するコンピュータの環境（Windows など）に合わせて選択します。次に「Download」をクリックします。

①「Windows」を選択③「Continue」をクリック②ライセンスを読み利用許諾に同意してチェックを入れる【画面 2】プラットフォーム選択④ダウンロード画面
ダウンロードするファイル「jdk-6u24-windows-i586.exe」をクリックします。

「jdk-6u24-windows-i586.exe」をクリック【画面 3】ダウンロード画面

⑤ファイルの保存「保存」をクリックし、保存場所（デスクトップなど）を選択します（画面 6）。保存せず直接インストールする場合は「実行」をクリックします。

【画面 4】実行か保存を選択【画面 5】保存フォルダを指定（例：デスクトップ）⑥インストールウィザードの開始
ダウンロードしたファイル（jdk-6u24-windows-i586.exe）をダブルクリックします。するとセットアップ画面（画面 6）が現れますので指示に従っていきます。
⑦インストールする機能とインストール先（画面 7）インストールする機能とインストール先を設定することができます。今回は何も変更しないで「次へ」をクリックします。
標準のインストール先は「C:¥Program Files¥Java¥jdk1.6.0_20¥」です。

【画面 6】インストールウィザードの開始【画面 7】インストール先の確認⑧インストール（画面 8）
コンピュータの性能にもよりますが、インストールには数分かかります。

⑨インストール完了（画面 9）
インストールが完了したら「完了」をクリックして終了します。

【画面 8】インストール画面【画面 9】インストール終了

４ バッチファイルの作成
Java の開発環境は次の場所にインストールされます（標準でインストールした場合）。
C:¥Program Files¥Java¥jdk1.6.0_24①プログラム保存フォルダの作成
Java がインストールされたフォルダに「program」という名前のフォルダを作ります。今後はこのフォルダにプログラムを保存します。

【画面 10】JDK がインストールされたフォルダ②バッチファイルの作成
Java のプログラムをコンパイルなどする場合、パスを設定しなければなりません。システ
ムの環境変数を設定することもできますが、今回はバッチファイルを使います。これにより、管理者権限を持たないユーザが使用したり、複数の Java バージョンを使い分けることができます。
program フォルダの中に、CHaser2011.bat というファイルを作り、メモ帳などで以下のプログラムを入力します（デスクトップにもコピーを保存しておくと便利です）。
@echo offecho ---------------------------------------------------------------------echo CHaser2011 開発環境（JDK6 Update24） 2011.5.19
echo ---------------------------------------------------------------------set JAVA_HOME=C:¥Program Files¥Java¥jdk1.6.0_24
set PATH=%PATH%;%JAVA_HOME%¥bin;
set CLASSPATH=.;%JAVA_HOME%¥program¥edu2010.jar
C:
cd %JAVA_HOME%¥program
cmd.exe【画面 11】バッチファイル

③確認
インストールした Java とバッチファイルが動作するか確認します。
CHaser2011.bat をダブルクリックして、画面 13 のように表示されたら OK です。もし、「指定されたパスが見つかりません。」などのメッセージが表示されたら CHaser2011.bat が間違っている可能性があるので、見直してください。

【画面 12】バッチファイルの実行④Java バージョンの確認「java -version」と入力し、Java のバージョン確認をします。画面 14 のようにバージョンが表示されれば OK です。もし、NG ならば CHaser2011.bat を見直してください。

「java –version」と入力するバージョンが表示されればＯＫ【画面 13】java バージョンの確認

５ 競技部品のダウンロード①競技部品のダウンロード先
全国情報技術教育研究会のホームページから、競技部品（edu2010.jar と sample01.map）をダウンロードします。
http://zenjouken.com/contest/2011/右クリックして、「対象をファイルに保存」を選択【画面 14】全情研ホームページ（画面は昨年度のものです）②競技部品の保存先
ダウンロードした「edu2010.jar」と「sample01.map」は program フォルダに保存します。
なお、「edu2010.zip」という名前でダウンロードされた場合は「edu2010.jar」とファイル名の変更を行ってください。

【画面 15】ファイルの保存先

６ サンプルプログラム１の作成①サンプルプログラムの保存先
program フォルダの下に「sample2011_01」という名前のフォルダを作り、次のプログラムをエディタで入力します。プログラム名は「sample2011_01.java」です。

【画面 16】sample2011_01.java の保存先
②サンプルプログラム１（sample2011_01.java）
・次の 4 つの動作を繰り返すプログラムです。
・searchUp( ) → searchRight( ) → searchDown( ) → searchLeft ( ) → ・・・
・4 方向をサーチするだけなので制限ターンになるまで動き続けます。
1/****************************************************

2

sample2011_01.java

3******************************************************/

4

public class sample2011_01 {5

public static void main(String[] args) {6int[] value;

7

value = new int[10];89/********** 競技サーバに接続する **********/

10

edu.procon.Connect2010 target;

11

target = new edu.procon.Connect2010("全プロ", Integer.parseInt(args[0]));12while (true) {1314// STEP1

15

value = target.getReady( );16if (value[0] == 0) break;17

value = target.searchUp( );18if (value[0] == 0) break;19
20// STEP2

21

value = target.getReady( );22

if (value[0] == 0) break;23

value = target.searchRight( );24

if (value[0] == 0) break;25
26// STEP3

27

value = target.getReady( );28

if (value[0] == 0) break;29

value = target.searchDown( );30

if (value[0] == 0) break;31
32// STEP4

33

value = target.getReady( );34

if (value[0] == 0) break;35

value = target.searchLeft( );36

if (value[0] == 0) break;

37}

38

/********** 競技サーバから切断する **********/

39

target.exit( );
}

4041}

③プログラムのコンパイル
・CHaser2011.bat をダブルクリックします。
・次の①から⑥にしたがってコマンドを入力し、コンパイルします。
・エラーが出たら、プログラムをチェックし、上書き保存してから再度コンパイルします。
①sample2011_01
フォルダに移動する②フォルダ内のファイル一覧を表示させる③sample2011_01.javaがあることを確認する④コンパイルする⑤フォルダ内のファイル一覧を表示させる⑥sample2011_01.classがあることを確認する【画面 17】コンパイル

７ プログラムの実行
CHaser2011 はクライアント／サーバ型の競技なので、画面 17 のように CHaser2011.batで起動したコマンドプロンプトを 3 つ用意します。このとき、左上の競技画面はまだ現れません。
①サーバ画面で次のコマンドを入力し、Enter キーを押します。
java edu.procon.Server2010 –Fsample01.map
マップファイル（sample01.map）が読み込まれ「*** SERVER START ***」と表示し、クライアントからの接続を待ちます。
②クライアント（クール）画面で次のコマンドを入力し、Enter キーを押します。
cd sample2011_01
続いて次のコマンドを入力し、Enter キーを押します。
java sample2011_01 2009
③クライアント（ホット）画面で次のコマンドを入力します。
cd sample2011_01
続いて次のコマンドを入力し、Enter キーを押します。
java sample2011_01 2010
④サーバ画面に「ゲームを開始します。」と表示されたら「Enter キー」を押し競技をスタートさせます。

④競技画面①サーバ画面

②クライアント画面（クール）③クライアント画面（ホット）【画面 18】CHaser2011 実行の様子⑤競技が終了したら、競技画面の右上にある×ボタンで画面を閉じます。
⑥再度、競技を始めるには①から④の操作を繰り返します。

８ 通信の仕様（上級者向け）
Java 以外のプログラム言語や edu.procon.Connect2010 クラスを使わずに取り組む場合、次の手順で通信します。クールのサーバソケットの番号は、"2009"で、ホットは”2010”です。
①サーバと接続後、サーバへチーム名（文字列）を送信します。チーム名の文字列は先頭 4文字が有効です。5 文字目以降は無視されます。また、""を送信した場合、チーム名は自動的に決定され、先攻の場合"Cool"、後攻の場合"Hot"となります。
②サーバが"@"を送信するので、これを受信します。
③サーバに文字列"gr"を送信します（getReady）。文字列の末尾は"¥r¥n"です。
④サーバが送信する制御情報と周囲情報 10 文字分（例："1000000000"）を受信します。
⑤サーバにメソッドをあらわす以下の文字列 2 文字を送信します。Right Left Up Down walkRightLeftUpDown

walk 系

wrwl

wu

wd

look 系

lrllluld

search 系

srslsusd

put 系

prplpupd⑥再度、サーバが送信する情報 10 文字分（例："1000000000"）を受信します。
⑦サーバに文字列"#"を送信します。
⑧以降は、制御情報が 0 になるまで、②から⑦を繰り返します。
クライアント(クール)

競技サーバ

クライアント(ホット)競技サーバに接続（ソケット番号：2009）
チーム名

競技サーバに接続（ソケット番号：2010）
チーム名

＠gr
周囲情報(10 文字)
ターン

メソッド(wl,wr など)
周囲情報(10 文字)#
＠gr
周囲情報(10 文字)
メソッド(wl,wr など)
周囲情報(10 文字)#【図 19】通信手順

ターンAppendix 平成 22 年度本戦説明資料
競技サーバと呼ばれるパソコンに２台のクライアントパソコンがそれぞれネットワークで接続し、サーバプログラムとクライアントの間で通信を行って、クライアント同士が１対１で対戦する形式をとっています。

先に接続したクライアントを Cool と呼び、先攻となります。後から接続したクライアン
トを Hot と呼び、後攻となります。
この対戦は、２ﾗｳﾝﾄﾞ先に勝った方が「勝ち」となります。先攻・後攻の有利不利をなくすために２ﾗｳﾝﾄﾞ目は、先攻・後攻を入れ替えて行います。例えば、１ﾗｳﾝﾄﾞ目が A 高校が Cool、B 高校が Hot だったすると、２ﾗｳﾝﾄﾞ目は Cool、Hot が入れ替わり、B 高校が Cool、A 高校が Hot となります。ですので、Cool が２回連続で勝っても「勝ち」となりませんのでご注意ください。また、１勝１敗のときは、３ﾗｳﾝﾄﾞ目の先攻・後攻は「じゃんけん」で決めます。

Cool、Hot は２次元に広がったマス目を自分のプログラムに従って移動します。また、Cool、Hot がそれぞれ１回ずつ動いたら１ターン終了となります。ターンとは野球で言う「１回の表・裏」に相当します。なお、ターンには制限数があります。

勝敗パターンは 3 つあります。1 つ目は相手の上にブロックを置いた方が勝ちとなります。
フィールド上にいる相手を探し出し、追いかけ、ブロックを置くことが必要となります。
また、自らブロックに体当たりした場合も負けとなります。 2 つ目の勝敗パターンは、制
限ターン内に勝敗がつかなかったとき、拾ったハートの数の多さで決まります。

3 つ目の勝利条件は、相手の上下左右をブロックで囲むことです。自ら四方をブロックで囲むと負けとなりますので注意してください。

競技を行うマップはフィールドと言います。このフィールドは別途大会ルールで指定された大きさで行います。なお、対戦が始まったとき、Cool、Hot、ブロック、ハートの初期位置は全て点対称に配置されます。