ColoredKarel (KarelOOP2)
Retired DISLab
/* * Copyright 2020 Sangwon Park @ HUFS DISLab */ package hufs.dislab.karel; import java.awt.Color; import java.awt.Point; /** * @since KarelOOP2 * @author Sangwon Park */ public class ColoredKarel extends SimpleKarel implements IKarel { private Color previousColor; private Color theColor; public ColoredKarel(Color color) { theColor = color; } public ColoredKarel(String name, Color color) { super(name); theColor = color; } public ColoredKarel() { } public ColoredKarel(String name, Color color, int x, int y, int dir, int nBeepers) { super(name, x, y, dir, nBeepers); theColor = color; } public ColoredKarel(String name, Color color, int x, int y, int dir) { super(name, x, y, dir); theColor = color; } public ColoredKarel(String name, Color color, int x, int y) { super(name, x, y); theColor = color; } public ColoredKarel(String name, Color color, int nBeepers) { super(name, nBeepers); theColor = color; } @Override public String toString() { return super.toString() + ",color=" + theColor + ",previousColor=" + previousColor; } @Override public void onCreate() { super.onCreate(); previousColor = getCornerColor(); setColor(theColor); } public void setColor(Color color) { theColor = color; IKarelProgram program = (IKarelProgram) IKarelProgram.getProgram(); Point pt = getLocation(); program.setCornerColor(pt, theColor); program.repaint(); } public Color getColor() { return theColor; } @Override public void move() { /* * 원래는 Karel에 주어진 메소드로 코드를 짰는데 그렇게 하면 색을 칠하는 것도 * 하나의 동작으로 취급되었다. * Point p = getLocation(); * super.move(); * previousColor = getCornerColor(); * paintCorner(theColor); */ // 월드를 직접 그리도록 코드 수정 (2020.10.5) IKarelProgram program = (IKarelProgram) IKarelProgram.getProgram(); Point pt = getLocation(); program.setCornerColor(pt, previousColor); if (facingEast()) pt.x++; else if (facingWest()) pt.x--; else if (facingNorth()) pt.y++; else pt.y--; previousColor = getCornerColor(); program.setCornerColor(pt, theColor); program.repaint(); super.move(); } }