Step7:移動ルール制約の追加

すべてのコマは移動可能なマス目がルールによって定められている(例:ひよこは自分の正面に1マスしか進めない).本Stepでは,すべてのコマについてそのルールを実装し,ルールで定められた箇所以外には進めないようにする.

全タスク一覧

[Task7-1]AbstractAreaクラスの更新

[Task7-2]KomaStatusクラスの更新

[Task7-3-a]Hiyokoクラスの更新

[Task7-3-b]Kirinクラスの更新

[Task7-3-c]Lionクラスの更新

[Task7-3-d]Zouクラスの更新

[Task7-3-e]Niwatoriクラスの更新

[Task7-4]AbstractKomaクラスの更新

タスク間の依存関係

  • Task7-1,7-2,7-3-*,7-4はこの順に実施すること.ただしTask7-3-a~eはTask7-1,7-2が終わっていればどの順に実施しても構わない.Task7-4はTask7-3-a~eすべてが完了後に実施すること.
  • コマの制約が正常に動作するかはTask7-4終了時に確認できる

担当者決定

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

Task 7-1 Task 7-2 Task 7-3-a Task 7-3-b Task 7-3-c Task 7-3-d Task 7-3-e Task 7-4
開発
レビュー  

[Task7-1]AbstractAreaクラスの更新

実施内容

AbstractAreaクラスに指定した座標がそのエリア内であるかをtrue/falseで返すisInThisArea()メソッドを追加する

  • isInThisArea()メソッドは,そのエリアのposX,posY,tate,yokoの値を用いて,指定した座標(x,y)がそのエリア内にいるかどうかをtrue/falseで返す.

AbstractAreaクラス

  boolean isInThisArea(int x, int y) {
    if (x>=this.posX && x<this.posX+this.yoko && y>=this.posY && y<this.posY+this.tate) return true;
    else return false;
  }

レビュー項目

  1. 正常に実行することが可能で,AbstractAreaクラスのisInThisArea()メソッドが↑と同じ処理であるかを確認する

[Task7-2]KomaStatusクラスの更新

実施内容

KomaStatusクラスにそのコマが取られたコマであるかどうかを示すisCaptured()を追加する

  • isCaptured()メソッドは,activeとcapturedの両方がtrueのときに,返り値としてtrueを返す.つまり,盤面に存在しており(active=true),持ちゴマエリアにいる(captured=true)場合にtrueを返す

KomaStatus

  boolean isCaptured() {
    return this.active && this.captured;
  }

レビュー項目

  1. 正常に実行することが可能で,KomaStatusクラスのisCaptured()メソッドが↑と同じ処理であるかを確認する

[Task7-3-a]Hiyokoクラスの更新

実施内容

Hiyokoクラスに,指定したマスにそのHiyokoが移動可能であるかをtrue/falseで返すcanMove()メソッドを追加する.

  • canMove()メソッドでは下記の条件をチェックし,true/falseを返す
    • 移動先の座標(toX, toY)がBaseArea内でなければfalseを返す
    • Hiyokoは前方1マスにのみ移動できるため,Left側/Right側それぞれの場合において,移動先が現在のコマの場所の1コマ先である場合のみtrueを返す
    • 上記の条件をどれも満たさない場合はfalseを返す

Hiyokoクラス

  boolean canMove(int toX, int toY) {

    if (!board.bArea.isInThisArea(toX,toY)) return false;

    if (this.team == 0 && toX-this.x==1 && toY-this.y==0) return true;
    else if (this.team == 1 && this.x-toX==1 && toY-this.y==0) return true;

    return false;
  }

レビュー項目

  1. 正常に実行が可能であり,HiyokoクラスのcanMove()メソッドが↑と同一の処理であることを確認する.

[Task7-3-b]Kirinクラスの更新

実施内容

Kirinクラスに,指定したマスにそのKirinが移動可能であるかをtrue/falseで返すcanMove()メソッドを追加する.

  • canMove()メソッドでは下記の条件をチェックし,true/falseを返す
    • 移動先の座標(toX, toY)がBaseArea内でなければfalseを返す
    • Kirinは前後左右に1マス移動できるため,現在の場所と移動先の関係が前後左右いずれかの方向に1マスのみ移動している場合にtrueを返す
    • 上記の条件をどれも満たさない場合はfalseを返す

Kirinクラス

  boolean canMove(int toX, int toY) {

    if (!board.bArea.isInThisArea(toX,toY)) return false;

    if (abs(toX-this.x)+abs(toY-this.y) ==1) return true;

    return false;
  }

レビュー項目

  1. 正常に実行が可能であり,KirinクラスのcanMove()メソッドが↑と同一の処理であることを確認する.

[Task7-3-c]Lionクラスの更新

