第1回CodeRallly大会

チュートリアル:サンプルファイル(J05042_渡慶次憲人)

fileRallyCar.java
Expand allFold all
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
 
 
-
!
 
-
|
|
|
-
|
!
-
|
!
|
-
|
!
|
-
|
!
|
-
-
!
!
|
|
-
-
!
-
!
-
-
|
!
-
-
-
-
!
!
-
!
-
!
-
!
|
|
-
-
-
|
-
|
!
-
-
|
-
|
!
!
-
!
-
-
-
-
-
!
-
-
!
!
-
|
!
|
-
|
-
!
-
!
-
-
-
!
-
-
|
-
-
!
-
-
!
!
!
|
|
!
-
!
-
-
-
!
-
-
!
!
|
|
-
-
!
|
|
-
-
!
-
|
|
|
!
|
!
!
|
|
!
|
|
|
!
import com.ibm.rally.Car;
import com.ibm.rally.ICar;
//IObjectクラスの場所を指定
import com.ibm.rally.IObject;
 
public class RallyCar extends Car {
    protected boolean fuel_flag;
    
    IObject rallyCars[];
    /**
     * @see com.ibm.rally.Car#getName()
     */
    public String getName() {
        return "J05042_渡慶次憲人";
    }
 
    public String getSchoolName() {
        return "IE05";
    }
 
    public byte getColor() {
        return CAR_RED;
    }
 
    public void initialize() {
         // 給油中フラグの初期化
        fuel_flag = false;
    }
 
    
    public void move(int lastMoveTime, boolean hitWall, ICar collidedWithCar,ICar hitBySpareTire) {
        // ラリーカーから見たオブジェクトの方向(角度)
        int obj_h;
        // ラリーカーの残燃料を得る
        int car_fuel = getFuel();
        // 残燃料が30以下の場合、給油中フラグをtrueに設定
        if(car_fuel <= 40){
            fuel_flag = true;
        }
        // 残燃料が30以下の場合は最寄りの給油所へ向かう
        if(fuel_flag == true){
            if(car_fuel == 100){
                // 満タンになると給油中フラグをfalseに設定
                fuel_flag = false;
            }
            // 最寄りの給油所
            IObject gas_station;
            // 給油所オブジェクトを得る
            IObject fuel_depo[] = getFuelDepots();
            // 3ヵ所の給油所までの距離を取得
            double fuel0 = getDistanceTo(fuel_depo[0]);
            double fuel1 = getDistanceTo(fuel_depo[1]);
            double fuel2 = getDistanceTo(fuel_depo[2]);
            // 距離を比較して最も近い給油所を特定
            if(fuel0 < fuel1){
                if(fuel0 < fuel2){
                    gas_station = fuel_depo[0];
                }else{
                    gas_station = fuel_depo[2];
                }
            }else{
                if(fuel1< fuel2){
                    gas_station = fuel_depo[1];
                }else{
                    gas_station = fuel_depo[2];
                }
            }
            // 最寄りの給油所までの距離を得る
            double fuel_distance = getDistanceTo(gas_station);
            // 給油所までの距離が100以内であれば減速する
            if(fuel_distance <= 100){
                // 給油可能距離かどうかを判定
                if(fuel_distance <= 25){
                    // スロットル(アクセル)の設定
                    setThrottle(0);
                } else {
                    //スロットル(アクセル)の設定
                    setThrottle(10);
                }
            } else {
                setThrottle(MAX_THROTTLE);
            }
            obj_h = getHeadingTo(gas_station);
        } else {
            int cp_h;
            // チェックポイントのリストを取得
            IObject cp[] = getCheckpoints();
            // 前回通過したチェックポイントを得る
            int prev_cp_index = getPreviousCheckpoint();
            // 前回通過したチェックポイントがあるかを調べる
            if(prev_cp_index == -1){
                // 通過したチェックポイントがなければ向かうチェックポイントをインデックス0に設定
                cp_h = getHeadingTo(cp[0]);
            } else {
                // 通過したチェックポイントがある場合
                // 最後のチェックポイントを通過したかどうかを調べる
                if(prev_cp_index == (cp.length - 1)){
                    // 最後のチェックポイントを通過した場合は次に向かうチェックポイントをインデックス0に設定
                    cp_h = getHeadingTo(cp[0]);
                }else{
                    // 最後のチェックポイントではない場合、次のチェックポイントに設定
                    cp_h = getHeadingTo(cp[(prev_cp_index + 1)]);
                }
            }
            setThrottle(MAX_THROTTLE);
            obj_h = cp_h;
        }
        // ラリーカーが現在進んでいる方向(角度)を取得
        int car_h = getHeading();
        // ラリーカーの進行方向とオブジェクトへの方向を比較する
        if (obj_h < car_h){
            // ステアリング(ハンドル)を左に切る
            setSteeringSetting(MAX_STEER_LEFT);
        } else {
            // ステアリング(ハンドル)を右に切る
            setSteeringSetting(MAX_STEER_RIGHT);
        }
        
        
        if(collidedWithCar != null){
            // 衝突したラリーカーの方向(角度)を取得
            System.out.println("collided!");
            int col_car_h = getHeadingTo(collidedWithCar);
 
            if(((col_car_h - getHeading()) <= 30) | (330 <= (col_car_h - getHeading()))){
                // 衝突したラリーカーとの距離を取得
                double col_car_distance = getDistanceTo(collidedWithCar);
                if(col_car_distance <= 70){
                      enterProtectMode();
                      throwSpareTire();
                      System.out.println("throw SpareTire");
                }
                System.out.println("heading:"+col_car_h+",distance:"+col_car_distance);
            }
        }
        
        
    }
    
    
    
}

第2回CodeRallly大会

  • 次週(1月23日)午後1時までにエントリーしてください.
  • サーバー設定は前回といっしょです.ネットニュースのura.ie.classmates.y05を見てください.

Widget



添付ファイル: fileRallyCar.java 170件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-06-20 (木) 14:45:27 (2285d)