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;
}
レビュー項目
- 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;//空きが無い場合
}
レビュー項目
- MochigomaAreaクラスの
getBlankYIndex()
メソッドが↑上記と同じであることを確認する
[Task5-3]AbstractKomaクラスの更新
実施内容
AbstractKomaクラスのmove()
メソッドとupdatePos()
メソッドを更新し,moveAndCapture()
メソッド,captured()
メソッドを追加する
move()
メソッド- まず移動先(toX, toY)に存在するコマを取得する
- もし移動先にコマが無い場合は
updatePos()
メソッドを呼び出す - 移動先にコマがあり,かつ,そのコマの所属チームが現在のturnのチームと異なっている場合,
moveAndCapture()
メソッドを呼び出す.
updatePos()
メソッド- そのコマの
kStat.captured
をfalse
にする処理を追加する(持ちゴマからBaseAreaに置かれた場合にcaptured
をfalse
にする必要が有るため).
- そのコマの
moveAndCapture()
メソッドupdatePos()
メソッドを呼び出す.- もし,移動先に敵のコマがある場合,敵のコマの
captured()
メソッドを呼び出す
captured()
メソッド- そのコマの
kStat.captured
をtrue
にする - そのコマの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;
}
レビュー項目
- Leftからスタートし,Left側のコマを移動した後,Right側のコマが移動できるようになることを確認する
- コマを敵のコマが存在するマス目に移動すると,そのコマが取得され,自陣の持ちゴマエリアに移動することを確認する
- コマ移動時に自陣のコマが存在するマス目には移動できないことも確認すること