142 lines
4 KiB
Java
142 lines
4 KiB
Java
|
|
||
|
import java.util.*;
|
||
|
import java.awt.*;
|
||
|
import java.lang.Math.*;
|
||
|
|
||
|
public class TestGraphicWrapper {
|
||
|
|
||
|
static int width = 128;
|
||
|
static int height = 128;
|
||
|
static GraphicsWrapper screen;
|
||
|
|
||
|
private static void checker (int polarity, double r, double g, double b) {
|
||
|
screen.clearBuffer();
|
||
|
|
||
|
for (int i = 0; i < height; i++) {
|
||
|
for (int j = 0; j < width; j++) {
|
||
|
|
||
|
if (((i / 8) % 2 == 1) == ((j / 8) % 2 == polarity)) {
|
||
|
screen.setPixel (j, i, r, g, b);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void init () {
|
||
|
screen = new GraphicsWrapper (width, height, 1);
|
||
|
}
|
||
|
|
||
|
static int countNeighbours (int x0, int y0) {
|
||
|
int count = 0;
|
||
|
|
||
|
for (int y = y0 - 1; y <= y0 + 1; y++) {
|
||
|
for (int x = x0 - 1; x <= x0 + 1; x++) {
|
||
|
if ((x != x0) || (y != y0)) {
|
||
|
int _x = x % width;
|
||
|
int _y = y % height;
|
||
|
Color pix = screen.getFrontPixel (_x, _y);
|
||
|
if (pix.getRed () != 0) {
|
||
|
count++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return count;
|
||
|
}
|
||
|
|
||
|
static void evolve () {
|
||
|
|
||
|
for (int y = 0; y < height; y++) {
|
||
|
for (int x = 0; x < width; x++) {
|
||
|
int c = countNeighbours (x, y);
|
||
|
Color pix = screen.getFrontPixel (x, y);
|
||
|
Color bpix = screen.getPixel (x, y);
|
||
|
if (pix.getRed () == 0) {
|
||
|
//System.out.println (x + " " + y + " : dead (" + c + " nbrs) "
|
||
|
// + ((bpix.getRed () == 0) ? "dead" : "alive")
|
||
|
// );
|
||
|
if (c == 3) {
|
||
|
/* born */
|
||
|
screen.setPixel (x, y, 255, 255, 255);
|
||
|
} else {
|
||
|
screen.setPixel (x, y, 0, 0, 0);
|
||
|
}
|
||
|
} else {
|
||
|
//System.out.println (x + " " + y + " : alive (" + c + " nbrs) "
|
||
|
// + ((bpix.getRed() == 0) ? "dead" : "alive"));
|
||
|
if ((c >= 2) && (c <= 3)) {
|
||
|
/* survive */
|
||
|
screen.setPixel (x, y, 255, 255, 255);
|
||
|
} else {
|
||
|
/* die */
|
||
|
screen.setPixel (x, y, 0, 0, 0);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static void testChecker () throws Exception {
|
||
|
|
||
|
for (int k = 0; k < 10; k++) {
|
||
|
|
||
|
checker (1, 1.0, 1.0, 1.0);
|
||
|
screen.swapBuffers ();
|
||
|
Thread.sleep (100);
|
||
|
|
||
|
checker (0, 1.0, 1.0, 1.0);
|
||
|
screen.swapBuffers ();
|
||
|
Thread.sleep (100);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static void testConway () throws Exception {
|
||
|
|
||
|
screen.clearBuffer ();
|
||
|
//screen.swapBuffers ();
|
||
|
//screen.clearBuffer ();
|
||
|
//screen.swapBuffers ();
|
||
|
/*
|
||
|
for (int y = 0; y < height; y++) {
|
||
|
for (int x = 0; x < width; x++) {
|
||
|
if (Math.random() < 0.3) {
|
||
|
screen.setPixel (x, y, 255, 255, 255);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
*/
|
||
|
screen.setPixel (20, 10, 255, 255, 255);
|
||
|
screen.setPixel (21, 11, 255, 255, 255);
|
||
|
screen.setPixel (19, 12, 255, 255, 255);
|
||
|
screen.setPixel (20, 12, 255, 255, 255);
|
||
|
screen.setPixel (21, 12, 255, 255, 255);
|
||
|
|
||
|
screen.swapBuffers ();
|
||
|
Thread.sleep (1000);
|
||
|
|
||
|
for (int k = 0; k < 100; k++) {
|
||
|
evolve ();
|
||
|
screen.swapBuffers ();
|
||
|
Thread.sleep (30);
|
||
|
}
|
||
|
|
||
|
screen.destroy() ;
|
||
|
System.exit(0);
|
||
|
}
|
||
|
|
||
|
public static void main(String[] args) {
|
||
|
|
||
|
try {
|
||
|
init ();
|
||
|
//testChecker () ;
|
||
|
testConway () ;
|
||
|
} catch (Exception e) {
|
||
|
System.out.println("EXCEPTION: " + e) ;
|
||
|
e.printStackTrace() ;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|