Step5:コマ取得機能

コマの移動先に敵のコマが合った場合に,そのコマを取り,自分の持ちゴマ表示エリアに移動する機能.

全タスク一覧

[Task5-1]KomaListクラスの更新

[Task5-2]MochigomaAreaクラスの更新

[Task5-3]AbstractKomaクラスの更新

タスク間の依存関係

  • Task5-1,5-2,5-3はこの順に実施すること

担当者決定

担当者を決定する.開発担当とレビュー担当をTask毎に決定し,記述すること.なお,特定のTaskについて,開発者とレビュアーを同じ人がやってはいけない.また,複数のTaskを一人でまとめて実施しても構わないが,Step毎に最低2人は開発を担当すること.

Task 5-1 Task 5-2 Task 5-3
開発
レビュー  

[Task5-1]KomaListクラスの更新

実施内容

KomaListクラスのgetKomaFromPlace()メソッドを追加する.

  • getKomaFromPlace()メソッドでは,座標(x,y)に存在するコマがあるときに,そのコマのインスタンスを返す(無い場合はnullを返す).

KomaListクラス

  AbstractKoma getKomaFromPlace(int x, int y) {
    for (AbstractKoma k : this.komaArray) {
      if (x == k.x && y == k.y && k.kStat.active) return k;
    }
    return null;
  }

レビュー項目

  1. KomaListクラスのgetKomaFromPlace()メソッドが↑上記と同じであることを確認する

[Task5-2]MochigomaAreaクラスの更新

実施内容

MochigomaAreaクラスにgetBlankYIndex()メソッドを追加する.

  • getBlankYIndex()メソッドでは,現在のturn(Left=0, Right=1)のteamの持ちゴマエリアを探索し,コマが置いていないマス目のy座標を返す
  • ここで,持ちゴマエリアにコマが存在するかどうかはKomaListクラスのインスタンスであるkomaList.getKomaFromPlace()メソッドを利用する.
  • 空きが持ちゴマエリアに無い場合は-1を返す.

MochigomaAreaクラス

  int getBlankYIndex() {
    for (int i=this.posY; i<this.posY+this.tate; i++) {
      AbstractKoma koma = komaList.getKomaFromPlace(this.posX, i);
      if (koma==null) return i;
    }
    return -1;//空きが無い場合
  }

レビュー項目

  1. MochigomaAreaクラスのgetBlankYIndex()メソッドが↑上記と同じであることを確認する

[Task5-3]AbstractKomaクラスの更新

実施内容

AbstractKomaクラスのmove()メソッドとupdatePos()メソッドを更新し,moveAndCapture()メソッド,captured()メソッドを追加する

  • move()メソッド
    • まず移動先(toX, toY)に存在するコマを取得する
    • もし移動先にコマが無い場合はupdatePos()メソッドを呼び出す
    • 移動先にコマがあり,かつ,そのコマの所属チームが現在のturnのチームと異なっている場合,moveAndCapture()メソッドを呼び出す.
  • updatePos()メソッド
    • そのコマのkStat.capturedfalseにする処理を追加する(持ちゴマからBaseAreaに置かれた場合にcapturedfalseにする必要が有るため).
  • moveAndCapture()メソッド
    • updatePos()メソッドを呼び出す.
    • もし,移動先に敵のコマがある場合,敵のコマのcaptured()メソッドを呼び出す
  • captured()メソッド
    • そのコマのkStat.capturedtrueにする
    • そのコマのteamを反転する
    • 取られたコマの座標yを持ちゴマエリアのgetBlankYIndex()を利用して取得する.
    • 取られたコマの座標xを持ちゴマエリアのposXに設定する.

AbstractKomaクラス

  void move(int toX, int toY) {
    AbstractKoma koma = komaList.getKomaFromPlace(toX, toY);
    if (koma==null) this.updatePos(toX, toY);
    else if (koma.team != gs.turn) this.moveAndCapture(koma, toX, toY);
  }

  void updatePos(int toX, int toY) {
    this.x=toX;
    this.y=toY;
    this.kStat.captured=false;
    gs.turn = (gs.turn+1)%2;
  }

  void moveAndCapture(AbstractKoma enemy, int toX, int toY) {
    this.updatePos(toX, toY);
    if (enemy!=null) enemy.captured();
  }

  void captured() {
    this.kStat.captured=true;
    this.team = (this.team+1)%2;
    this.y = board.mArea[this.team].getBlankYIndex();
    this.x = board.mArea[this.team].posX;
  }

レビュー項目

  1. Leftからスタートし,Left側のコマを移動した後,Right側のコマが移動できるようになることを確認する
  2. コマを敵のコマが存在するマス目に移動すると,そのコマが取得され,自陣の持ちゴマエリアに移動することを確認する
  3. コマ移動時に自陣のコマが存在するマス目には移動できないことも確認すること

results matching ""

    No results matching ""