Step2:コマ表示機能
全種類のコマを指定した初期配置に表示する機能
全タスク一覧
[Task2-1]AbstractKomaクラスとKomaStatusクラスの作成
[Task2-2-a]Hiyokoクラスの作成
[Task2-2-b]Zouクラスの作成
[Task2-2-c]Kirinクラスの作成
[Task2-2-d]Lionクラスの作成
[Task2-2-e]Niwatoriクラスの作成
[Task2-2-f]コマ画像データの登録
[Task2-3]KomaListクラスの作成
[Task2-4]Doubutsu.pdeの更新
タスク間の依存関係
- Task2-1,2-2-*,2-3,2-4はこの順に実施すること
- Task2-2-a~fはTask2-1終了後いつ,どの順序で実施してもよい(ただしTask2-3で必要なクラスがあるので,Task2-3より前に実装は完了させること).
- すべてのコマが正常に表示されるかどうかはTask2-4完了時に確認できる.
担当者決定
担当者を決定する.開発担当とレビュー担当をTask毎に決定し,記述すること.なお,特定のTaskについて,開発者とレビュアーを同じ人がやってはいけない.また,複数のTaskを一人でまとめて実施しても構わないが,Step毎に最低2人は開発を担当すること.
Task 2-1 | Task 2-2-a | Task 2-2-b | Task 2-2-c | Task 2-2-d | Task 2-2-e | Task 2-2-f | Task 2-3 | Task 2-4 | |
---|---|---|---|---|---|---|---|---|---|
開発 | |||||||||
レビュー |
[Task2-1]AbstractKomaクラスとKomaStatusクラスの作成
実施内容
KomaStatusクラスを作成する
- すべてのコマの持つステータスを保持するクラス
- booleanの変数captured, active, selectedをフィールドに持つ
- captured:そのコマが取られているか取られていないか
- active:そのコマが盤面(持ち駒エリアも含めて)に存在するか
- selected:そのコマがクリックされているか
- activeの初期値を引数に取るコンストラクタを持つ
- ニワトリのみ最初は盤面に現れない(ひよこが進化してはじめて現れる)ため,activeの値のみコンストラクタの引数で指定する.
- captured, selectedは初期値はかならずfalseなので,コンストラクタで初期化する.
class KomaStatus {
boolean captured;
boolean active;
boolean selected;
KomaStatus(boolean active) {
this.active = active;
this.captured = false;
this.selected = false;
}
}
AbstractKomaクラスを作成する
- Hiyoko, Kirin等のすべてのコマクラスが継承するクラス.
- すべてのコマクラスで必要なメソッドを備えている
- String型のコマ名(name),int型の座標(x,y),int型のteam(Leftが0でRightが1),KomaStatusクラスのkStatをフィールドとして持つ
- name, x, y, team,activeを引数に取り,初期化するコンストラクタを持つ
draw()
メソッドには座標(x,y)の場所に指定されたnameのコマを表示する処理を実装する- すべてのコマには右向きと左向きがあり,team名によって決定される.teamが0(Left)の場合はコマ名+A.png,teamが1の場合はコマ名+B.pngがコマのファイル名になる.
- コマは座標(x,y)のマス内に少し小さいサイズで配置するようになっている(背景色が見えるようにするため)
abstract class AbstractKoma {
String name;
int x;
int y;
int team;//0 or 1
KomaStatus kStat;
AbstractKoma(String name, int x, int y, int team, boolean active) {
this.name = name;
this.x = x;
this.y = y;
this.team = team;
this.kStat = new KomaStatus(active);
}
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);
}
}
レビュー項目
- 正常に実行が可能であり,Step1完了時と同じ画面が表示されることを確認する
- AbstractKomaクラス,KomaStatusクラスの内容が↑と同一(の処理)であることを確認する
draw()
メソッドの動作確認はTask2-3で行うため,ここでチェックしなくても良い.
[Task2-2-a]Hiyokoクラスの作成
実施内容
Hiyokoクラスを作成する
- AbstractKomaクラスを継承する.
- 親クラス(AbstractKomaクラス)で定義されたname, x, y, teamの各変数を親クラスのコンストラクタ(
super(String name, int x, int y, int team)
)を利用して初期化する.
class Hiyoko extends AbstractKoma {
Hiyoko(String name, int x, int y, int team, boolean active) {
super(name, x, y, team, active);
}
}
レビュー項目
- 正常に実行が可能であり,Step1完了時と同じ画面が表示されることを確認する
- Hiyokoクラスの内容が↑と同一(の処理)であることを確認する
[Task2-2-b]Zouクラスの作成
実施内容
Zouクラスを作成する
- AbstractKomaクラスを継承する.
- 親クラス(AbstractKomaクラス)で定義されたname, x, y, teamの各変数を親クラスのコンストラクタ(
super(String name, int x, int y, int team)
)を利用して初期化する.
class Zou extends AbstractKoma {
Zou(String name, int x, int y, int team, boolean active) {
super(name, x, y, team, active);
}
}
レビュー項目
- 正常に実行が可能であり,Step1完了時と同じ画面が表示されることを確認する
- Zouクラスの内容が↑と同一(の処理)であることを確認する
[Task2-2-c]Kirinクラスの作成
実施内容
Kirinクラスを作成する
- AbstractKomaクラスを継承する.
- 親クラス(AbstractKomaクラス)で定義されたname, x, y, teamの各変数を親クラスのコンストラクタ(
super(String name, int x, int y, int team)
)を利用して初期化する.
class Kirin extends AbstractKoma {
Kirin(String name, int x, int y, int team, boolean active) {
super(name, x, y, team, active);
}
}
レビュー項目
- 正常に実行が可能であり,Step1完了時と同じ画面が表示されることを確認する
- Kirinクラスの内容が↑と同一(の処理)であることを確認する
[Task2-2-d]Lionクラスの作成
実施内容
Lionクラスを作成する
- AbstractKomaクラスを継承する.
- 親クラス(AbstractKomaクラス)で定義されたname, x, y, teamの各変数を親クラスのコンストラクタ(
super(String name, int x, int y, int team)
)を利用して初期化する.
class Lion extends AbstractKoma {
Lion(String name, int x, int y, int team, boolean active) {
super(name, x, y, team, active);
}
}
レビュー項目
- 正常に実行が可能であり,Step1完了時と同じ画面が表示されることを確認する
- Lionクラスの内容が↑と同一(の処理)であることを確認する
[Task2-2-e]Niwatoriクラスの作成
実施内容
Niwatoriクラスを作成する
- AbstractKomaクラスを継承する.
- 親クラス(AbstractKomaクラス)で定義されたname, x, y, teamの各変数を親クラスのコンストラクタ(
super(String name, int x, int y, int team)
)を利用して初期化する.
class Niwatori extends AbstractKoma {
Niwatori(String name, int x, int y, int team, boolean active) {
super(name, x, y, team, active);
}
}
レビュー項目
- 正常に実行が可能であり,Step1完了時と同じ画面が表示されることを確認する
- Niwatoriクラスの内容が↑と同一(の処理)であることを確認する
[Task2-2-f]コマ画像データの登録
実施内容
盤面に表示するコマ画像データをDoubutsuディレクトリ内に配備する
- Doubutsuディレクトリにdataという名前のフォルダを作成する.
- 下記URLよりコマ画像をダウンロードし,dataフォルダ内に置く(なお,自分で描いたものなら,別途用意しても構わない).
- https://www.dropbox.com/s/c9s76rxgvjqyqoo/doubutsu_icon.zip?dl=1
- hiyokoA.png, hiyokoB.png, kirinA.png, kirinB.png, zouA.png, zouB.png, lionA.png, lionB.png, niwatoriA.png, niwatoriB.png
- 上記10個のファイルをdataフォルダ内に直接置くこと
レビュー項目
- 10種類の画像すべてがDoubutsuフォルダ内のdataフォルダに直接置かれていることを確認する
[Task2-3]KomaListクラスの作成
実施内容
KomaListクラスを作成する
- フィールドとしてAbstractKomaクラスの配列
komaArray
をサイズ10で初期化する. - コンストラクタでkomaArrayにLeft,Right双方5種類ずつのコマを対応するオブジェクトを指定して格納する.コマの初期配置は仕様を参照すること.例えばLeftのhiyoko初期配置は(2,1)(すなわち左から3マス目,上から2マス目)になる.
draw()
メソッドは拡張for文を利用して,komaArrayに含まれる各コマのdraw()
メソッドを順に呼び出し,描画する.
class KomaList {
AbstractKoma[] komaArray = new AbstractKoma[10];
KomaList() {
komaArray[0] = new Hiyoko("hiyoko", 2, 1, 0, true);
komaArray[1] = new Hiyoko("hiyoko", 3, 1, 1, true);
komaArray[2] = new Zou("zou", 1, 0, 0, true);
komaArray[3] = new Zou("zou", 4, 2, 1, true);
komaArray[4] = new Kirin("kirin", 1, 2, 0, true);
komaArray[5] = new Kirin("kirin", 4, 0, 1, true);
komaArray[6] = new Lion("lion", 1, 1, 0, true);
komaArray[7] = new Lion("lion", 4, 1, 1, true);
komaArray[8] = new Niwatori("niwatori", 0, 0, 0, false);
komaArray[9] = new Niwatori("niwatori", 5, 0, 1, false);
}
void draw() {
for (AbstractKoma k : komaArray) {
k.draw();
}
}
}
レビュー項目
- 正常に実行が可能であり,Step1完了時と同じ領域が表示されることを確認する
- KomaListクラスの内容が↑と同一(の処理)であることを確認する
draw()
メソッドの動作確認はTask2-3で行うため,ここでチェックしなくても良い.
[Task2-4]Doubutsu.pdeの更新
実施内容
Doubutsu.pdeを更新する
- KomaListクラスの変数komaListを冒頭で宣言する
setup()
メソッド内でkomaListを初期化するdraw()
内でkomaList.draw()
を呼び出し,3エリアを描画する
final int SQUARESIZE = 100;
Board board;
KomaList komaList;
void setup() {
surface.setSize(6*SQUARESIZE, 4*SQUARESIZE);
board = new Board();
komaList = new KomaList();
}
void draw() {
board.draw();
komaList.draw();
}
レビュー項目
- 正常に実行が可能であり,下記のようにすべてのコマが正しい位置に表示されることを確認する
- コマの位置や向きが正しいことをよく確認すること