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)); } }