Lesson2:ゲーム開始前に所定の位置に移動する.

このlessonでのポイント:

サッカーサーバは,Soccerserverを起動するときのconfiguration fileで指定されるsimulator_stepの間隔で フィールドの状況を変化させます.
  1. サッカーサーバはrecv_step間隔でプレィヤエージェントにsee情報を 送る.
  2. プレィヤエージェントは周りの状況から自分の動きをきめ,
    1. ボールを見失った時はボールを探す,
    2. シュートチャンスの時はシュートする,
    3. マンドをサッカーサーバに送る
  3. 対応するturn, dash, kickコマンドをサッカーサーバ に送る.
  4. サッカーサーバは,
    1. プレイヤの位置や蹴られたボールの動きを力学法則に従って計算する,
    2. レフリーとして スローインやコーナーキック,ゴールなどを判断する.
このほか,ゲームの進行にあたってはプレィヤエージェントは レフリーの指示 (free_kick, corner_kick, offsideなど)をhear情報として聞き,動く機能が必要があります.
今回は, について説明します.

moveコマンドによる試合開始前の移動(v2のソースプログラム):

Clientクラスは,開始時の引数のチェックだけにし,新たにPlayerクラスを準備します.

Playerプログラムの説明:

行13-34:

クラス変数の定義,行13のDEBUGは,処理の流れを理解するために最初はtrueで実行してください.
その後は,falseにしてください.
行22-34は,プレィヤの初期位置を 配列initial_posに設定しています.
配列の添字は,0からはじまる.
ここではプレィヤ番号(1〜11)と対応させるため,最初はダミーの要素にします.
行35-99:
通信に関係する部分を,connect,send,receiveの3つのメソッドに整理しました.


行100-114:

センタの位置から,ゲーム開始前の位置にホップ,ステップ,ジャンプの感じで移動します.


プログラムの実行:

ゲーム開始前の位置に移動をみて,サッカーフィールドにおける位置を確認してください.
最初(左,黄色チーム)と,後(右,赤色チーム)のチームの両方でconnectして下さい.
原点はフィールドの真中,
x軸は,ゴール方向でセンタから相手ゴールが正方向,
y軸の正方向は,x軸正方向にむいて右手です.

次に,移動していく途中でまで,see情報を表示します.
 (see 0 ((goal r) 59.1 2) ((flag r t) 67.4 -27) ((flag r b) 69.4 31) ((flag p r t) 46.5 -22) ((flag p r c) 42.9 3) ((flag p r b) 48.4 27) ((ball) 7.4 20 0 0) ((player Nippon 5) 6.7 -12 0 0) ((player Nippon 6) 6.7 21 0 0) ((line r) 59.1 -90))

"see"で,see情報とhear情報の区別をします.
次の数字は,時刻を示します.今,ゲーム開始なので,'0'になっています.
次からが見えるオブジェトの名前と距離と方向などの情報です.
このlessonでは,"flag"と"line"を説明します.

manual Fig.31
  実行リスト

プログラムリスト:

Client.java

Player.java

プログラム参考: