Step3:ターンを考慮したコマ選択機能

該当するターンのコマを選択(クリック)すると,そのコマが赤くなる機能

全タスク一覧

[Task3-1]AbstractKomaクラスの更新

[Task3-2]GameStatusクラスの作成

[Task3-3]KomaListクラスの更新

[Task3-4]Boardクラスの更新

[Task3-5]Doubutsu.pdeの更新

タスク間の依存関係

  • Task3-1,3-2,3-3はこの順に実施すること
  • クリックによってLeft側のコマが赤くなるかどうかはTask3-4終了時に確認できる

担当者決定

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

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

[Task3-1]AbstractKomaクラスの更新

実施内容

AbstractKomaクラスのdraw()メソッドを更新し,drawSelected()メソッドを追加する

  • draw()メソッドの最後に「対象のコマが選択されていれば,this.drawSelected()を呼び出す」という処理を追加する
  • 選択されているコマがあるマス目を赤く塗るdrawSelected()メソッドを追加する

AbstractKomaクラス

  void draw() {
    String komaImage = "";
    if (this.team==0 && this.kStat.active) komaImage = this.name+"A.png";
    else if (this.team==1 && this.kStat.active) komaImage = this.name+"B.png";
    else return;

    PImage img = loadImage(komaImage);
    image(img, SQUARESIZE*this.x+2, this.y*SQUARESIZE+2, SQUARESIZE-4, SQUARESIZE-4);

    if (this.kStat.selected) this.drawSelected();
  }

  void drawSelected() {
    fill(#FF0000, SQUARESIZE);
    rect(this.x*SQUARESIZE, this.y*SQUARESIZE, SQUARESIZE, SQUARESIZE);
  }

レビュー項目

  • AbstractKomaクラスのdraw()メソッドとdrawSelected()メソッドが↑の内容になっていることを確認する.
  • コマの色が変わるかどうかはTask3-5で確認する.

[Task3-2]GameStatusクラスの作成

実施内容

GameStatusクラスを作成する

  • int型の変数turnをフィールドとして持つ.Left/Rightどちらのターンであるかを示す.0がLeft,1がRight.初期値は0(すなわちLeft側からゲームをスタートする).
class GameStatus {
  int turn = 0;
}

レビュー項目

  • GameStatusクラスが↑と一致していることを確認する

[Task3-3]KomaListクラスの更新

実施内容

KomaListクラスにgetSelectedKoma()メソッド,select()メソッドとgetKomaFromPlaceByTeam()メソッドを追加する

  • getSelectedKoma()メソッドでは,komaArrayにあるすべてのコマの中から,選択されているもの(kStat.selectedがtrueのもの)を探し,返す.
  • select()メソッドでは,クリックされた座標(x,y)に,そのターンのチーム(Left/Right)に属するコマが存在したとき,そのコマのkStat.selectedをtrueに変更する.
  • getKomaFromPlaceByTeam()メソッドはクリックされた座標(x,y)に存在するそのターンのチームに属するコマを返す.
  • このタスクの下記KomaListクラスのselectメソッドにおいて,gs.turnの箇所でコンパイルエラーが発生する.このコンパイルエラーはTask3-5が完了しなければ取れない(GameStatusの宣言をDoubutsu.pdeで行っているため).

KomaListクラス

  AbstractKoma getSelectedKoma() {
    for (AbstractKoma k : komaArray) {
      if (k.kStat.selected) return k;
    }
    return null;
  }

  void select(int x, int y) {
    AbstractKoma koma = this.getKomaFromPlaceByTeam(x, y, gs.turn);
    if (koma != null) koma.kStat.selected=true;
  }

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

レビュー項目

  • KomaListクラスのgetSelectedKoma()メソッド,select()メソッドとgetKomaFromPlaceByTeam()メソッドが↑と一致することを確認する.

[Task3-4]Boardクラスの更新

実施内容

Boardクラスにselect()メソッドを追加する

  • select()メソッドでは,KomaListクラスのインスタンスkomaListのgetSelectedKoma()メソッドを利用して,既に選択されているコマ(ある場合)を取得する.選択済みのコマがない場合は座標(x,y)に存在するそのターン(Left/Right)に属するコマを選択するため,komaListのselect(x,y)を呼び出す.ある場合は選択済みのコマの選択状態を解除する.
    • つまり,何か選択されたコマがあれば,どこをクリックしても選択状態が解除される.

Boardクラス

  void select(int x, int y){
    AbstractKoma koma = komaList.getSelectedKoma();
    if(koma==null){
      komaList.select(x,y);
    }else{
      koma.kStat.selected=false;
    }
  }

レビュー項目

  • Boardクラスのselect()メソッドが↑と一致することを確認する.

[Task3-5]Doubutsu.pdeクラスの更新

実施内容

Doubutsu.pdeにmouseReleased()メソッドを追加し,GameStatusクラスのインスタンス生成処理を追加する

  • Processingではマウスがクリックされ,話されるときに,mouseReleased()メソッドが呼び出される.その機能を利用し,どこをクリックしたかを取得し,選択処理を行う.
  • mouseX, mouseYにはマウスでクリックされた場所のピクセル座標が入るため,それをそれぞれSQUARESIZEで割り,x,y に代入する
  • x, yをBoardクラスのインスタンスboardのselect()メソッドに渡す. 冒頭にGameStatusクラスの変数gsの宣言を追加する setup()メソッド内にgsの初期化処理を追加する

Doubutsu.pde

final int SQUARESIZE = 100;
Board board;
KomaList komaList;
GameStatus gs;

void setup() {
  surface.setSize(6*SQUARESIZE, 4*SQUARESIZE);
  board = new Board();
  komaList = new KomaList();
  gs = new GameStatus();
}

void draw() {
  board.draw();
  komaList.draw();
}

void mouseReleased() {
  int x = mouseX/SQUARESIZE;
  int y = mouseY/SQUARESIZE;
  board.select(x, y);
}

レビュー項目

  1. 正常に実行可能で,Leftに属するコマを選択すると下記のように赤くなり,もう一度盤面上の任意の箇所を選択すると赤いのが戻ることを確認する
  2. コマが選択されていない状態で,Rightに属するコマを選択しても赤くならないことを確認すること

results matching ""

    No results matching ""