From c6fba23c2b7d45b95d28c670ffc7ce37cd3eb4ab Mon Sep 17 00:00:00 2001 From: Lee Date: Thu, 17 Jan 2013 03:49:46 -0500 Subject: [PATCH] Better pause/reset/clear buttons. Also set some default patterns for some of the algorithms. --- src/Goldfish.java | 59 +++++++++++++++++++++++++++++++++++++++++++------------ src/Render.java | 58 +++++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 92 insertions(+), 25 deletions(-) diff --git a/src/Goldfish.java b/src/Goldfish.java index bcfb77f..4fe6fef 100644 --- a/src/Goldfish.java +++ b/src/Goldfish.java @@ -1,5 +1,7 @@ package edu.stuy.goldfish; +import java.util.Random; + import edu.stuy.goldfish.rules.*; public class Goldfish { @@ -7,6 +9,8 @@ public class Goldfish { private Grid _grid; private Render _render; + + private Random random = new Random(); public Goldfish() { int width = 128; @@ -16,8 +20,12 @@ public class Goldfish { } public void run() { - setup(); + setup(_render.rule); while (true) { + if (_render.reset) { + setup(_render.rule); + _render.reset = false; + } if (!_render.paused) { String rule = _render.rule; if (rule.equals("Conway")) @@ -34,7 +42,6 @@ public class Goldfish { _render.sleep(); } } - public static int getMaxStates(String rule) { if (rule.equals("Conway")) @@ -46,17 +53,43 @@ public class Goldfish { else if (rule.equals("Brian's Brain")) return BriansBrain.states; return 2; - } - private void setup() { - for (int i = 0; i < _grid.getWidth(); i += 16) { - for (int j = 0; j < _grid.getHeight(); j += 16) { - _grid.getPatch(i + 1, j + 0).setState(1); - _grid.getPatch(i + 2, j + 1).setState(1); - _grid.getPatch(i + 2, j + 2).setState(1); - _grid.getPatch(i + 1, j + 2).setState(1); - _grid.getPatch(i + 0, j + 2).setState(1); - } - } + } + + private void setup(String rule) { + if(rule.equals("Conway")) { + int[][] glidergun = { + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1}, + {0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1}, + {1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} + }; + for(int i = 0; i < 36; i++) { + for(int j = 0; j < 9; j++) { + _grid.getPatch(i+2,j+2).setState(glidergun[j][i]); + } + } + } else if (rule.equals("Life Without Death")) { + int[][] pattern = { + {1,1,1,1,0,1}, + {1,0,1,1,1,1} + }; + for(int i = 0; i < 6; i++) { + for(int j = 0; j < 2; j++) { + _grid.getPatch(i+((_grid.getHeight()-6)/2),j+((_grid.getWidth()-2)/2)).setState(pattern[j][i]); + } + } + } else if (rule.equals("Brian's Brain")) { + for(int i = 0; i < _grid.getHeight(); i++) { + for (int j = 0; j < _grid.getWidth(); j++) { + _grid.getPatch(i,j).setState(random.nextInt(3)); + } + } + } } public static void main(String[] args) { diff --git a/src/Render.java b/src/Render.java index d9c13ce..d9dc8f0 100644 --- a/src/Render.java +++ b/src/Render.java @@ -18,14 +18,19 @@ public class Render extends Canvas implements Runnable, MouseListener, public boolean paused; public String rule; + public boolean reset; private Grid _grid; - private BufferedImage _image; private int[] _pixels; + + private BufferedImage _image; + private long _lastTick; private String[] _rules; private JFrame _frame; + private JButton pauseButton; + public Render(int width, int height, Grid g, String[] rules) { addMouseListener(this); addMouseMotionListener(this); @@ -33,6 +38,7 @@ public class Render extends Canvas implements Runnable, MouseListener, Render.height = height; setScale(); paused = false; + reset = false; rule = rules[0]; _grid = g; _image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); @@ -78,9 +84,20 @@ public class Render extends Canvas implements Runnable, MouseListener, menuMain.add(menuAlgo); menuBar.add(menuMain); - JCheckBoxMenuItem pauseButton = new JCheckBoxMenuItem("Pause"); + pauseButton = new JButton("Pause"); + pauseButton.setActionCommand("pause"); menuBar.add(pauseButton); - pauseButton.addItemListener(this); + pauseButton.addActionListener(this); + + JButton resetButton = new JButton("Reset"); + resetButton.setActionCommand("reset"); + menuBar.add(resetButton); + resetButton.addActionListener(this); + + JButton clearButton = new JButton("Clear"); + clearButton.setActionCommand("clear"); + menuBar.add(clearButton); + clearButton.addActionListener(this); _frame = new JFrame(); _frame.setJMenuBar(menuBar); @@ -99,9 +116,9 @@ public class Render extends Canvas implements Runnable, MouseListener, for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { state = _grid.getPatch(i, j).getState(); - if(_pixels[i + j * width] == state) { + if (_pixels[i + j * width] == state) { } else { - draw(i, j, (int) ((state/((double) states - 1)) * 0xffffff)); + draw(i, j, (int) ((state / ((double) states - 1)) * 0xffffff)); } } } @@ -144,6 +161,14 @@ 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++) { + _grid.getPatch(i, j).setState(0); + } + } + } @Override public void mouseDragged(MouseEvent e) { @@ -187,16 +212,25 @@ public class Render extends Canvas implements Runnable, MouseListener, // Affects the algorithms menu @Override public void actionPerformed(ActionEvent event) { - rule = event.getActionCommand(); + if ("pause".equals(event.getActionCommand())) { + if (paused) { + paused = false; + pauseButton.setText("Pause"); + } else { + paused = true; + pauseButton.setText("Unpause"); + } + } else if ("reset".equals(event.getActionCommand())) { + clear(); + reset = true; + } else if ("clear".equals(event.getActionCommand())) { + clear(); + } else { + rule = event.getActionCommand(); + } } - // Affects the pause button @Override public void itemStateChanged(ItemEvent event) { - if (event.getStateChange() == ItemEvent.SELECTED) - paused = true; - else - paused = false; - return; } }