-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathGrid.java
More file actions
119 lines (105 loc) · 3.3 KB
/
Grid.java
File metadata and controls
119 lines (105 loc) · 3.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import pkg.*;
import java.util.Random;
public class Grid
{
private Cell[][] grid;
public Grid()
{
this(50,50);
}
public Grid(int size)
{
this(size, size);
}
public Grid(int length, int width)
{
grid = new Cell[length+2][width+2];
for(int i = 1; i < length+1; i++)
{
for(int j = 1; j < width+1; j++)
{
grid[i][j] = new Cell((int)(Math.random()*2));
}
}
for(int i=0;i<grid[0].length;i++) {
grid[0][i] = new Cell(0);
}
for(int i=0;i<grid[0].length;i++) {
grid[grid.length-1][i] = new Cell(0);
}
for(int i=1;i<grid.length-1;i++) {
grid[i][grid.length-1] = new Cell(0);
}
for(int i=1;i<grid.length-1;i++) {
grid[i][0] = new Cell(0);
}
}
public void update()
{
for(int i = 1; i < grid.length-1; i++)
{
for(int j = 1; j < grid[0].length-1; j++)
{
int counter = 0;
//def a cleaner way to do this :/
/*
counter += grid[i-1][j].getIsAlive(); //<-- First solution
counter += grid[i-1][j-1].getIsAlive();
counter += grid[i-1][j+1].getIsAlive();
counter += grid[i][j-1].getIsAlive();
counter += grid[i][j+1].getIsAlive();
counter += grid[i+1][j].getIsAlive();
counter += grid[i+1][j-1].getIsAlive();
counter += grid[i+1][j+1].getIsAlive();
for(int x=j-1;x<3;x++)
{
counter += grid[i-1][x].getIsAlive();
}
for(int y=i-1;y<3;y++)
{
counter += grid[y][j+1].getIsAlive();
}
for(int x=j-1;x<2;x++)
{
counter += grid[i+1][x].getIsAlive();
}
counter += grid[i][j-1].getIsAlive();
*/
for(int t = -1; t <= 1; t++)
for(int r = -1; r<=1;r++)
counter += grid[i+t][j+r].getIsAlive();
counter -= grid[i][j].getIsAlive();
if(grid[i][j].getIsAlive() == 1 && (counter < 2 || counter > 3))
grid[i][j].setIsFutureAlive();
if(grid[i][j].getIsAlive() == 0 && counter == 3)
grid[i][j].setIsFutureAlive();
}
}
for(Cell[] cellRow : grid)
{
for(Cell cell : cellRow)
{
cell.update();
}
}
}
public void draw()
{
Canvas.getInstance().clear();
for(int i = 1; i < grid.length-1; i++)
{
for(int j = 1; j < grid[1].length-1; j++)
{
drawBox(j*5, i*5, Math.abs(grid[i][j].getIsAlive()-1));
}
}
update();
}
private void drawBox(int x, int y, int alive)
{
Rectangle r = new Rectangle(x,y,5,5);
r.setColor(new Color(alive*255,alive*255,alive*255));
r.fill(0,y,500,5);
// r.fill();
}
}