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();
	}
}
개인 도구
이름공간
변수
행위
둘러보기
구성원
연구
연구실
기타
도구모음
인쇄/내보내기