Part3 designreport
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?
- 还需要测试转向函数在不同情况调用的次数