Part3 designreport
-
- Inception: clarify the details of the problem:
Inception: clarify the details of the problem:
a. What will a jumper do if the location in front of it is empty, but the location two cells in front contains a flower or a rock?
- 前方第二格有花時,jumper仍然會跳上去覆寫花
- 前方第二個有石頭且第一個空時,jumper會move到第一格
public boolean canJump()
{
Grid<Actor> gr = getGrid();
if (gr == null) {
return false;
}
Location loc = getLocation();
Location next = loc.getAdjacentLocation(getDirection()).getAdjacentLocation(getDirection());
if (!gr.isValid(next)) {
return false;
}
Actor jumpneighbor = gr.get(next);
return (jumpneighbor == null) || (jumpneighbor instanceof Flower);
// ok to jump into empty location or onto flower
// not ok to jump onto any other actor
}
b. What will a jumper do if the location two cells in front of the jumper is out of the grid?
- 若前方第一格在grid内且為空,move到前方第一格
- 否則轉向
public void act() {
if(canJump()) {
jump();
}
else if (canMove()) {
move();
}
else {
turn();
}
}
c. What will a jumper do if it is facing an edge of the grid?
- 同b第二種情況,會轉向
public void act() {
if(canJump()) {
jump();
}
else if (canMove()) {
move();
}
else {
turn();
}
}
d. What will a jumper do if another actor (not a flower or a rock) is in the cell that is two cells in front of the jumper?
- 二者會一起向前跳直至遇到阻礙停下轉向
public void jump()
{
Grid<Actor> gr = getGrid();
if (gr == null) {
return;
}
Location loc = getLocation();
Location next = loc.getAdjacentLocation(getDirection()).getAdjacentLocation(getDirection());
if (gr.isValid(next)) {
moveTo(next);
}
else {
removeSelfFromGrid();
}
Flower flower = new Flower(getColor());
flower.putSelfInGrid(gr, loc);
}
e. What will a jumper do if it encounters another jumper in its path?
- 若恰好有另一個jumper擋在jump路上且不移動,該jumper會向前move一步,然後轉向
public void act()
{
if(canJump()) {
jump();
}
else if (canMove()) {
move();
}
else {
turn();
}
}
f. Are there any other tests the jumper needs to make?
- 還需要測試轉向函數在不同情況調用的次數