From a35a45f3ea1bbf8a5e810baa5cd33c6ac7c4b1de Mon Sep 17 00:00:00 2001 From: Josh Hofing Date: Wed, 16 Jan 2013 23:08:21 -0500 Subject: [PATCH] PRETTY COLORS. :D --- src/Goldfish.java | 12 ++ src/Render.java | 400 +++++++++++++++++++++++++++--------------------------- 2 files changed, 214 insertions(+), 198 deletions(-) diff --git a/src/Goldfish.java b/src/Goldfish.java index 34c3b84..bcfb77f 100644 --- a/src/Goldfish.java +++ b/src/Goldfish.java @@ -35,6 +35,18 @@ public class Goldfish { } } + + public static int getMaxStates(String rule) { + if (rule.equals("Conway")) + return Conway.states; + else if (rule.equals("Conway4")) + return Conway4.states; + else if (rule.equals("Life Without Death")) + return LifeWithoutDeath.states; + 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) { diff --git a/src/Render.java b/src/Render.java index 78b7f39..d9c13ce 100644 --- a/src/Render.java +++ b/src/Render.java @@ -1,198 +1,202 @@ -package edu.stuy.goldfish; - -import java.awt.*; -import java.awt.event.*; -import java.awt.image.*; - -import javax.swing.*; - -public class Render extends Canvas implements Runnable, MouseListener, - MouseMotionListener, ActionListener, ItemListener { - private static final long serialVersionUID = 1L; - - public static String title = "Goldfish"; - public static int width; - public static int height; - public static int scale; - public static int max_fps = 15; - - public boolean paused; - public String rule; - - private Grid _grid; - private BufferedImage _image; - private int[] _pixels; - private long _lastTick; - private String[] _rules; - private JFrame _frame; - - public Render(int width, int height, Grid g, String[] rules) { - addMouseListener(this); - addMouseMotionListener(this); - Render.width = width; - Render.height = height; - setScale(); - paused = false; - rule = rules[0]; - _grid = g; - _image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); - _pixels = ((DataBufferInt) _image.getRaster().getDataBuffer()).getData(); - _lastTick = 0; - _rules = rules; - Dimension size = new Dimension(width * scale, height * scale); - setPreferredSize(size); - setFrame(); - } - - public Render(int width, int height, Grid g) { - this(width, height, g, new String[0]); - } - - public Render(int width, int height) { - this(width, height, new Grid(width, height)); - } - - public Render() { - this(256, 256); - } - - private void setScale() { - if (height <= 128 || width <= 128) { - Render.scale = 4; - } else if (height <= 256 || width <= 256) { - Render.scale = 2; - } else { - Render.scale = 1; - } - } - - private void setFrame() { - JMenuBar menuBar = new JMenuBar(); - JMenu menuMain = new JMenu("Menu"); - JMenu menuAlgo = new JMenu("Algorithms"); - for (String rule : _rules) { - JMenuItem menuAlgoItem = new JMenuItem(rule); - menuAlgo.add(menuAlgoItem); - menuAlgoItem.addActionListener(this); - } - menuMain.add(menuAlgo); - menuBar.add(menuMain); - - JCheckBoxMenuItem pauseButton = new JCheckBoxMenuItem("Pause"); - menuBar.add(pauseButton); - pauseButton.addItemListener(this); - - _frame = new JFrame(); - _frame.setJMenuBar(menuBar); - _frame.setResizable(false); - _frame.setTitle(title); - _frame.add(this); - _frame.pack(); - _frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - _frame.setLocationRelativeTo(null); - _frame.setVisible(true); - } - - private void update() { - int state; - 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) { - } else { - draw(i, j, state * 0xffffff); - } - } - } - } - - public void run() { - BufferStrategy bs; - Graphics g; - - bs = getBufferStrategy(); - if (bs == null) { - createBufferStrategy(1); - return; - } - - update(); - - g = bs.getDrawGraphics(); - g.drawImage(_image, 0, 0, getWidth(), getHeight(), null); - g.dispose(); - bs.show(); - } - - public void sleep() { - long since = System.currentTimeMillis() - _lastTick; - if (since < 1000 / max_fps) { - try { - Thread.sleep(1000 / max_fps - since); - } catch (InterruptedException e) { - return; - } - } - _lastTick = System.currentTimeMillis(); - } - - public void setGrid(Grid g) { - _grid = g; - } - - public void draw(int x, int y, int color) { - _pixels[x + y * width] = color; - } - - @Override - public void mouseDragged(MouseEvent e) { - if (e.getX() < 0 || e.getY() < 0 || e.getX() / scale > width || e.getY() / scale > height) - return; - _grid.getPatch(e.getX() / scale, e.getY() / scale).setState(1); - e.consume(); - } - - @Override - public void mouseClicked(MouseEvent e) { - _grid.getPatch(e.getX() / scale, e.getY() / scale).setState(1); - e.consume(); - } - - @Override - public void mouseEntered(MouseEvent e) { - } - - @Override - public void mouseExited(MouseEvent e) { - } - - @Override - public void mousePressed(MouseEvent e) { - _grid.getPatch(e.getX() / scale, e.getY() / scale).setState(1); - e.consume(); - } - - @Override - public void mouseReleased(MouseEvent e) { - } - - @Override - public void mouseMoved(MouseEvent e) { - } - - // Affects the algorithms menu - @Override - public void actionPerformed(ActionEvent event) { - rule = event.getActionCommand(); - } - - // Affects the pause button - @Override - public void itemStateChanged(ItemEvent event) { - if (event.getStateChange() == ItemEvent.SELECTED) - paused = true; - else - paused = false; - return; - } -} +package edu.stuy.goldfish; + +import java.awt.*; +import java.awt.event.*; +import java.awt.image.*; + +import javax.swing.*; + +public class Render extends Canvas implements Runnable, MouseListener, + MouseMotionListener, ActionListener, ItemListener { + private static final long serialVersionUID = 1L; + + public static String title = "Goldfish"; + public static int width; + public static int height; + public static int scale; + public static int max_fps = 15; + + public boolean paused; + public String rule; + + private Grid _grid; + private BufferedImage _image; + private int[] _pixels; + private long _lastTick; + private String[] _rules; + private JFrame _frame; + + public Render(int width, int height, Grid g, String[] rules) { + addMouseListener(this); + addMouseMotionListener(this); + Render.width = width; + Render.height = height; + setScale(); + paused = false; + rule = rules[0]; + _grid = g; + _image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + _pixels = ((DataBufferInt) _image.getRaster().getDataBuffer()).getData(); + _lastTick = 0; + _rules = rules; + Dimension size = new Dimension(width * scale, height * scale); + setPreferredSize(size); + setFrame(); + } + + public Render(int width, int height, Grid g) { + this(width, height, g, new String[0]); + } + + public Render(int width, int height) { + this(width, height, new Grid(width, height)); + } + + public Render() { + this(256, 256); + } + + private void setScale() { + if (height <= 128 || width <= 128) { + Render.scale = 4; + } else if (height <= 256 || width <= 256) { + Render.scale = 2; + } else { + Render.scale = 1; + } + } + + private void setFrame() { + JMenuBar menuBar = new JMenuBar(); + JMenu menuMain = new JMenu("Menu"); + JMenu menuAlgo = new JMenu("Algorithms"); + for (String rule : _rules) { + JMenuItem menuAlgoItem = new JMenuItem(rule); + menuAlgo.add(menuAlgoItem); + menuAlgoItem.addActionListener(this); + } + menuMain.add(menuAlgo); + menuBar.add(menuMain); + + JCheckBoxMenuItem pauseButton = new JCheckBoxMenuItem("Pause"); + menuBar.add(pauseButton); + pauseButton.addItemListener(this); + + _frame = new JFrame(); + _frame.setJMenuBar(menuBar); + _frame.setResizable(false); + _frame.setTitle(title); + _frame.add(this); + _frame.pack(); + _frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + _frame.setLocationRelativeTo(null); + _frame.setVisible(true); + } + + private void update() { + int state; + int states = Goldfish.getMaxStates(rule); + 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) { + } else { + draw(i, j, (int) ((state/((double) states - 1)) * 0xffffff)); + } + } + } + } + + public void run() { + BufferStrategy bs; + Graphics g; + + bs = getBufferStrategy(); + if (bs == null) { + createBufferStrategy(1); + return; + } + + update(); + + g = bs.getDrawGraphics(); + g.drawImage(_image, 0, 0, getWidth(), getHeight(), null); + g.dispose(); + bs.show(); + } + + public void sleep() { + long since = System.currentTimeMillis() - _lastTick; + if (since < 1000 / max_fps) { + try { + Thread.sleep(1000 / max_fps - since); + } catch (InterruptedException e) { + return; + } + } + _lastTick = System.currentTimeMillis(); + } + + public void setGrid(Grid g) { + _grid = g; + } + + public void draw(int x, int y, int color) { + _pixels[x + y * width] = color; + } + + @Override + public void mouseDragged(MouseEvent e) { + int states = Goldfish.getMaxStates(rule) - 1; + if (e.getX() < 0 || e.getY() < 0 || e.getX() / scale > width || e.getY() / scale > height) + return; + _grid.getPatch(e.getX() / scale, e.getY() / scale).setState(states); + e.consume(); + } + + @Override + public void mouseClicked(MouseEvent e) { + int states = Goldfish.getMaxStates(rule) - 1; + _grid.getPatch(e.getX() / scale, e.getY() / scale).setState(states); + e.consume(); + } + + @Override + public void mouseEntered(MouseEvent e) { + } + + @Override + public void mouseExited(MouseEvent e) { + } + + @Override + public void mousePressed(MouseEvent e) { + int states = Goldfish.getMaxStates(rule) - 1; + _grid.getPatch(e.getX() / scale, e.getY() / scale).setState(states); + e.consume(); + } + + @Override + public void mouseReleased(MouseEvent e) { + } + + @Override + public void mouseMoved(MouseEvent e) { + } + + // Affects the algorithms menu + @Override + public void actionPerformed(ActionEvent event) { + rule = event.getActionCommand(); + } + + // Affects the pause button + @Override + public void itemStateChanged(ItemEvent event) { + if (event.getStateChange() == ItemEvent.SELECTED) + paused = true; + else + paused = false; + return; + } +}