| @@ -5,6 +5,7 @@ import java.awt.event.*; | |||
| import java.awt.image.*; | |||
| import javax.swing.*; | |||
| import javax.swing.event.*; | |||
| import java.util.Random; | |||
| @@ -16,7 +17,7 @@ public class Render extends Canvas implements Runnable, MouseListener, | |||
| public static int width; | |||
| public static int height; | |||
| public static int scale; | |||
| public static int max_fps = 15; | |||
| public int fps_now; | |||
| public boolean paused; | |||
| public String rule; | |||
| @@ -32,7 +33,7 @@ public class Render extends Canvas implements Runnable, MouseListener, | |||
| private JFrame _frame; | |||
| private JButton pauseButton; | |||
| private Random random = new Random(); | |||
| public Render(int width, int height, Grid g, String[] rules) { | |||
| @@ -49,6 +50,7 @@ public class Render extends Canvas implements Runnable, MouseListener, | |||
| _pixels = ((DataBufferInt) _image.getRaster().getDataBuffer()).getData(); | |||
| _lastTick = 0; | |||
| _rules = rules; | |||
| fps_now = 15; | |||
| Dimension size = new Dimension(width * scale, height * scale); | |||
| setPreferredSize(size); | |||
| setFrame(); | |||
| @@ -90,6 +92,7 @@ public class Render extends Canvas implements Runnable, MouseListener, | |||
| pauseButton = new JButton("Pause"); | |||
| pauseButton.setActionCommand("pause"); | |||
| pauseButton.setPreferredSize(new Dimension(90,0)); | |||
| menuBar.add(pauseButton); | |||
| pauseButton.addActionListener(this); | |||
| @@ -97,17 +100,42 @@ public class Render extends Canvas implements Runnable, MouseListener, | |||
| resetButton.setActionCommand("reset"); | |||
| menuBar.add(resetButton); | |||
| resetButton.addActionListener(this); | |||
| JButton randomButton = new JButton("Random"); | |||
| randomButton.setActionCommand("random"); | |||
| menuBar.add(randomButton); | |||
| randomButton.addActionListener(this); | |||
| JButton clearButton = new JButton("Clear"); | |||
| clearButton.setActionCommand("clear"); | |||
| menuBar.add(clearButton); | |||
| clearButton.addActionListener(this); | |||
| JSlider framesPerSecond = new JSlider(JSlider.HORIZONTAL, 0, 30, 15); | |||
| ChangeListener fpschange = new ChangeListener() { | |||
| @Override | |||
| public void stateChanged(ChangeEvent event) { | |||
| JSlider source = (JSlider) event.getSource(); | |||
| if (!source.getValueIsAdjusting()) { | |||
| int fps = (int) source.getValue(); | |||
| if (fps == 0) { | |||
| paused = true; | |||
| pauseButton.setText("Unpause"); | |||
| } else { | |||
| paused = false; | |||
| fps_now = fps; | |||
| pauseButton.setText("Pause"); | |||
| } | |||
| } | |||
| } | |||
| }; | |||
| framesPerSecond.addChangeListener(fpschange); | |||
| framesPerSecond.setMajorTickSpacing(10); | |||
| framesPerSecond.setMinorTickSpacing(1); | |||
| framesPerSecond.setPaintTicks(true); | |||
| framesPerSecond.setPaintLabels(true); | |||
| menuBar.add(framesPerSecond); | |||
| _frame = new JFrame(); | |||
| _frame.setJMenuBar(menuBar); | |||
| _frame.setResizable(false); | |||
| @@ -153,9 +181,9 @@ public class Render extends Canvas implements Runnable, MouseListener, | |||
| public void sleep() { | |||
| long since = System.currentTimeMillis() - _lastTick; | |||
| if (since < 1000 / max_fps) { | |||
| if (since < 1000 / fps_now) { | |||
| try { | |||
| Thread.sleep(1000 / max_fps - since); | |||
| Thread.sleep(1000 / fps_now - since); | |||
| } catch (InterruptedException e) { | |||
| return; | |||
| } | |||
| @@ -170,7 +198,7 @@ public class Render extends Canvas implements Runnable, MouseListener, | |||
| public void draw(int x, int y, int color) { | |||
| _pixels[x + y * width] = color; | |||
| } | |||
| public void clear() { | |||
| for (int i = 0; i < _grid.getHeight(); i++) { | |||
| for (int j = 0; j < _grid.getWidth(); j++) { | |||
| @@ -178,11 +206,11 @@ public class Render extends Canvas implements Runnable, MouseListener, | |||
| } | |||
| } | |||
| } | |||
| public void randomize() { | |||
| for(int i = 0; i < _grid.getHeight(); i++) { | |||
| for (int i = 0; i < _grid.getHeight(); i++) { | |||
| for (int j = 0; j < _grid.getWidth(); j++) { | |||
| _grid.getPatch(i,j).setState(random.nextInt(Goldfish.getMaxStates(rule))); | |||
| _grid.getPatch(i, j).setState(random.nextInt(Goldfish.getMaxStates(rule))); | |||
| } | |||
| } | |||
| } | |||