Return to Snippet

Revision: 63305
at April 24, 2013 05:39 by MediaTechWare


Initial Code
/*
 * File: CheckerboardKarel.java
 * ----------------------------
 * The CheckerboardKarel class draws a checkerboard using beepers,
 * as described in Assignment 1.  The program works for all of the sample
 * worlds supplied in the starter folder.
 */

import stanford.karel.*;

public class CheckerboardKarel extends SuperKarel {
	
	/* Karel starts on the corner of 1st St. and 1st Ave. at the beginning 
	 * of the program. Conceptually, the streets are separated as ones with odd
	 * numbers and even numbers. Odd numbered streets start with a beeper on the first
	 * corner, while even numbered streets start with a beeper on the second corner
	 * to create the checkerboard effect. Karel lays the beepers on the first street through
	 * the layOddStreet() command. At the end of the street, Karel is left facing East. If
	 * at this point Karel detects that there is another street above, Karel moves all the
	 * way to the beginning of the street, moves one street up and lays beepers, this time
	 * for through the layEvenStreet() command. Karel alternates laying beepers on odd and
	 * even numbered streets until it detects that there are no streets above.*/
	public void run() {
		layOddStreet();
		while(leftIsClear()) {
			getBackAndMoveOneStreetUp();
			layEvenStreet();
			if(leftIsClear()) {
				getBackAndMoveOneStreetUp();
				layOddStreet();
			}
		}
			
	}
	/* The layOddStreet command assumes Karel is on one of the odd numbered streets.
	 * Karel starts with laying down a beeper, and then carries on skipping one corner
	 * and laying a beeper on the next corner until it detects a wall. At the end of
	 * the execution of the command, Karel is left immediately against the wall at the
	 * end of the street, facing East.
	 */
	private void layOddStreet() {
		putBeeper();
		while(frontIsClear()) {
			move();
			if(frontIsClear()) {
				move();
				putBeeper();	
			}
			
		}
	}
	/* The layEvenStreet() command assumes Karel is on one of the even numbered streets.
	 * Karel starts with moving one corner ahead if it detects that its front is clear.
	 * From here, Karel treats the remainder of the street as an odd numbered street and
	 * executes the layOddStreet() command.
	 */
	private void layEvenStreet() {
		while(frontIsClear()) {
			move();
			layOddStreet();
		}
	}
	
	/* This command assumes Karel is standing at the end of an odd or even numbered street
	 * facing East. The command turns Karel around and moves him until he reaches the
	 * western wall of the room. When he reaches the wall, Karel turns right, moves one corner
	 * up and turns right once more to face East again.*/
	private void getBackAndMoveOneStreetUp() {
		turnAround();
		while(frontIsClear()) {
			move();
		}
		turnRight();
		move();
		turnRight();
	}

}

Initial URL


Initial Description
This code solves the CheckerboardKarel problem presented in Assignment 1 of  the Stanford University CS106A Programming Methodology course.

Initial Title
CheckerboardKarel

Initial Tags


Initial Language
Java