Karel a été embauché par les Nations Unies pour venir aider à construire des maisons. La journée doit être gagnée et Karel est clairement le meilleur robot pour ce travail. Votre objectif est de faire marcher Karel dans la rangée du bas et de construire une maison comme suit:

Karel trouve chaque fois un bipeur. Les images ci-dessous montrent ce que Karel devrait faire pour deux mondes donnés en exemple. Vous pouvez supposer qu'aucune maison ne se chevauchera et que toutes les maisons iront bien dans le monde. Vous ne pouvez pas supposer la taille du monde ou le nombre de maisons!

Solution

/**
 * Programme: Nations Unies Karel
 * -----------------
 * Ce programme permet à Karel de construire des maisons, en tant que travail pour les Nations Unies.
 */
public class UNKarel extends SuperKarel {

	public void run() {
		while(frontIsClear()) {
			move();
			if(beepersPresent()) {
				buildHouse();
			}
		}
	}

	/**
	 * Méthode: Construire une maison
	 * -------------------
	 * Construit une seule maison centrée sur la position actuelle de Karel.
	 * Vous pouvez supposer qu’un bip sonore est présent à l’état de démarrage.
	 * À la fin de la méthode, Karel sera face à l’est du fond.
	 * coin droit de la maison.
	 */
	private void buildHouse() {
		pickBeeper();
		turnAround();
		move();
		turnRight();
		placeThree();
		turnRight();
		move();
		turnRight();
		placeThree();
		turnLeft();
		move();
		turnLeft();
		placeThree();
		turnAround();
		moveToWall();
		turnLeft();
	}

	/**
	 * Méthode: déplacer au mur
	 * --------------------
	 * Avancez jusqu'à ce que Karel frappe un mur.
	 */
	private void moveToWall() {
		while(frontIsClear()) {
			move();
		}
	}

	/**
	 * Méthode: Place Three
	 * -------------------
	 * Place trois bips sonores et bouge trois fois!
	 */
	private void placeThree() {
		for(int i = 0; i < 3; i++) {
			putBeeper();
			move();
		}
	}

}