実施内容

Lionクラスに,指定したマスにそのLionが移動可能であるかをtrue/falseで返すcanMove()メソッドを追加する.

  • canMove()メソッドでは下記の条件をチェックし,true/falseを返す
    • 移動先の座標(toX, toY)がBaseArea内でなければfalseを返す
    • Lionは前後左右斜めに1マス移動できるため,現在の場所と移動先の関係が前後左右斜めいずれかの方向に1マスのみ移動している場合にtrueを返す
    • 上記の条件をどれも満たさない場合はfalseを返す

Lionクラス

  boolean canMove(int toX, int toY) {

    if (!board.bArea.isInThisArea(toX,toY)) return false;

    if (abs(toX-this.x) <= 1 && abs(toY-this.y) <=1) return true;

    return false;
  }

レビュー項目

  1. 正常に実行が可能であり,LionクラスのcanMove()メソッドが↑と同一の処理であることを確認する.

    レビュー項目


[Task7-3-d]Zouクラスの更新

実施内容

Zouクラスに,指定したマスにそのZouが移動可能であるかをtrue/falseで返すcanMove()メソッドを追加する.

  • canMove()メソッドでは下記の条件をチェックし,true/falseを返す
    • 移動先の座標(toX, toY)がBaseArea内でなければfalseを返す
    • Zouは斜め方向に1マス移動できるため,現在の場所と移動先の関係がいずれかの斜め方向に1マスのみ移動している場合にtrueを返す
    • 上記の条件をどれも満たさない場合はfalseを返す

Zouクラス

  boolean canMove(int toX, int toY) {

    if (!board.bArea.isInThisArea(toX,toY)) return false;

    if (abs(toX-this.x) ==1 && abs(toY-this.y) ==1) return true;

    return false;
  }

レビュー項目

  1. 正常に実行が可能であり,ZouクラスのcanMove()メソッドが↑と同一の処理であることを確認する.

[Task7-3-e]Niwatoriクラスの更新

実施内容

Niwatoriクラスに,指定したマスにそのNiwatoriが移動可能であるかをtrue/falseで返すcanMove()メソッドを追加する.

  • canMove()メソッドでは下記の条件をチェックし,true/falseを返す
    • 移動先の座標(toX, toY)がBaseArea内でなければfalseを返す
    • Niwatoriは斜め後ろ以外のすべての方向に1マス移動できるため,現在の場所と移動先の関係が斜め後ろでない場合にtrueを返す
    • 上記の条件をどれも満たさない場合はfalseを返す

Niwatoriクラス

  boolean canMove(int toX, int toY) {
    if (!board.bArea.isInThisArea(toX,toY)) return false;

    if (this.team==0 && abs(toX-this.x)<=1 && abs(toY-this.y)<=1 && (this.x-toX+abs(this.y-toY))<2) return true;
    if (this.team==1 && abs(toX-this.x)<=1 && abs(toY-this.y)<=1 && (toX-this.x+abs(this.y-toY))<2) return true;

    return false;
  }

レビュー項目

  1. 正常に実行が可能であり,NiwatoriクラスのcanMove()メソッドが↑と同一の処理であることを確認する.

[Task7-4]AbstractKomaクラスの更新

実施内容

AbstractKomaクラスに抽象メソッドcanMove()を追加し,move()メソッドをcanMove()メソッドを利用するように変更する

  • 抽象(abstract)メソッド canMove()を追加する
    • 抽象メソッドを追加することで,AbstractKomaクラスを継承するすべてのクラスで,このメソッドが実装されることを保証できる.
  • move()メソッドでは以下の処理を実装する
    • 取られたコマは任意のマス(コマが配置されていないマスに限る)にコマを置くことができる.
    • BaseAreaにあるコマはcanMove()メソッドからtrueが返ってきた場合に限り,相手のコマの取得及び移動を行うことができる

AbstractKomaクラス

  abstract boolean canMove(int toX, int toY);

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

レビュー項目

  1. 正常に実行できるか確認する
  2. Hiyokoがルールに則ったマスにのみ移動できるか確認する
  3. Kirinがルールに則ったマスにのみ移動できるか確認する
  4. Lionがルールに則ったマスにのみ移動できるか確認する
  5. Zouがルールに則ったマスにのみ移動できるか確認する
  6. 上記すべてのコマについて,持ちゴマエリアにあるコマがコマの置いていないBaseArea内の任意のマスに移動でき,BaseArea外に移動できないことを確認する
  7. 上記すべてのコマがBaseArea外に移動できないことを確認する

実行例(見え方はこれまでのStepと同じ.コマが移動可能とルールで定められているマス以外には移動できないように実装されていることを確認すること)

results matching ""

    No results matching ""