package contest2010; //Stefan Layanto import stanford.karel.*; public class KarelContestStef extends SuperKarel { public void run () { if(!cornerColorIs(WHITE)){ if(noBeepersPresent()){ p1turn() ; try { Thread.sleep (1000) ; } catch (InterruptedException e) { e.printStackTrace(); } rollTheDice1() ; try { Thread.sleep (1000) ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } goToPlayer1() ; movePlayer1() ; try { Thread.sleep (1000) ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (!cornerColorIs(WHITE)) { goBackToCorner () ; putBeeper() ; } eraseP1Turn() ; }else{ p2Turn() ; try { Thread.sleep (1000) ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } rollTheDice2() ; try { Thread.sleep (1000) ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } goToPlayer2() ; movePlayer2() ; try { Thread.sleep (1000) ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (!cornerColorIs(WHITE)) { goBackToCorner () ; pickBeeper() ; } } eraseP2Turn() ; } } private void eraseP2Turn() { turnLeft() ; move(7) ; turnRight() ; move(24) ; for(int i=0;i<9;i++) { paintCorner(WHITE) ; move() ; } paintCorner(WHITE) ; turnRight() ; for(int i=0;i<6;i++) { move() ; paintCorner(WHITE) ; } turnRight() ; paintCorner(WHITE) ; for(int i=0;i<9;i++) { move() ; paintCorner(WHITE) ; } turnRight() ; paintCorner(WHITE) ; for(int i=0;i<5;i++) { move() ; paintCorner(WHITE) ; } turnLeft() ; moveToWall() ; turnLeft() ; moveToWall() ; turnLeft() ; } private void eraseP1Turn() { turnLeft() ; move(6) ; turnRight() ; move(11) ; for(int i=0;i<9;i++) { paintCorner(WHITE) ; move() ; } paintCorner(WHITE) ; turnRight() ; for(int i=0;i<6;i++) { move() ; paintCorner(WHITE) ; } turnRight() ; paintCorner(WHITE) ; for(int i=0;i<9;i++) { move() ; paintCorner(WHITE) ; } turnRight() ; paintCorner(WHITE) ; for(int i=0;i<5;i++) { move() ; paintCorner(WHITE) ; } turnLeft() ; moveToWall() ; turnLeft() ; moveToWall() ; turnLeft() ; } private void p2Turn() { turnLeft() ; move(7) ; turnRight() ; move(24) ; for(int i=0;i<9;i++) { paintCorner(RED) ; move() ; } paintCorner(RED) ; turnRight() ; for(int i=0;i<6;i++) { move() ; paintCorner(RED) ; } turnRight() ; paintCorner(RED) ; for(int i=0;i<9;i++) { move() ; paintCorner(RED) ; } turnRight() ; paintCorner(RED) ; for(int i=0;i<5;i++) { move() ; paintCorner(RED) ; } turnLeft() ; moveToWall() ; turnLeft() ; moveToWall() ; turnLeft() ; } private void p1turn() { turnLeft() ; move(6) ; turnRight() ; move(11) ; for(int i=0;i<9;i++) { paintCorner(RED) ; move() ; } paintCorner(RED) ; turnRight() ; for(int i=0;i<6;i++) { move() ; paintCorner(RED) ; } turnRight() ; paintCorner(RED) ; for(int i=0;i<9;i++) { move() ; paintCorner(RED) ; } turnRight() ; paintCorner(RED) ; for(int i=0;i<5;i++) { move() ; paintCorner(RED) ; } turnLeft() ; moveToWall() ; turnLeft() ; moveToWall() ; turnLeft() ; } private void movePlayer1() { pickBeeper() ; for (int i=0; i< p1Roll;i++) { try { Thread.sleep (250) ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(cornerColorIs(GRAY)) { putBeeper() ; goBackToCorner () ; goToCentreBox() ; clearCentreBox() ; writePlayer1Wins() ; EndReturn() ; paintCorner(WHITE) ; break; }else{ if(cornerColorIs(DARK_GRAY)) { turnLeft () ; move() ; } if (cornerColorIs(LIGHT_GRAY)) { turnRight () ; move() ; } move() ; } } putBeeper () ; if(cornerColorIs(BLUE)) { try { Thread.sleep (2000) ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } pickBeeper() ; for (int i=0; i< 5;i++) { try { Thread.sleep (250) ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(cornerColorIs(DARK_GRAY)) { turnLeft () ; move() ; } if (cornerColorIs(LIGHT_GRAY)) { turnRight () ; move() ; } move() ; } putBeeper() ; try { Thread.sleep (1000) ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } goBackToCorner() ; blueArrow() ; turnRight() ; turnRight() ; moveToWall() ; turnRight() ; moveToWall() ; turnAround() ; goToPlayer1() ; } if(cornerColorIs(RED)) { try { Thread.sleep (2000) ; } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } pickBeeper() ; turnAround() ; for (int i=0; i< 5;i++) { try { Thread.sleep (250) ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(cornerColorIs(DARK_GRAY)) { turnRight () ; move() ; } if (cornerColorIs(LIGHT_GRAY)) { turnLeft() ; move() ; } move() ; } turnAround() ; putBeeper() ; try { Thread.sleep (1000) ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } goBackToCorner() ; redArrow() ; turnRight() ; turnRight() ; moveToWall() ; turnRight() ; moveToWall() ; turnAround() ; goToPlayer1() ; } } private void redArrow() { turnLeft() ; move(12) ; turnRight() ; move(10) ; paintCorner(BLACK) ; turnRight() ; move() ; paintCorner(BLACK) ; move() ; paintCorner(BLACK) ; move() ; paintCorner(BLACK) ; move() ; paintCorner(BLACK) ; turnAround() ; move(3) ; turnLeft() ; move() ; paintCorner(BLACK) ; turnAround() ; move(2) ; paintCorner(BLACK) ; move() ; turnRight() ; move() ; paintCorner(BLACK) ; turnRight() ; move(4) ; paintCorner(BLACK) ; try { Thread.sleep (2000) ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } turnRight() ; move(2) ; turnRight() ; move(2) ; paintCorner(WHITE) ; turnRight() ; move() ; paintCorner(WHITE) ; move() ; paintCorner(WHITE) ; move() ; paintCorner(WHITE) ; move() ; paintCorner(WHITE) ; turnAround() ; move(3) ; turnLeft() ; move() ; paintCorner(WHITE) ; turnAround() ; move(2) ; paintCorner(WHITE) ; move() ; turnRight() ; move() ; paintCorner(WHITE) ; turnRight() ; move(4) ; paintCorner(WHITE) ; if(notFacingEast()) ;{ turnRight() ; } } private void blueArrow() { turnLeft() ; move(12) ; turnRight() ; move(5) ; paintCorner(BLACK) ; turnRight() ; move() ; paintCorner(BLACK) ; move() ; paintCorner(BLACK) ; move() ; paintCorner(BLACK) ; move() ; paintCorner(BLACK) ; turnAround() ; move(3) ; turnLeft() ; move() ; paintCorner(BLACK) ; turnAround() ; move(2) ; paintCorner(BLACK) ; move() ; turnRight() ; move() ; paintCorner(BLACK) ; turnRight() ; move(4) ; paintCorner(BLACK) ; try { Thread.sleep (2000) ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } turnRight() ; move(2) ; turnRight() ; move(2) ; paintCorner(WHITE) ; turnRight() ; move() ; paintCorner(WHITE) ; move() ; paintCorner(WHITE) ; move() ; paintCorner(WHITE) ; move() ; paintCorner(WHITE) ; turnAround() ; move(3) ; turnLeft() ; move() ; paintCorner(WHITE) ; turnAround() ; move(2) ; paintCorner(WHITE) ; move() ; turnRight() ; move() ; paintCorner(WHITE) ; turnRight() ; move(4) ; paintCorner(WHITE) ; if(notFacingEast()) ;{ turnRight() ; } } private void movePlayer2() { pickBeeper() ; for (int i=0; i< p2Roll;i++) { try { Thread.sleep (250) ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(cornerColorIs(GRAY)) { putBeeper() ; goBackToCorner () ; goToCentreBox() ; clearCentreBox() ; writePlayer2Wins() ; EndReturn() ; paintCorner(WHITE) ; break; }else{ if(cornerColorIs(DARK_GRAY)) { turnLeft () ; move() ; } if (cornerColorIs(LIGHT_GRAY)) { turnRight () ; move() ; } move() ; } } putBeeper () ; if(cornerColorIs(BLUE)) { try { Thread.sleep (2000) ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } pickBeeper() ; for (int i=0; i< 5;i++) { if(cornerColorIs(DARK_GRAY)) { turnLeft () ; move() ; } if (cornerColorIs(LIGHT_GRAY)) { turnRight () ; move() ; } move() ; } putBeeper() ; try { Thread.sleep (1000) ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } goBackToCorner() ; blueArrow() ; turnRight() ; turnRight() ; moveToWall() ; turnRight() ; moveToWall() ; turnAround() ; goToPlayer2() ; } if(cornerColorIs(RED)) { try { Thread.sleep (2000) ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } pickBeeper() ; turnAround() ; for (int i=0; i< 5;i++) { if(cornerColorIs(DARK_GRAY)) { turnRight () ; move() ; } if (cornerColorIs(LIGHT_GRAY)) { turnLeft() ; move() ; } move() ; } turnAround() ; putBeeper() ; try { Thread.sleep (1000) ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } goBackToCorner() ; redArrow() ; turnRight() ; turnRight() ; moveToWall() ; turnRight() ; moveToWall() ; turnAround() ; goToPlayer2() ; } } private void goToCentreBox() { turnLeft() ; move(13) ; turnRight() ; move(17) ; } private void EndReturn() { turnLeft() ; moveToWall() ; turnLeft() ; moveToWall() ; turnLeft() ; moveToWall() ; turnLeft() ; } private void writePlayer1Wins() { Line1P1() ; Line2P1() ; Line3P1() ; Line4P1() ; } private void writePlayer2Wins() { Line1P2() ; Line2P2() ; Line3P2() ; Line4P2() ; } private void Line4P2() { turnAround() ; move(22) ; turnLeft() ; move() ; turnLeft() ; paintCorner(BLACK) ; move(4) ; for (int i=0;i<3;i++){ paintCorner(BLACK) ; move() ; } move(3) ; for (int i=0;i<2;i++){ paintCorner(BLACK) ; move(2) ; } move() ; for (int i=0;i<3;i++){ paintCorner(BLACK) ; move() ; } move() ; paintCorner(BLACK) ; move(3) ; paintCorner(BLACK) ; } private void Line3P2() { turnAround() ; move(22) ; turnLeft() ; move() ; turnLeft() ; for (int i=0;i<3;i++){ paintCorner(BLACK) ; move () ; } move() ; paintCorner(BLACK); move() ; paintCorner(BLACK) ; move(4) ; for (int i=0;i<6;i++){ paintCorner(BLACK) ; move(2) ; } paintCorner(BLACK) ; move() ; paintCorner(BLACK) ; } private void Line2P2() { turnAround() ; move(22) ; turnLeft(); move() ; turnLeft() ; paintCorner(BLACK) ; move(2) ; paintCorner(BLACK) ; move(4) ; paintCorner(BLACK) ; move(3) ; for (int i=0;i<5;i++){ paintCorner(BLACK) ; move(2) ; } paintCorner(BLACK) ; move() ; paintCorner(BLACK) ; move(2) ; paintCorner(BLACK) ; } private void Line1P2() { move() ; turnRight() ; move () ; turnLeft() ; for (int i=0;i<3;i++){ paintCorner(BLACK) ; move() ; } move() ; paintCorner(BLACK) ; move() ; paintCorner(BLACK) ; move() ; paintCorner(BLACK) ; move(3) ; for (int i=0;i<3;i++){ paintCorner(BLACK) ; move(2) ; } for (int i=0;i<3;i++){ paintCorner(BLACK) ; move() ; } move() ; paintCorner(BLACK) ; move(3) ; paintCorner(BLACK) ; } private void Line4P1() { turnAround() ; move(22) ; turnLeft() ; move() ; turnLeft() ; paintCorner(BLACK) ; move(4) ; for (int i=0;i<3;i++){ paintCorner(BLACK) ; move() ; } move(3) ; for (int i=0;i<2;i++){ paintCorner(BLACK) ; move(2) ; } move() ; for (int i=0;i<3;i++){ paintCorner(BLACK) ; move() ; } move() ; paintCorner(BLACK) ; move(3) ; paintCorner(BLACK) ; } private void Line3P1() { turnAround() ; move(22) ; turnLeft() ; move() ; turnLeft() ; for (int i=0;i<3;i++){ paintCorner(BLACK) ; move () ; } move(2) ; paintCorner(BLACK) ; move(4) ; for (int i=0;i<6;i++){ paintCorner(BLACK) ; move(2) ; } paintCorner(BLACK) ; move() ; paintCorner(BLACK) ; } private void Line2P1() { turnAround() ; move(22) ; turnLeft(); move() ; turnLeft() ; paintCorner(BLACK) ; move(2) ; paintCorner(BLACK) ; move(2) ; paintCorner(BLACK) ; move() ; paintCorner(BLACK) ; move(4) ; for (int i=0;i<5;i++){ paintCorner(BLACK) ; move(2) ; } paintCorner(BLACK) ; move() ; paintCorner(BLACK) ; move(2) ; paintCorner(BLACK) ; } private void Line1P1() { move() ; turnRight() ; move () ; turnLeft() ; for (int i=0;i<3;i++){ paintCorner(BLACK) ; move() ; } move(2) ; paintCorner(BLACK) ; move(4) ; for (int i=0;i<3;i++){ paintCorner(BLACK) ; move(2) ; } for (int i=0;i<3;i++){ paintCorner(BLACK) ; move() ; } move() ; paintCorner(BLACK) ; move(3) ; paintCorner(BLACK) ; } private void goToPlayer1() { turnLeft() ; move(19) ; turnRight() ; while(noBeepersPresent()){ if(cornerColorIs(DARK_GRAY)) { turnLeft () ; move() ; } if (cornerColorIs(LIGHT_GRAY)) { turnRight () ; move() ; } move() ; } } private void goToPlayer2() { turnLeft() ; move(18) ; turnRight() ; while(noBeepersPresent()){ if(cornerColorIs(DARK_GRAY)) { turnLeft () ; move() ; } if (cornerColorIs(LIGHT_GRAY)) { turnRight () ; move() ; } move() ; } } private void rollTheDice1() { cleanArea () ; faceEast() ; revertToOriginalPosition () ; paintAreaIfUnpainted () ; rollDiceP1 () ; goToSecondDice () ; try { Thread.sleep (1000) ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } roll2ndDiceP1 () ; revertToOriginalPosition () ; p1Roll = roll1P1 + roll2P1 ; } private void rollTheDice2() { cleanArea () ; faceEast() ; revertToOriginalPosition () ; paintAreaIfUnpainted () ; rollDiceP2 () ; goToSecondDice () ; try { Thread.sleep (1000) ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } roll2ndDiceP2 () ; revertToOriginalPosition () ; p2Roll = roll1P2 + roll2P2 ; } private void rollDiceP1() { GoToDiceCorner () ; setNumber1P1 () ; } private void roll2ndDiceP1() { GoToDiceCorner () ; setNumber2P1 () ; } private void rollDiceP2() { GoToDiceCorner () ; setNumber1P2 () ; } private void roll2ndDiceP2() { GoToDiceCorner () ; setNumber2P2 () ; } private void setNumber1P1() { roll1P1 = 0 ; if (random(.5)) { if(random(.5)) { if(random(.5)) { one () ; roll1P1 = 1 ; }else{ two () ; roll1P1 = 2 ; } }else{ if(random(.5)) { three () ; roll1P1 = 3 ; }else{ four() ; roll1P1 = 4 ; } } }else{ if(random(.5)) { if(random(.5)) { five () ; roll1P1 = 5 ; }else{ six () ; roll1P1 = 6 ; } }else{ setNumber1P1() ; } } } private void setNumber2P1() { roll2P1 = 0 ; if (random(.5)) { if(random(.5)) { if(random(.5)) { one () ; roll2P1 = 1 ; }else{ two () ; roll2P1 = 2 ; } }else{ if(random(.5)) { three () ; roll2P1 = 3 ; }else{ four() ; roll2P1 = 4 ; } } }else{ if(random(.5)) { if(random(.5)) { five () ; roll2P1 = 5 ; }else{ six () ; roll2P1 = 6 ; } }else{ setNumber2P1() ; } } } private void setNumber1P2() { roll1P2 = 0 ; if (random(.5)) { if(random(.5)) { if(random(.5)) { one () ; roll1P2 = 1 ; }else{ two () ; roll1P2 = 2 ; } }else{ if(random(.5)) { three () ; roll1P2 = 3 ; }else{ four() ; roll1P2 = 4 ; } } }else{ if(random(.5)) { if(random(.5)) { five () ; roll1P2 = 5 ; }else{ six () ; roll1P2 = 6 ; } }else{ setNumber1P2() ; } } } private void setNumber2P2() { roll2P2 = 0 ; if (random(.5)) { if(random(.5)) { if(random(.5)) { one () ; roll2P2 = 1 ; }else{ two () ; roll2P2 = 2 ; } }else{ if(random(.5)) { three () ; roll2P2 = 3 ; }else{ four() ; roll2P2 = 4 ; } } }else{ if(random(.5)) { if(random(.5)) { five () ; roll2P2 = 5 ; }else{ six () ; roll2P2 = 6 ; } }else{ setNumber2P2() ; } } } private void six() { putBeeper() ; turnLeft() ; move() ; putBeeper() ; move() ; putBeeper() ; turnRight() ; move(2) ; putBeeper() ; turnRight() ; move() ; putBeeper() ; move() ; putBeeper() ; turnLeft() ; } private void five() { putBeeper() ; stepUp() ; putBeeper() ; stepUp() ; putBeeper() ; turnRight () ; move(2) ; putBeeper() ; turnAround() ; move(2) ; turnLeft() ; move(2); putBeeper() ; turnAround () ; move(2) ; } private void four() { putBeeper() ; goUp (2) ; putBeeper () ; move(2) ; putBeeper () ; turnRight () ; move (2) ; putBeeper () ; turnLeft () ; } private void three() { putBeeper () ; stepUp () ; putBeeper () ; stepUp () ; putBeeper () ; } private void two() { putBeeper () ; stepUp () ; stepUp () ; putBeeper () ; } private void one() { stepUp () ; putBeeper () ; move () ; } private void goBackToCorner() { turnAround() ; if(cornerColorIs(DARK_GRAY)) { move() ; } if (cornerColorIs(LIGHT_GRAY)) { move() ; } while (!cornerColorIs(WHITE)) { if(cornerColorIs(DARK_GRAY)) { turnRight () ; move() ; } if (cornerColorIs(LIGHT_GRAY)) { turnLeft () ; move() ; } move() ; } moveToWall() ; turnLeft() ; moveToWall() ; turnLeft() ; } private void goToTopLeftCorner() { turnLeft() ; move (4) ; turnLeft() ; move (8) ; turnAround () ; } private void paintBlack() { paintLineBlack() ; goToTopLeftCorner() ; paintLineBlack() ; turnAround() ; move (8) ; turnAround () ; paintColumnBlack() ; turnLeft () ; move (4) ; turnRight () ; move(4) ; paintColumnBlack() ; turnLeft () ; move (4) ; turnRight () ; move(4) ; paintColumnBlack() ; revertToOriginalPosition() ; } private void paintColumnBlack() { turnRight() ; for(int i=0;i<4;i++){ paintCorner(BLACK) ; move() ; } paintCorner (BLACK) ; turnLeft () ; } private void paintLineBlack() { for (int i=0; i <8;i++){ paintCorner(BLACK) ; move() ; } paintCorner (BLACK) ; } private void paintAreaIfUnpainted() { while(cornerColorIs(null)) { paintBlack() ; paintDiceWhite() ; revertToOriginalPosition() ; paintCorner(BLACK) ; } } private void faceEast() { if(notFacingEast()){ turnRight() ; } } private void cleanArea () { clearBoard () ; turnRight() ; move () ; turnAround () ; move () ; turnRight () ; goToOtherSide () ; } private void clearLine() { for (int i=0;i<8;i++) { if (beepersPresent()) { pickBeeper () ; move () ; }else{ move () ; } } } private void clearCentreBox() { for(int i=0;i<5;i++){ for (int j=0; j< 24; j++) { paintCorner (WHITE) ; move () ; } paintCorner (WHITE) ; turnAround() ; move(24) ; turnAround() ; turnRight() ; move() ; turnLeft() ; } for (int i=0; i< 24; i++) { paintCorner (WHITE) ; move () ; } paintCorner (WHITE) ; turnAround() ; move(24) ; turnRight() ; move(5); turnRight() ; } private void goToOtherSide() { turnAround () ; moveToWall () ; turnAround () ; } private void clearBoard() { turnLeft () ; for (int i=0;i<4;i++){ move () ; turnRight () ; clearLine () ; goToOtherSide () ; turnLeft () ; } } private void goToSecondDice() { goToGround() ; move () ; } private void goToGround() { turnRight() ; moveToWall () ; turnLeft () ; } private void revertToOriginalPosition() { goToCorner() ; turnAround () ; } private void goToCorner() { for(int i=0;i<2;i++){ turnRight () ; moveToWall () ; } } private void moveToWall() { while (frontIsClear()) { move () ; } } private void paintDiceWhite() { stepUp () ; paintSingleDice () ; moveToNextDice () ; paintSingleDice () ; } private void moveToNextDice() { move () ; turnRight () ; move (2) ; turnLeft () ; } private void paintSingleDice() { for (int i=0; i<2;i++){ paintLine (3) ; goBack (3) ; goUp (1) ; } paintLine (3) ; } private void paintLine(int amount1) { for (int i=0; i< amount1; i++) { paintCorner (WHITE) ; move () ; } } private void goBack(int amount2) { turnAround () ; for (int i=0; i< amount2; i++) { move () ; } turnAround () ; } private void goUp(int amount3) { turnLeft () ; for (int i=0; i< amount3; i++) { move () ; } turnRight () ; } private void move(int amount4) { for (int i=0; i< amount4; i++) { move () ; } } private void stepUp() { turnLeft () ; move () ; turnRight () ; move () ; } private void GoToDiceCorner() { stepUp () ; } private static int roll1P1; private static int roll2P1; private static int roll1P2; private static int roll2P2; private static int p1Roll; private static int p2Roll; }