天天看點

Part3 designreport

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?

  • 還需要測試轉向函數在不同情況調用的次數