Step1:エリア表示機能
3種類のエリアに領域を塗り分けて表示する機能
全タスク一覧
[Task1-1]AbstractAreaクラスの作成
[Task1-2-a]BaseAreaクラスの作成
[Task1-2-b]MochigomaAreaクラスの作成
[Task1-2-c]InfoAreaクラスの作成
[Task1-3]Boardクラスの作成
[Task1-4]Doubutsu.pdeの更新
タスク間の依存関係
- Task1-1,1-2-*,1-3,1-4はこの順に実施すること
- Task1-2-a,1-2-b,1-2-cはTask1-1終了後いつどの順序で実施してもよい(Task1-3で必要なクラスなので,Task1-3より前に実装は完了させること).
- すべてのエリアが正常に実装されているかはTask1-4完了時に確認できる.
担当者決定
担当者を決定する.開発担当とレビュー担当をTask毎に決定し,記述すること.なお,特定のTaskについて,開発者とレビュアーを同じ人がやってはいけない.また,複数のTaskを一人でまとめて実施しても構わないが,Step毎に最低2人は開発を担当すること.
Task1-1 | Task1-2-a | Task1-2-b | Task1-2-c | Task1-3 | Task1-4 | |
---|---|---|---|---|---|---|
開発 | ||||||
レビュー |
[Task1-1]AbstractAreaクラスの作成
実施内容
AbstractAreaクラスを作成する
- すべての種類のAreaクラスが継承するAbstractAreaクラス.
- エリアの左上座標(poX, posY)と縦幅(tate),横幅(yoko)をフィールドに持つ.
- ただし,これらのフィールドが持つ値は実際のピクセル値ではなく,実際のピクセル値をSQUARESIZEで割ったものとなる.
- SQUARESIZEは正方形のマス目の一片の大きさを表す.今回は100としている.
- コンストラクタではすべての値の初期化をコンストラクタ引数を用いて行う.
- 抽象メソッドとして
draw()
を持つ *AbstractAreaクラスを継承するすべてのクラスで個別に実装すべきメソッド
abstract class AbstractArea {
int posX;
int posY;
int tate;
int yoko;
AbstractArea(int posX, int posY, int yoko, int tate) {
this.posX = posX;
this.posY = posY;
this.yoko = yoko;
this.tate = tate;
}
abstract void draw();
}
レビュー項目
- 正常に実行が可能であり,Step0完了時と同じ領域が表示されることを確認する
- AbstractAreaクラスの内容が↑と同一(の処理)であることを確認する
[Task1-2-a]BaseAreaクラスの作成
実施内容
BaseAreaクラスを作成する
- AbstractAreaクラスを継承する.
- 親クラス(AbstractAreaクラス)で定義されたエリアの左上座標(poX, posY)と縦幅(tate),横幅(yoko)を親クラスのコンストラクタ(
super(int posX, int posY, int yoko, int tate)
)を利用して初期化する. - 親クラスで定義された抽象メソッド
void draw()
を実装する.
class BaseArea extends AbstractArea {
BaseArea(int posX, int posY, int yoko, int tate) {
super(posX, posY, yoko, tate);
}
void draw() {
for (int i=posX; i< posX+yoko; i++) {
for (int j=posY; j< posY+tate; j++) {
fill(#ffffc5);
if (i==posX) fill(#c5ffc5);
else if (i==posX+yoko-1) fill(#c5ffff);
rect(i*SQUARESIZE, j*SQUARESIZE, SQUARESIZE, SQUARESIZE);
}
}
}
}
レビュー項目
- 正常に実行が可能であり,Step0完了時と同じ領域が表示されることを確認する
- BaseAreaクラスの内容が↑と同一(の処理)であることを確認する
draw()
メソッドの動作確認はTask1-4で行うため,ここでチェックしなくても良い.
[Task1-2-b]MochigomaAreaクラスの作成
実施内容
MochigomaAreaクラスを作成する
- AbstractAreaクラスを継承する.
- 親クラス(AbstractAreaクラス)で定義されたエリアの左上座標(poX, posY)と縦幅(tate),横幅(yoko)を親クラスのコンストラクタ(
super(int posX, int posY, int yoko, int tate)
)を利用して初期化する. - 親クラスで定義された抽象メソッド
void draw()
を実装する.
class MochigomaArea extends AbstractArea {
MochigomaArea(int posX, int posY, int yoko, int tate) {
super(posX, posY, yoko, tate);
}
void draw() {
for (int i=posX; i<posX+yoko; i++) {
for (int j=posY; j<posY+tate; j++) {
fill(#dddddd);
rect(i*SQUARESIZE, j*SQUARESIZE, SQUARESIZE, SQUARESIZE);
}
}
}
}
レビュー項目
- 正常に実行が可能であり,Step0完了時と同じ領域が表示されることを確認する
- BaseAreaクラスの内容が↑と同一(の処理)であることを確認する
draw()
メソッドの動作確認はTask1-4で行うため,ここでチェックしなくても良い.
[Task1-2-c]InfoAreaクラスの作成
実施内容
InfoAreaクラスを作成する
- AbstractAreaクラスを継承する.
- 親クラス(AbstractAreaクラス)で定義されたエリアの左上座標(poX, posY)と縦幅(tate),横幅(yoko)を親クラスのコンストラクタ(
super(int posX, int posY, int yoko, int tate)
)を利用して初期化する. - 親クラスで定義された抽象メソッド
void draw()
を実装する.- エリア内は白字に黒文字.
- 起動時はLeftのTurnであることを示す文字を左寄りに表示する.
class InfoArea extends AbstractArea {
InfoArea(int posX, int posY, int yoko, int tate) {
super(posX, posY, yoko, tate);
}
void draw() {
fill(#FFFFFF);
rect(posX*SQUARESIZE, posY*SQUARESIZE, yoko*SQUARESIZE, tate*SQUARESIZE);
fill(#000000);
textSize(20);
text("<- Left turn", (posX+0.3)*SQUARESIZE, (posY+0.5)*SQUARESIZE);
}
}
レビュー項目
- 正常に実行が可能であり,Step0完了時と同じ領域が表示されることを確認する
- BaseAreaクラスの内容が↑と同一(の処理)であることを確認する
draw()
メソッドの動作確認はTask1-4で行うため,ここでチェックしなくても良い.
[Task1-3]Boardクラスの作成
実施内容
Boardクラスを作成する
- フィールドとして,AbstractAreaクラスのbArea, iArea及びAbstractAreaクラスの配列mAreaを宣言する.
- それぞれBaseArea,InfoArea,MochigomaAreaを表す.
- MochigomaAreaはLeft,Rightの2つあるため,サイズ2の配列として宣言・初期化すること
- デフォルトコンストラクタ(引数の無いコンストラクタ)において,bArea, iArea, mArea[0], mArea[1]を初期化する.
- それぞれBaseArea,InfoArea,MochigomaAreaのコンストラクタを利用して初期化すること
- bAreaは(1,0)から横4マス, 縦3マスの範囲
- iAreaは(1,3)から横4マス,縦1マスの範囲
- mArea[0]はLeftの持ち駒表示エリアを示し,(0,0)から横1マス,縦4マスの範囲
- mArea[1]はRightの持ち駒表示エリアを示し,(5,0)から横1マス,縦4マスの範囲
void draw()
メソッドを実装する.ここではbArea, iArea, mArea[0], mArea[1]で実装されている各draw()
を呼び出す.
class Board {
BaseArea bArea;
InfoArea iArea;
MochigomaArea[] mArea = new MochigomaArea[2];
Board(){
bArea = new BaseArea(1,0,4,3);
iArea = new InfoArea(1,3,4,1);
mArea[0] = new MochigomaArea(0,0,1,4);
mArea[1] = new MochigomaArea(5,0,1,4);
}
void draw(){
bArea.draw();
mArea[0].draw();
mArea[1].draw();
iArea.draw();
}
}
レビュー項目
- 正常に実行が可能であり,Step0完了時と同じ領域が表示されることを確認する
- BaseAreaクラスの内容が↑と同一(の処理)であることを確認する
draw()
メソッドの動作確認はTask1-4で行うため,ここでチェックしなくても良い.
[Task1-4]Doubutsu.pdeの更新
実施内容
Doubutsu.pdeを更新する
- Boardクラスのboardを冒頭で宣言する
setup()
メソッド内でboardを初期化するdraw()
内でboard.draw()
を呼び出し,3エリアを描画する
final int SQUARESIZE = 100;
Board board;
void setup() {
surface.setSize(6*SQUARESIZE, 4*SQUARESIZE);
board = new Board();
}
void draw() {
board.draw();
}
レビュー項目
- 正常に実行が可能であり,下記のように3つの領域が正しく表示されることを確認する
- マス目ごとの色や書かれている文字が正しいことを確認すること