@@ -18,11 +18,19 @@ public class Grid { | |||
} | |||
} | |||
public Patch getPatch (int x, int y) { | |||
public int getWidth() { | |||
return _grid.length; | |||
} | |||
public int getHeight() { | |||
return _grid[0].length; | |||
} | |||
public Patch getPatch(int x, int y) { | |||
return _grid[x][y]; | |||
} | |||
public void setPatch (int x, int y, Patch p) { | |||
public void setPatch(int x, int y, Patch p) { | |||
_grid[x][y] = p; | |||
} | |||
@@ -1,18 +1,31 @@ | |||
package edu.stuy.goldfish; | |||
public class Patch { | |||
private int _pxcor, _pycor; | |||
private int _pxcor, _pycor, _state; | |||
private String _plabel; | |||
private Grid _myGrid; | |||
public Patch(Grid grid, int xcor, int ycor) { | |||
public Patch(Grid grid, int xcor, int ycor, int state) { | |||
_myGrid = grid; | |||
_pxcor = xcor; | |||
_pycor = ycor; | |||
_state = state; | |||
} | |||
public Patch () { | |||
this(new Grid(), 0, 0); | |||
public Patch() { | |||
this(new Grid(), 0, 0, 0); | |||
} | |||
public Grid getGrid() { | |||
return _grid; | |||
} | |||
public int getX() { | |||
return _pxcor; | |||
} | |||
public int getY() { | |||
return _pycor; | |||
} | |||
public String toString() { | |||
@@ -1,37 +1,119 @@ | |||
package edu.stuy.goldfish; | |||
import java.awt.Color; | |||
public class Render { | |||
public Render (int width, int height) { | |||
} | |||
public Render () { | |||
this(100,100); | |||
} | |||
/** | |||
* Render a color to a position | |||
* | |||
* This should draw to a buffer, which should be | |||
* rendered with render() | |||
* | |||
* @param x The x coordinate | |||
* @param y The y coordinate | |||
* @param c The color to draw | |||
*/ | |||
public void draw (int x, int y, Color c) { | |||
} | |||
/** | |||
* Renders the stored buffer to the screen. | |||
*/ | |||
public void render () { | |||
} | |||
} | |||
import java.awt.Canvas; | |||
import java.awt.Dimension; | |||
import java.awt.Graphics; | |||
import java.awt.image.BufferStrategy; | |||
import java.awt.image.BufferedImage; | |||
import java.awt.image.DataBufferInt; | |||
import javax.swing.JFrame; | |||
public class Renderer extends Canvas implements Runnable { | |||
private static final long serialVersionUID = 1L; | |||
public static int width = 320; | |||
public static int height = 240; | |||
public static int scale = 2; | |||
public String title = "Title"; | |||
private Thread thread; | |||
private JFrame frame; | |||
private boolean running = false; | |||
private Screen screen; | |||
private BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); | |||
private int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData(); | |||
public Renderer(int width, int height) { | |||
System.out.println(width); | |||
} | |||
public Renderer() { | |||
Dimension size = new Dimension(width*scale, height*scale); | |||
setPreferredSize(size); | |||
screen = new Screen(width, height); | |||
frame = new JFrame(); | |||
} | |||
public synchronized void start() { | |||
running = true; | |||
thread = new Thread(this, "Display"); | |||
thread.start(); | |||
} | |||
public synchronized void stop() { | |||
running = false; | |||
try { | |||
thread.join(); | |||
} catch (InterruptedException e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
public void run() { | |||
long lastTime = System.nanoTime(); | |||
long timer = System.currentTimeMillis(); | |||
double delta = 0; | |||
int frames = 0; | |||
int updates = 0; | |||
long now; | |||
while (running) { | |||
now = System.nanoTime(); | |||
delta += (now - lastTime) * 6.0 / 100000000.0; | |||
lastTime = now; | |||
while (delta >= 1) { | |||
update(); | |||
updates++; | |||
delta--; | |||
render(); | |||
frames++; | |||
} | |||
if (System.currentTimeMillis() - timer > 1000) { | |||
timer += 1000; | |||
frame.setTitle(title + " | updates: " + updates + " | frames: "+ frames); | |||
frames = 0; | |||
updates = 0; | |||
} | |||
} | |||
stop(); | |||
} | |||
public void update() { | |||
} | |||
public void render() { | |||
BufferStrategy bs = getBufferStrategy(); | |||
if (bs == null) { | |||
createBufferStrategy(3); | |||
return; | |||
} | |||
screen.clear(); | |||
screen.render(); | |||
for (int i = 0; i < pixels.length; i++) { | |||
pixels[i] = screen.pixels[i]; | |||
} | |||
Graphics g = bs.getDrawGraphics(); | |||
g.drawImage(image, 0, 0, getWidth(), getHeight(), null); | |||
g.dispose(); | |||
bs.show(); | |||
} | |||
public static void main(String[] args) { | |||
Renderer render = new Renderer(); | |||
render.frame.setResizable(false); | |||
render.frame.setTitle(render.title); | |||
render.frame.add(render); | |||
render.frame.pack(); | |||
render.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | |||
render.frame.setLocationRelativeTo(null); | |||
render.frame.setVisible(true); | |||
render.start(); | |||
} | |||
} |
@@ -1,120 +0,0 @@ | |||
import java.awt.Canvas; | |||
import java.awt.Dimension; | |||
import java.awt.Graphics; | |||
import java.awt.image.BufferStrategy; | |||
import java.awt.image.BufferedImage; | |||
import java.awt.image.DataBufferInt; | |||
import javax.swing.JFrame; | |||
public class Renderer extends Canvas implements Runnable { | |||
private static final long serialVersionUID = 1L; | |||
public static int width = 320; | |||
public static int height = 240; | |||
public static int scale = 2; | |||
public String title = "Title"; | |||
private Thread thread; | |||
private JFrame frame; | |||
private boolean running = false; | |||
private Screen screen; | |||
private BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); | |||
private int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData(); | |||
public Renderer(int width, int height) { | |||
System.out.println(width); | |||
} | |||
public Renderer() { | |||
Dimension size = new Dimension(width*scale, height*scale); | |||
setPreferredSize(size); | |||
screen = new Screen(width, height); | |||
frame = new JFrame(); | |||
} | |||
public synchronized void start() { | |||
running = true; | |||
thread = new Thread(this, "Display"); | |||
thread.start(); | |||
} | |||
public synchronized void stop() { | |||
running = false; | |||
try { | |||
thread.join(); | |||
} catch (InterruptedException e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
public void run() { | |||
long lastTime = System.nanoTime(); | |||
long timer = System.currentTimeMillis(); | |||
double delta = 0; | |||
int frames = 0; | |||
int updates = 0; | |||
long now; | |||
while (running) { | |||
now = System.nanoTime(); | |||
delta += (now - lastTime) * 6.0 / 100000000.0; | |||
lastTime = now; | |||
while (delta >= 1) { | |||
update(); | |||
updates++; | |||
delta--; | |||
render(); | |||
frames++; | |||
} | |||
if (System.currentTimeMillis() - timer > 1000) { | |||
timer += 1000; | |||
frame.setTitle(title + " | updates: " + updates + " | frames: "+ frames); | |||
frames = 0; | |||
updates = 0; | |||
} | |||
} | |||
stop(); | |||
} | |||
public void update() { | |||
} | |||
public void render() { | |||
BufferStrategy bs = getBufferStrategy(); | |||
if (bs == null) { | |||
createBufferStrategy(3); | |||
return; | |||
} | |||
screen.clear(); | |||
screen.render(); | |||
for (int i = 0; i < pixels.length; i++) { | |||
pixels[i] = screen.pixels[i]; | |||
} | |||
Graphics g = bs.getDrawGraphics(); | |||
g.drawImage(image, 0, 0, getWidth(), getHeight(), null); | |||
g.dispose(); | |||
bs.show(); | |||
} | |||
public static void main(String[] args) { | |||
Renderer render = new Renderer(); | |||
render.frame.setResizable(false); | |||
render.frame.setTitle(render.title); | |||
render.frame.add(render); | |||
render.frame.pack(); | |||
render.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | |||
render.frame.setLocationRelativeTo(null); | |||
render.frame.setVisible(true); | |||
render.start(); | |||
render.screen.draw(100,100,0xFFFFFF); | |||
} | |||
} |
@@ -1,3 +1,4 @@ | |||
import java.util.Random; | |||
public class Screen { | |||
@@ -5,6 +6,8 @@ public class Screen { | |||
public int[] pixels; | |||
private int[] _grid; | |||
Random random = new Random(); | |||
public Screen(int width, int height) { | |||
this.width = width; | |||
this.height = height; | |||
@@ -22,7 +25,8 @@ public class Screen { | |||
public void render() { | |||
for (int x = 0; x < width; x++) { | |||
for (int y = 0; y < height; y++) { | |||
pixels[x + y * width] = _grid[x + y * width]; | |||
pixels[x+y*width] = random.nextInt(); | |||
//pixels[x + y * width] = _grid[x + y * width]; | |||
} | |||
} | |||
} | |||