import java.awt.*; import java.applet.*; import java.util.*; public class color1 extends Applet implements Runnable { /************************************************************************/ /* */ /* Class color1: Map Coloring Sample Applet */ /* */ /* Copyright (C) 1996 by Yasusi Kanada */ /* */ /************************************************************************/ final int n_areas = 4; protected Color[] area_color = {Color.yellow, Color.yellow, Color.yellow, Color.yellow}; final Color[] id2color = {Color.yellow, Color.blue, Color.red, Color.green}; private Random selector = new Random(); private int random(int max) { return (selector.nextInt() & 0x7FFFFFFF) % max; } private Thread painter; /*======================================================================*/ /* Widget handler */ /*======================================================================*/ private void init_widgets() { setLayout(new FlowLayout()); add(new Button("Apply rule")); } public boolean action(Event e, Object arg) { if ("Apply rule".equals(arg)) { painter = new Thread(this); painter.start(); return true; } else { return false; }; } public void run() { int area = random(4); area_color[area] = Color.white; repaint(); try {painter.sleep(100);} /* sleep 200 ms */ catch (InterruptedException e) {}; area_color[area] = id2color[random(4)]; repaint(); } /*======================================================================*/ /* Map viewer */ /*======================================================================*/ protected int size_factor; /* Actual drawing size = size_factor * coord. */ private Polygon[] polygons = new Polygon[n_areas]; /* Border polygons. */ private Polygon create_polygon(int[] indices, int[] X, int[] Y) { int[] x_coords = new int[indices.length]; int[] y_coords = new int[indices.length]; for (int i = 0; i < indices.length; i++) { x_coords[i] = size_factor * X[indices[i]]; y_coords[i] = size_factor * Y[indices[i]]; }; return new Polygon(x_coords, y_coords, indices.length); } private void init_view() { int[] X = /* X coordinate indices for polygons */ {0, 2, 4, 2, 0, 1, 3, 4, 0, 4}; int[] Y = /* Y coordinate indices for polygons */ {0, 0, 0, 1, 3, 3, 3, 3, 4, 4}; int[][] border_points = /* Border point coordinates of polygons */ {{0, 1, 3, 5, 4}, {1, 2, 7, 6, 3}, {3, 5, 6}, {4, 5, 6, 7, 9, 8}}; size_factor = size().width / 4; for (int i = 0; i < border_points.length; i++) { polygons[i] = create_polygon(border_points[i], X, Y); }; } private void paint_area(int area_id, Graphics g) { g.setColor(area_color[area_id]); g.fillPolygon(polygons[area_id]); g.setColor(Color.black); g.drawPolygon(polygons[area_id]); } public void paint(Graphics g) { for (int i = 0; i < n_areas; i++) { paint_area(i, g); }; } public void update(Graphics g) { paint(g); } /*======================================================================*/ /* Dispatchers */ /*======================================================================*/ public void init() { init_widgets(); init_view(); } public void start() { } public void stop() { painter.stop(); } }