// David Eck, eck@hws.edu, August 1996 import java.awt.*; public class SymmetricMosaicWalk extends java.applet.Applet implements Runnable { /* Applet shows a window full of colored squares. A "disturbance" moves randomly around in the window, randomly changing the color of each square that it visits. The program runs in an infinite loop, and so will never end on its own. The mosaic is cleared after every STEPS steps. This applet uses a symmetrical random mosaic, with vertical and horizontal symmetry. */ int ROWS = 10; // number of rows of squares; can be reset by applet param named "rows" int COLUMNS = 20; // number of colums of squares; can be reset by applet param named "columns" int STEPS = 1000; // number of steps in one random walk; after each walk,the mosaic // is clearead and a new walk is started. int currentRow; // row currently containing "disturbance" int currentColumn; // column currently containing "disturbance" MosaicCanvas mosaic; // the actual mosaic of colored squares Thread runner = null; // thread for running the moving disturbance animation public void init() { setLayout(new BorderLayout()); String param; param = getParameter("rows"); if (param != null) { try { ROWS = Integer.parseInt(param); } catch (NumberFormatException e) { } } param = getParameter("columns"); if (param != null) { try { COLUMNS = Integer.parseInt(param); } catch (NumberFormatException e) { } } param = getParameter("steps"); if (param != null) { try { STEPS = Integer.parseInt(param); } catch (NumberFormatException e) { } } mosaic = new SymmetricMosaicCanvas(ROWS,COLUMNS); add("Center",mosaic); } public void start() { if (runner == null) { runner = new Thread(this); runner.start(); } } public void stop() { if (runner != null) { runner.stop(); runner = null; } } public void run() { currentRow = ROWS / 2; currentColumn = COLUMNS / 2; while (true) { for (int i=0; i= COLUMNS) currentColumn = 0; break; case 2: // move down currentRow ++; if (currentRow >= ROWS) currentRow = 0; break; case 3: currentColumn--; if (currentColumn < 0) currentColumn = COLUMNS - 1; break; } } // end of randomMove() } // end of class