@@ -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]; | 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; | _grid[x][y] = p; | ||||
} | } | ||||
@@ -1,18 +1,31 @@ | |||||
package edu.stuy.goldfish; | package edu.stuy.goldfish; | ||||
public class Patch { | public class Patch { | ||||
private int _pxcor, _pycor; | |||||
private int _pxcor, _pycor, _state; | |||||
private String _plabel; | private String _plabel; | ||||
private Grid _myGrid; | private Grid _myGrid; | ||||
public Patch(Grid grid, int xcor, int ycor) { | |||||
public Patch(Grid grid, int xcor, int ycor, int state) { | |||||
_myGrid = grid; | _myGrid = grid; | ||||
_pxcor = xcor; | _pxcor = xcor; | ||||
_pycor = ycor; | _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() { | 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 { | public class Screen { | ||||
@@ -5,6 +6,8 @@ public class Screen { | |||||
public int[] pixels; | public int[] pixels; | ||||
private int[] _grid; | private int[] _grid; | ||||
Random random = new Random(); | |||||
public Screen(int width, int height) { | public Screen(int width, int height) { | ||||
this.width = width; | this.width = width; | ||||
this.height = height; | this.height = height; | ||||
@@ -22,7 +25,8 @@ public class Screen { | |||||
public void render() { | public void render() { | ||||
for (int x = 0; x < width; x++) { | for (int x = 0; x < width; x++) { | ||||
for (int y = 0; y < height; y++) { | 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]; | |||||
} | } | ||||
} | } | ||||
} | } | ||||