// Seung Hee Han package contest2010; import java.awt.Color; import stanford.karel.SuperKarel; public class KarelContest_SeungHee extends SuperKarel { public void run() { sky24hrs(); } private void sky24hrs() { while(beepersInBag()){ dawnDuskSky(); blueSky(); turningToEveningSky(); eveningSky(); dawnDuskSky(); nightSky(); } } private void moveToWall() { while(frontIsClear()) { move(); } turnAround(); } private void moveNCorners(int numOfSteps) { for(int i = 0; i < numOfSteps; i++) { if(frontIsClear()){ move(); } } } private void paintNCorners(Color cornerColor, int corners) { for(int i = 0; i < corners; i++) { paintCorner(cornerColor); move(); } turnAround(); move(); } private void nextRow() { turnLeft(); if(frontIsClear()) { move(); } turnRight(); } private void paintRow(Color cornerColor) { while(frontIsClear()) { paintCorner(cornerColor); move(); } paintCorner(cornerColor); } private void paintNRows(Color cornerColor, int lines) { for(int i = 0; i < lines; i++) { paintRow(cornerColor); turnAround(); moveToWall(); nextRow(); } } private void wait(int milliseconds) { try { Thread.sleep(milliseconds); } catch (InterruptedException ie) { } } private void Sky(Color cornerColor) { paintNRows(cornerColor, 44); turnRight(); moveNCorners(44); turnLeft(); egypt(); } private void dawnDuskSky() { makeGround(); paintNRows(RED, 15); paintNRows(ORANGE, 11); paintNRows(YELLOW, 12); paintNRows(WHITE, 1); paintNRows(CYAN, 3); paintNRows(BLUE, 2); egypt(); wait(3000); } private void blueSky() { Sky(CYAN); wait(4000); } private void turningToEveningSky() { turnLeft(); moveToWall(); turnLeft(); for(int i = 0; i < 4; i++) { turnRight(); moveNCorners(7); turnLeft(); paintNRows(BLUE, 8); turnRight(); moveNCorners(8); turnLeft(); wait(2000); } } private void eveningSky() { turnRight(); moveNCorners(14); turnLeft(); paintNRows(BLUE, 14); turnRight(); moveNCorners(14); turnLeft(); egypt(); wait(3000); turnRight(); moveToWall(); turnRight(); } private void nightSky() { Sky(BLACK); turnLeft(); moveNCorners(13); turnRight(); makeStars(); turnRight(); moveToWall(); turnRight(); wait(5000); } private void makeStars() { while(leftIsClear()) { if(random(0.03)) { paintCorner(WHITE); } move(); if(frontIsBlocked()) { turnAround(); moveToWall(); nextRow(); } } } private void makeEgyptGod() { godFeet(); godLegs(); godBodyHead(); goingDownToArm(); godArm(); moveToOtherArm(); godArm(); godKarelBackToGround(); godMoveKarelBackToOrigin(); } private void godFeet() { moveNCorners(2); paintNCorners(ORANGE, 2); turnAround(); moveNCorners(2); paintNCorners(ORANGE, 2); moveNCorners(6); camelGodNextRow(); } private void godLegs() { for(int i = 0; i <2; i++) { moveNCorners(3); paintCorner(ORANGE); moveNCorners(2); paintCorner(ORANGE); turnAround(); moveNCorners(5); camelGodNextRow(); } } private void godBodyHead() { for(int i = 0 ; i < 6; i++) { moveNCorners(3); paintNCorners(ORANGE, 3); moveNCorners(5); camelGodNextRow(); } } private void godArm() { stepingUpAndPainting(); } private void goingDownToArm() { turnRight(); moveNCorners(4); turnLeft(); } private void moveToOtherArm() { turnAround(); moveNCorners(4); } private void stepingUpAndPainting() { paintNCorners(ORANGE, 2); turnRight(); move(); turnRight(); paintNCorners(ORANGE, 2); } // origin is the very bottom left point above the ground, which the 6 lines of orange. private void godMoveKarelBackToOrigin() { turnRight(); moveToWall(); } private void godKarelBackToGround() { turnLeft(); moveNCorners(7); } private void moveKarelToStartEgyptGod() { moveNCorners(38); } private void makeCamel() { camelFeet(); camelLegs(); makeCamelBodyTail(); camelHeadHump(); camelMoveKarelBackToOrigin(); } private void camelFeet() { moveNCorners(2); paintNCorners(ORANGE, 2); turnAround(); moveNCorners(2); paintNCorners(ORANGE, 2); moveNCorners(6); camelGodNextRow(); } private void camelLegs() { for(int i = 0; i < 2; i++) { moveNCorners(3); paintNCorners(ORANGE, 1); turnAround(); moveNCorners(3); paintNCorners(ORANGE, 1); moveNCorners(6); camelGodNextRow(); } } // origin is the very bottom left point above the ground, which the 6 lines of orange. private void camelMoveKarelBackToOrigin() { turnAround(); moveToWall(); turnRight(); moveNCorners(6); turnLeft(); } private void camelGodNextRow () { turnAround(); nextRow(); } private void makeCamelBodyTail() { camelBodyTailStep1(); camelBodyTailStep2(); camelBodyTailStep3(); } private void camelHeadHump() { paintNCorners(ORANGE, 2); turnAround(); moveNCorners(2); paintNCorners(ORANGE, 4); moveNCorners(5); turnAround(); } private void camelBodyTailStep1() { moveNCorners(3); paintNCorners(ORANGE, 4); turnAround(); moveNCorners(2); paintNCorners(ORANGE, 2); moveNCorners(9); camelGodNextRow(); } private void camelBodyTailStep2() { move(); paintNCorners(ORANGE, 6); turnAround(); moveNCorners(2); paintCorner(ORANGE); turnAround(); moveNCorners(8); camelGodNextRow(); } private void camelBodyTailStep3() { move(); paintCorner(ORANGE); moveNCorners(2); paintNCorners(ORANGE, 6); moveNCorners(8); camelGodNextRow(); } private void makePyramid() { for(int i = 12; i > 0; i = i - 1) { for(int n = 0; n < 2; n++){ paintNCorners(YELLOW, i); moveNCorners(i); } turnLeft(); move(); turnRight(); } pyramidMoveKarelOnGround(); pyramidMoveKarelBackToOrigin(); } private void moveKarelToStartPyramid() { moveNCorners(25); } // origin is the very bottom left point above the ground, which the 6 lines of orange. private void pyramidMoveKarelBackToOrigin() { turnRight(); moveToWall(); } private void pyramidMoveKarelOnGround() { turnRight(); moveNCorners(12); } private void placingKarelOnGround() { turnRight(); moveToWall(); moveNCorners(6); turnRight(); } private void makeGround() { paintNRows(ORANGE, 6); } private void egypt() { placingKarelOnGround(); moveNCorners(2); makeCamel(); moveKarelToStartPyramid(); makePyramid(); moveKarelToStartEgyptGod(); makeEgyptGod(); } }