/* Copyright (C) 2002 J. M. Spivey */ import java.awt.*; import java.awt.event.*; public class Turmites extends DemoFrame { private Machine machine = new Machine(); private Arena arena = new Arena(machine); private Panel buttons = new Panel(); private Editor editor = null; private Loader loader = null; private int delay; public Turmites() { super("Turmites"); setLocation(300,0); loader = new Loader(this); loader.setLocation(200,200); addButton("Load", new ActionListener() { public void actionPerformed(ActionEvent e) { loader.setVisible(true); } }); addButton("Play", new ActionListener() { public void actionPerformed(ActionEvent e) { arena.play(); } }); addButton("Slow", new ActionListener() { public void actionPerformed(ActionEvent e) { start(100); } }); addButton("Medium", new ActionListener() { public void actionPerformed(ActionEvent e) { start(30); } }); addButton("Fast", new ActionListener() { public void actionPerformed(ActionEvent e) { start(0); } }); addButton("Stop", new ActionListener() { public void actionPerformed(ActionEvent e) { stop(); } }); addButton("Clear", new ActionListener() { public void actionPerformed(ActionEvent e) { stop(); arena.clear(); } }); addButton("Zoom Out", new ActionListener() { public void actionPerformed(ActionEvent e) { zoomOut(); } }); addButton("Zoom In", new ActionListener() { public void actionPerformed(ActionEvent e) { zoomIn(); } }); addButton("Edit", new ActionListener() { public void actionPerformed(ActionEvent e) { if (editor == null) { editor = new Editor(machine, loader); editor.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { editor.setVisible(false); } }); editor.setLocation(300,100); } editor.setVisible(true); } }); addButton("Quit", new ActionListener() { public void actionPerformed(ActionEvent e) { die(); } }); add(arena, "Center"); add(buttons, "South"); pack(); machine.setup(loader.defaultDesc()); } private void addButton(String label, ActionListener action) { Button b = new Button(label); if (action != null) b.addActionListener(action); buttons.add(b); } public void load(String desc) { machine.setup(desc); if (editor != null) editor.reload(); } private void zoomOut() { int scale = arena.getScale(); if (scale > 1) arena.setScale(scale/2); } private void zoomIn() { int scale = arena.getScale(); if (scale < arena.MAXSCALE) arena.setScale(scale*2); } private Thread runThread; private class RunThread extends Thread { public void run() { int counter = 0; while (runThread == this) { arena.play(); try { if (delay > 0) sleep(delay); else if (counter++ % 257 == 0) sleep(0,1); } catch (InterruptedException e) {} } } } public void start(int delay) { this.delay = delay; if (runThread == null) { runThread = new RunThread(); runThread.start(); } } public void stop() { runThread = null; } public void die() { if (editor != null) editor.dispose(); super.die(); } public static void main(String args[]) { Turmites app = new Turmites(); app.setVisible(true); } }