Skip to main content
GameDev.net gamedev.net
🔒 Locked

critique

Started by kachaka Mar 19, 2009 at 5:15 AM 1 replies 1.5k views
Original Post
kachaka
kachaka
PROBLEM Karel has been hired to repair the damage done to the Quad in the 1989 earthquake. In particular, Karel is to repair a set of arches where some of the stones (represented by beepers, of course) are missing from the columns supporting the arches, as follows: Your program should work on the world shown above, but it should be general enough to handle any world that meets certain basic conditions as outlined at the end of this problem. There are several example worlds in the starter folder, and your program should work correctly with all of them. When Karel is done, the missing stones in the columns should be replaced by beepers, so that the final picture resulting from the world shown above would look like this: Karel may count on the following facts about the world: • Karel starts at 1st Avenue and 1st Street, facing east, with an infinite number of beepers. • The columns are exactly four units apart, on 1st, 5th, 9th Avenue, and so forth. • The end of the columns is marked by a wall immediately after the final column. This wall section appears after 13th Avenue in the example, but your program should work for any number of columns. • The top of the column is marked by a wall, but Karel cannot assume that columns are always five units high, or even that all columns are the same height. • Some of the corners in the column may already contain beepers representing stones that are still in place. Your program should not put a second beeper on these corners.
kachaka
kachaka
SOLUTION

/*
* File: StoneMasonKarel.java
* --------------------------
* The StoneMasonKarel subclass extends superkarel and places stones(represented by beepers)
* in the four colums on the 1st, 5th, 9th and 13th columns , so that the whole column has a beeper in each row
* There cannot be more than one beeper on any spot in the columns
* Pre-conditions: Each column is always 4 units apart.
* The wall always immidiately occurs after a column
* The top of the columns are also represented by walls
*/

import stanford.karel.*;

public class StoneMasonKarel extends SuperKarel {

public void run() {
repairArch();
backToBottomofCurrentArch();
moveToOtherArch();
//Will work for any number of arches as long as they are 4 rows apart
while(frontIsClear()) {
repeat();
}
// So that there would be no off by one bug
repairArch();
backToBottomofCurrentArch();
//To position karel facing the wall
turnLeft();
}

//If there are no beepers present, will place a beeper otherwise will do nothing
private void checkAndPlaceBeeper() {
if(noBeepersPresent()) {
putBeeper();
}
}
// Makes karel repair all missing stones in any given column
private void repairArch() {
//Will make karel face upward so he can travel the column.
turnLeft();
//While front is clear karel will place a beepr if no beeper exists at its current location
while(frontIsClear()) {
checkAndPlaceBeeper();
//Move to the next point on the column
move();
//So that i would not be off by one
checkAndPlaceBeeper();
}
}

//Will take karel back to the bottom of the column(arch) its on
private void backToBottomofCurrentArch() {
turnAround();
while (frontIsClear()) {
move();
}
}
//This method takes Karel to other rows with arches as long as they meet the precondition
//Pre-condition: arches will always be four rows apart
private void moveToOtherArch() {
turnLeft();
for(int i = 0; i<4; i++) {
move();
}

}
// This method is used so that karel can repair as many arches as they could possibly exist
//as long as they meet the preconditions
private void repeat() {
repairArch();
backToBottomofCurrentArch();
moveToOtherArch();
}
}
kachaka
kachaka
Sorry for the giant block of text.

My program worked fine, but i was wondering if i could improve my algorithm/ style or if it is all good.

Dont want to start off writing programs the wrong way hehe

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.