Created
September 12, 2012 03:03
-
-
Save mattbarackman/3703993 to your computer and use it in GitHub Desktop.
Solution to CS106A Assignment 1.3 - CheckerboardKarel
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* File: CheckerboardKarel.java | |
* ---------------------------- | |
* The CheckerboardKarel class should draw a checkerboard using | |
* beepers, as described in Assignment 1. Karel will start in | |
* the bottom left-corner facing East and will place a beeper on | |
* its current location. It will start by going east, and snaking | |
* up the board, placing a beeper on every other square. It should | |
* be able to handle any size grid. | |
* | |
* Matt Barackman | |
* 9.3.2012 | |
*/ | |
import stanford.karel.*; | |
public class CheckerboardKarel extends SuperKarel { | |
/*METHOD: run() | |
* | |
*pre-condition: | |
*see above | |
* | |
*post-condition: | |
*completed checkerboard with Karel in either | |
*of the top two corners (the right side for grids with an odd | |
*number of rows, the left side for grids with an odd number | |
*of lines). | |
* | |
*Note: While this method does eventually complete the | |
*checkerboard, this bit of code really initializes Karel's | |
*motion starting with the bottom line. | |
*/ | |
public void run(){ | |
putBeeper(); | |
completeEastLine(); | |
} | |
/* | |
*METHOD: completeEastLine() | |
* | |
*pre-condition: | |
*Karel is facing East at the left-most square of a new line. | |
* | |
*post-condition | |
*Karel is either facing West on the next line | |
*up or program is finished. | |
* | |
* | |
*Note: completeEastLine and completeWestLine make use of | |
*mutual recursion to have Karel alternate rows to complete | |
*the checkerboard. | |
*/ | |
private void completeEastLine(){ | |
alternateToWall(); | |
turnLeft(); | |
if (frontIsClear()){ | |
startNextLine(); | |
turnLeft(); | |
completeWestLine(); | |
} | |
} | |
/*METHOD: completeWeestLine() | |
* | |
*pre-condition: | |
*Karel is facing West on a new line. | |
* | |
*post-condition: | |
*Karel is either facing East on the next line up or program | |
*is finished. | |
*/ | |
private void completeWestLine(){ | |
alternateToWall(); | |
turnRight(); | |
if (frontIsClear()){ | |
startNextLine(); | |
turnRight(); | |
completeEastLine(); | |
} | |
} | |
/*METHOD: startNextLine() | |
* | |
*pre-condition: | |
*Karel is at the end of a line facing the next row up and he may or may | |
*not be presently on a beeper. | |
* | |
*post-condition: | |
*Karel has now moved to the next row up and is still facing | |
*up. Karel has also placed a beeper on his current square | |
*if he wasn't on one before and hasn't placed one if he was | |
*on one before. | |
*/ | |
private void startNextLine(){ | |
if (beepersPresent()){ | |
move(); | |
} | |
else { | |
move(); | |
putBeeper(); | |
} | |
} | |
/*METHOD: alternateToWall() | |
*pre-condition: | |
*Karel is either facing East or West at the beginning of a | |
*new line. | |
* | |
*post-condition: | |
*Karel has now traversed the line and has in doing so has | |
*placed beepers on every other square. | |
*/ | |
private void alternateToWall(){ | |
while (frontIsClear()){ | |
if (beepersPresent()){ | |
move(); | |
} | |
else { | |
move(); | |
putBeeper(); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
from karel.stanfordkarel import *
"""
Karel should fill the whole world with beepers.
"""
def main():
run()
return_back()
def run():
put_beeper()
completeEastLine()
def completeEastLine():
alternateToWall()
turn_left()
if front_is_clear():
startNextLine()
turn_left()
completeWestLine()
def completeWestLine():
alternateToWall()
turn_right()
if front_is_clear():
startNextLine()
turn_right()
completeEastLine()
def startNextLine():
if beepers_present():
move()
def alternateToWall():
while front_is_clear():
if beepers_present():
move()
def return_back():
turn_left()
turn_left()
while front_is_clear():
move()
turn_right()
while front_is_clear():
move()
def turn_right():
turn_left()
turn_left()
turn_left()
There is no need to edit code beyond this point
if name == 'main':
main()