PainterKarelProgram1 (KarelOOP2)

Retired DISLab
이동: 둘러보기, 찾기
/*
 * Copyright 2020 Sangwon Park @ DISLab, HUFS
 * 
 * 10명의 페이트 칠쟁이들이 무작위로 돌아다니며 바닥을 칠하는 프로그램이다.
 * 
 * 그런데 아무런 조처를 취하지 않기 때문에 Karel이 서로 부딪혀 엉망진창이 된다.
 */
package cp.java.week11.thread;
 
import java.awt.Color;
import java.util.Random;
 
import hufs.dislab.karel.IKarelProgram;
import hufs.dislab.karel.SimpleKarel;
 
class MyKarel extends SimpleKarel {
	Color color;
 
	public MyKarel() {
	}
 
	public MyKarel(int x, int y, int dir, Color color) {
		super(null, x, y, dir);
		this.color = color;
	}
 
	@Override
	public void onCreate() {
		paintCorner();
	}
 
	public void paintCorner() {
		paintCorner(color);
	}
}
 
@SuppressWarnings("serial")
public class PainterThreadProgram1 extends IKarelProgram {
	MyKarel[] list = new MyKarel[10];
 
	class Crazy extends Thread {
		MyKarel karel;
		Random r = new Random();
 
		Crazy(MyKarel karel) {
			this.karel = karel;
		}
 
		@Override
		public void run() {
			while (true) {
				switch (r.nextInt(4)) {
				case 0:
					karel.turnLeft();
					break;
				case 1:
					karel.turnRight();
					break;
				case 2:
					karel.turnAround();
					break;
				}
 
				if (karel.frontIsClear()) {
					karel.move();
					karel.paintCorner();
				}
			}
		}
	}
 
	static Color[] colors = new Color[] {BLUE, RED, YELLOW, WHITE, BLACK, CYAN, GREEN, GRAY, PINK};
 
	@Override
	protected void onInit() {
		list[0] = (MyKarel) getKarel();
		Random r = new Random();
		for (int i = 1; i < list.length; i++) {
			int x = r.nextInt(getWorldWidth()) + 1;
			int y = r.nextInt(getWorldHeight()) + 1;
			int dir = r.nextInt(4);
			Color color = colors[r.nextInt(colors.length)];
 
			MyKarel karel = new MyKarel(x, y, dir, color);
			list[i] = karel;
		}
 
		for (int i = 1; i < list.length; i++)
			addIKarel(list[i]);
	}
 
	@Override
	public void onStart() {
		for (MyKarel karel : list) {
			new Crazy(karel).start();
		}
	}
 
	public static void main(String[] args) {
		IKarelProgram.main(args, new MyKarel(1, 1, EAST, BLUE));
	}
}
개인 도구
이름공간
변수
행위
둘러보기
구성원
연구
연구실
기타
도구모음
인쇄/내보내기