Your first task is to solve a simple story-problem in Karel’s world. Suppose that Karel has settled into its house, which is the square area in the center of the following diagram:
Karel starts off in the northwest corner of its house as shown in the diagram. The problem you need to get Karel to solve is to collect the newspaper—represented (as all objects in Karel’s world are) by a beeper—from outside the doorway and then to return to its initial position.
This exercise is extremely simple and exists just to get you started. You can assume that every part of the world looks just as it does in the diagram. The house is exactly this size, the door is always in the position shown, and the beeper is just outside the door. Thus, all you have to do is write the sequence of commands necessary to have Karel
1. Move to the newspaper,
2. Pick it up, and
3. Return to its starting point.
Even though the program is only a few lines, it is still worth getting at least a little practice in decomposition. In your solution, include a private method for each of the steps shown in the outline.
Start by by defining the outline steps in your run method:
public void run() { moveToNewspaper(); pickUpNewspaper(); returnToStartingPoint(); }
Because the newspaper is right outside the door, move as long as the front is clear, then turn right, move as long as Karels left hand side is blocked (which means there is a wall), turn left, another step, and Kare should hopefully be at the position of the newspaper:
private void moveToNewspaper() { while(frontIsClear()) { move(); } turnRight(); while(leftIsBlocked()) { move(); } turnLeft(); move(); }
Pick up the newspaper only, if there is any (could be the paperboy was lazy today …):
private void pickUpNewspaper() { if (beepersPresent()) { pickBeeper(); } }
Turn around, go ahead as long as possible, turn right, move up as long as possible and finally turn right, to be in Karels starting position:
private void returnToStartingPoint() { turnAround(); while(frontIsClear()) { move(); } turnRight(); while(frontIsClear()) { move(); } turnRight(); }
The code for this assignment is available on github.