diff --git a/src/Render.java b/src/Render.java index 671b534..5f962c9 100644 --- a/src/Render.java +++ b/src/Render.java @@ -1,164 +1,164 @@ -package edu.stuy.goldfish; - -import java.awt.Canvas; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.awt.event.MouseMotionListener; -import java.awt.image.BufferStrategy; -import java.awt.image.BufferedImage; -import java.awt.image.DataBufferInt; - -import javax.swing.JFrame; - -public class Render extends Canvas implements Runnable, MouseListener, - MouseMotionListener { - 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; - - private JFrame _frame; - private BufferedImage _image; - private Grid _grid; - private int[] _pixels; - private long _last_tick; - - public Render(int width, int height, Grid g) { - addMouseListener(this); - addMouseMotionListener(this); - Render.width = width; - Render.height = height; - setScale(); - _grid = g; - _image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); - _pixels = ((DataBufferInt) _image.getRaster().getDataBuffer()) - .getData(); - _last_tick = 0; - Dimension size = new Dimension(width * scale, height * scale); - setPreferredSize(size); - setFrame(); - } - - 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() { - _frame = new JFrame(); - _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 clear() { - for (int x = 0; x < _pixels.length; x++) { - _pixels[x] = 0; - } - } - - private void update() { - for (int i = 0; i < width; i++) { - for (int j = 0; j < height; j++) { - draw(i, j, _grid.getPatch(i, j).getState() * 0xffffff); - } - } - } - - public void run() { - BufferStrategy bs; - Graphics g; - - bs = getBufferStrategy(); - if (bs == null) { - createBufferStrategy(1); - return; - } - - clear(); - update(); - - g = bs.getDrawGraphics(); - g.drawImage(_image, 0, 0, getWidth(), getHeight(), null); - g.dispose(); - bs.show(); - } - - public void sleep() { - long since = System.currentTimeMillis() - _last_tick; - if (since < 1000 / max_fps) { - try { - Thread.sleep(1000 / max_fps - since); - } catch (InterruptedException e) { - return; - } - } - _last_tick = 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) { - } -} +package edu.stuy.goldfish; + +import java.awt.Canvas; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; +import java.awt.image.BufferStrategy; +import java.awt.image.BufferedImage; +import java.awt.image.DataBufferInt; + +import javax.swing.JFrame; + +public class Render extends Canvas implements Runnable, MouseListener, + MouseMotionListener { + 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; + + private JFrame _frame; + private BufferedImage _image; + private Grid _grid; + private int[] _pixels; + private long _last_tick; + + public Render(int width, int height, Grid g) { + addMouseListener(this); + addMouseMotionListener(this); + Render.width = width; + Render.height = height; + setScale(); + _grid = g; + _image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + _pixels = ((DataBufferInt) _image.getRaster().getDataBuffer()) + .getData(); + _last_tick = 0; + Dimension size = new Dimension(width * scale, height * scale); + setPreferredSize(size); + setFrame(); + } + + 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() { + _frame = new JFrame(); + _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 clear() { + for (int x = 0; x < _pixels.length; x++) { + _pixels[x] = 0; + } + } + + private void update() { + for (int i = 0; i < width; i++) { + for (int j = 0; j < height; j++) { + draw(i, j, _grid.getPatch(i, j).getState() * 0xffffff); + } + } + } + + public void run() { + BufferStrategy bs; + Graphics g; + + bs = getBufferStrategy(); + if (bs == null) { + createBufferStrategy(1); + return; + } + + clear(); + update(); + + g = bs.getDrawGraphics(); + g.drawImage(_image, 0, 0, getWidth(), getHeight(), null); + g.dispose(); + bs.show(); + } + + public void sleep() { + long since = System.currentTimeMillis() - _last_tick; + if (since < 1000 / max_fps) { + try { + Thread.sleep(1000 / max_fps - since); + } catch (InterruptedException e) { + return; + } + } + _last_tick = 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) { + } +}