|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- 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) {
- }
-
- @Override
- public void mouseReleased(MouseEvent e) {
- }
-
- @Override
- public void mouseMoved(MouseEvent e) {
- }
- }
|