Skip to content
Snippets Groups Projects
Commit c6ee931e authored by root's avatar root
Browse files

added GameOfLife

parent 1a6e4edd
No related branches found
No related tags found
No related merge requests found
var GOLData = {
field: null,
canvas: null,
context: null,
vAmount: -1,
hAmount: -1,
sWidth: -1,
sHeight: -1,
panel: null,
config: null,
grid: 1
};
binder.loaded = function(panel, config) {
GOLData.panel = panel;
GOLData.config = config;
GOLinit();
GOLdraw();
setTimeout(function(){setInterval(function() {GOLiterate(); GOLdraw();}, 100); }, 1000);
}
function GOLinit(){
//if(GOLData.config[initType] == "random") {
//GOLinitRandom();
GOLinitText("FICKDICH");
//} WTF config is so doch bullshit
}
function GOLCreateField(vAmount,hAmount) {
GOLData.vAmount = vAmount;
GOLData.hAmount = hAmount;
var arr = [];
for (var i=0; i < vAmount; i++) {
arr[i] = [];
}
GOLData.field = arr;
}
function GOLinitRandom(){
GOLCreateField(500,500);
for (var i = 0; i < GOLData.vAmount; i++) {
for (var j = 0; j < GOLData.vAmount; j++){
GOLData.field[i][j] = GOLrandom(0,3);
}
}
}
function GOLrandom(min,max){
return Math.floor((Math.random() * max) + min);
}
function GOLinitStatic(){
//Wait4Config
}
function GOLinitText(text){
GOLCreateField(4*6,2*6);
for (var i = 0; i < GOLData.vAmount; i++) {
for (var j = 0; j < GOLData.vAmount; j++){
GOLData.field[i][j] = 0;
}
}
var charsPerLine = Math.floor(GOLData.vAmount/6);
var lines = Math.floor(GOLData.hAmount/6);
var j = 0;
var i = 0;
var c = 0;
while(i < charsPerLine) {
switch(text.charAt(c)){
case 'A':
monoSpace.A(GOLData.field,i*6,j*6);
break;
case 'B':
monoSpace.B(GOLData.field,i*6,j*6);
break;
case 'C':
monoSpace.C(GOLData.field,i*6,j*6);
break;
case 'D':
monoSpace.D(GOLData.field,i*6,j*6);
break;
case 'E':
monoSpace.E(GOLData.field,i*6,j*6);
break;
case 'F':
monoSpace.F(GOLData.field,i*6,j*6);
break;
case 'G':
monoSpace.G(GOLData.field,i*6,j*6);
break;
case 'H':
monoSpace.H(GOLData.field,i*6,j*6);
break;
case 'I':
monoSpace.I(GOLData.field,i*6,j*6);
break;
case 'J':
monoSpace.J(GOLData.field,i*6,j*6);
break;
case 'K':
monoSpace.K(GOLData.field,i*6,j*6);
break;
case 'L':
monoSpace.L(GOLData.field,i*6,j*6);
break;
case 'M':
monoSpace.M(GOLData.field,i*6,j*6);
break;
case 'N':
monoSpace.N(GOLData.field,i*6,j*6);
break;
case 'O':
monoSpace.O(GOLData.field,i*6,j*6);
break;
case 'P':
monoSpace.P(GOLData.field,i*6,j*6);
break;
case 'Q':
monoSpace.Q(GOLData.field,i*6,j*6);
break;
case 'R':
monoSpace.R(GOLData.field,i*6,j*6);
break;
case 'S':
monoSpace.S(GOLData.field,i*6,j*6);
break;
case 'T':
monoSpace.T(GOLData.field,i*6,j*6);
break;
case 'U':
monoSpace.U(GOLData.field,i*6,j*6);
break;
case 'V':
monoSpace.V(GOLData.field,i*6,j*6);
break;
case 'W':
monoSpace.W(GOLData.field,i*6,j*6);
break;
case 'X':
monoSpace.X(GOLData.field,i*6,j*6);
break;
case 'Y':
monoSpace.Y(GOLData.field,i*6,j*6);
break;
case 'Z':
monoSpace.Z(GOLData.field,i*6,j*6);
break;
}
if(i >= charsPerLine-1){
i = 0;
j++;
} else {
i++;
}
if(j == lines) {
break;
}
c++;
}
}
function GOLiterate() {
var temp = GOLData.field.slice(0);
for (var i = 0; i < GOLData.vAmount; i++) {
for (var j = 0; j < GOLData.vAmount; j++){
var cell = temp[i][j];
if(cell == 1) {
var alife = GOLcountLife(temp,i,j);
if (alife < 2){
GOLData.field[i][j] = 2;
} else if(alife > 3){
GOLData.field[i][j] = 2;
}
} else {
var alife = GOLcountLife(temp,i,j);
if(alife == 3){
GOLData.field[i][j] = 1;
}
}
}
}
}
function GOLisLife(cell){
if(cell == 1) {
return 1
} else {
return 0
}
}
function GOLcountLife(temp,x,y){
var value = 0;
if(x+1 < GOLData.vAmount){
if(y+1 < GOLData.hAmount){
value += GOLisLife(temp[x+1][y+1]);
}
value += GOLisLife(temp[x+1][y]);
if(y-1 >= 0){
value += GOLisLife(temp[x+1][y-1]);
}
}
if(y+1 < GOLData.hAmount){
value += GOLisLife(temp[x][y+1]);
}
if(y-1 >= 0){
value += GOLisLife(temp[x][y-1]);
}
if(x-1 >= 0){
if(y+1 < GOLData.hAmount){
value += GOLisLife(temp[x-1][y+1]);
}
value += GOLisLife(temp[x-1][y]);
if(y-1 >= 0){
value += GOLisLife(temp[x-1][y-1]);
}
}
return value;
}
function GOLisDead(cell){
if(cell == 2) {
return 1
} else {
return 0
}
}
function GOLcountDead(temp,x,y){
var value = 0;
if(x+1 < GOLData.vAmount){
if(y+1 < GOLData.hAmount){
value += GOLisDead(temp[x+1][y+1]);
}
value += GOLisDead(temp[x+1][y]);
if(y-1 >= 0){
value += GOLisDead(temp[x+1][y-1]);
}
}
if(y+1 < GOLData.hAmount){
value += GOLisDead(temp[x][y+1]);
}
if(y-1 >= 0){
value += GOLisDead(temp[x][y-1]);
}
if(x-1 >= 0){
if(y+1 < GOLData.hAmount){
value += GOLisDead(temp[x-1][y+1]);
}
value += GOLisDead(temp[x-1][y]);
if(y-1 >= 0){
value += GOLisDead(temp[x-1][y-1]);
}
}
return value;
}
function GOLinitDraw(){
GOLData.canvas = document.getElementById("GOLCanvas");
GOLData.context = document.getElementById("GOLCanvas").getContext("2d");
GOLData.canvas.width = panel.width();
GOLData.canvas.height = panel.height();
if(GOLData.grid) {
GOLData.sWidth = (GOLData.canvas.width-(GOLData.vAmount+1)) / GOLData.vAmount;
GOLData.sHeight = (GOLData.canvas.height-(GOLData.hAmount+1)) / GOLData.hAmount;
} else {
GOLData.sWidth = GOLData.canvas.width / GOLData.vAmount;
GOLData.sHeight = GOLData.canvas.height / GOLData.hAmount;
}
}
function GOLdraw() {
GOLinitDraw();
if(GOLData.grid) {
for (var i = 0; i < GOLData.vAmount; i++) {
for (var j = 0; j < GOLData.hAmount; j++){
GOLdrawSquare((i*GOLData.sWidth)+i+1, (j*GOLData.sHeight)+j+1, GOLData.field[i][j])
}
}
for(var i = 0; i <= GOLData.vAmount;i++) {
for(var j = 0; j <= GOLData.hAmount ;j++) {
GOLData.context.beginPath();
GOLData.context.moveTo(i* GOLData.sWidth + i, 0);
GOLData.context.lineTo(i* GOLData.sWidth + i,j * GOLData.sHeight + j);
GOLData.context.stroke();
GOLData.context.beginPath();
GOLData.context.moveTo(0, j * GOLData.sHeight + j);
GOLData.context.lineTo(i * GOLData.sWidth + i,j * GOLData.sHeight + j);
GOLData.context.stroke();
}
}
} else {
for (var i = 0; i < GOLData.vAmount; i++) {
for (var j = 0; j < GOLData.hAmount; j++){
GOLdrawSquare((i*GOLData.sWidth), (j*GOLData.sHeight), GOLData.field[i][j])
}
}
}
}
function GOLdrawSquare(x,y,status){
switch (status) {
case 0:
GOLData.context.fillStyle = "#FFFFFF";
break;
case 1:
GOLData.context.fillStyle = "#00FF00";
break;
case 2:
GOLData.context.fillStyle = "#FF0000";
break;
}
GOLData.context.fillRect(x,y,GOLData.sWidth,GOLData.sHeight);
}
var monoSpace = {
A: function A(array,x,y){
array[x+2][y+1] = 1;
array[x+3][y+1] = 1;
array[x+1][y+2] = 1;
array[x+4][y+2] = 1;
array[x+1][y+3] = 1;
array[x+2][y+3] = 1;
array[x+3][y+3] = 1;
array[x+4][y+3] = 1;
array[x+1][y+4] = 1;
array[x+4][y+4] = 1;
array[x+1][y+5] = 1;
array[x+4][y+5] = 1;
},
B: function (array,x,y){
array[x+1][y+1] = 1;
array[x+2][y+1] = 1;
array[x+3][y+1] = 1;
array[x+1][y+2] = 1;
array[x+4][y+2] = 1;
array[x+1][y+3] = 1;
array[x+2][y+3] = 1;
array[x+3][y+3] = 1;
array[x+1][y+4] = 1;
array[x+4][y+4] = 1;
array[x+1][y+5] = 1;
array[x+2][y+5] = 1;
array[x+3][y+5] = 1;
},
C: function (array,x,y){
array[x+2][y+1] = 1;
array[x+3][y+1] = 1;
array[x+4][y+1] = 1;
array[x+1][y+2] = 1;
array[x+1][y+3] = 1;
array[x+1][y+4] = 1;
array[x+2][y+5] = 1;
array[x+3][y+5] = 1;
array[x+4][y+5] = 1;
},
D: function (array,x,y){
array[x+1][y+1] = 1;
array[x+2][y+1] = 1;
array[x+3][y+1] = 1;
array[x+1][y+2] = 1;
array[x+4][y+2] = 1;
array[x+1][y+3] = 1;
array[x+4][y+3] = 1;
array[x+1][y+4] = 1;
array[x+4][y+4] = 1;
array[x+1][y+5] = 1;
array[x+2][y+5] = 1;
array[x+3][y+5] = 1;
},
E: function (array,x,y){
array[x+1][y+1] = 1;
array[x+2][y+1] = 1;
array[x+3][y+1] = 1;
array[x+4][y+1] = 1;
array[x+1][y+2] = 1;
array[x+1][y+3] = 1;
array[x+2][y+3] = 1;
array[x+3][y+3] = 1;
array[x+4][y+3] = 1;
array[x+1][y+4] = 1;
array[x+1][y+5] = 1;
array[x+2][y+5] = 1;
array[x+3][y+5] = 1;
array[x+4][y+5] = 1;
},
F: function (array,x,y){
array[x+1][y+1] = 1;
array[x+2][y+1] = 1;
array[x+3][y+1] = 1;
array[x+4][y+1] = 1;
array[x+1][y+2] = 1;
array[x+1][y+3] = 1;
array[x+2][y+3] = 1;
array[x+3][y+3] = 1;
array[x+4][y+3] = 1;
array[x+1][y+4] = 1;
array[x+1][y+5] = 1;
},
G: function (array,x,y){
array[x+2][y+1] = 1;
array[x+3][y+1] = 1;
array[x+4][y+1] = 1;
array[x+1][y+2] = 1;
array[x+1][y+3] = 1;
array[x+3][y+3] = 1;
array[x+4][y+3] = 1;
array[x+1][y+4] = 1;
array[x+4][y+4] = 1;
array[x+2][y+5] = 1;
array[x+3][y+5] = 1;
array[x+4][y+5] = 1;
},
H: function (array,x,y){
array[x+1][y+1] = 1;
array[x+4][y+1] = 1;
array[x+1][y+2] = 1;
array[x+4][y+2] = 1;
array[x+1][y+3] = 1;
array[x+2][y+3] = 1;
array[x+3][y+3] = 1;
array[x+4][y+3] = 1;
array[x+1][y+4] = 1;
array[x+4][y+4] = 1;
array[x+1][y+5] = 1;
array[x+4][y+5] = 1;
},
I: function (array,x,y){
array[x+2][y+1] = 1;
array[x+2][y+2] = 1;
array[x+2][y+3] = 1;
array[x+2][y+4] = 1;
array[x+2][y+5] = 1;
},
J: function (array,x,y){
array[x+4][y+1] = 1;
array[x+4][y+2] = 1;
array[x+4][y+3] = 1;
array[x+1][y+4] = 1;
array[x+4][y+4] = 1;
array[x+2][y+5] = 1;
array[x+3][y+5] = 1;
},
K: function (array,x,y){
array[x+1][y+1] = 1;
array[x+4][y+1] = 1;
array[x+1][y+2] = 1;
array[x+3][y+2] = 1;
array[x+1][y+3] = 1;
array[x+2][y+3] = 1;
array[x+1][y+4] = 1;
array[x+3][y+4] = 1;
array[x+1][y+5] = 1;
array[x+4][y+5] = 1;
},
L: function (array,x,y){
array[x+1][y+1] = 1;
array[x+1][y+2] = 1;
array[x+1][y+3] = 1;
array[x+1][y+4] = 1;
array[x+1][y+5] = 1;
array[x+2][y+5] = 1;
array[x+3][y+5] = 1;
},
M: function (array,x,y){
array[x+0][y+1] = 1;
array[x+4][y+1] = 1;
array[x+0][y+2] = 1;
array[x+1][y+2] = 1;
array[x+3][y+2] = 1;
array[x+4][y+2] = 1;
array[x+0][y+3] = 1;
array[x+2][y+3] = 1;
array[x+4][y+3] = 1;
array[x+0][y+4] = 1;
array[x+4][y+4] = 1;
array[x+0][y+5] = 1;
array[x+4][y+5] = 1;
},
N: function (array,x,y){
array[x+1][y+1] = 1;
array[x+4][y+1] = 1;
array[x+1][y+2] = 1;
array[x+2][y+2] = 1;
array[x+4][y+2] = 1;
array[x+1][y+3] = 1;
array[x+3][y+3] = 1;
array[x+4][y+3] = 1;
array[x+1][y+4] = 1;
array[x+4][y+4] = 1;
array[x+1][y+5] = 1;
array[x+4][y+5] = 1;
},
O: function (array,x,y){
array[x+2][y+1] = 1;
array[x+3][y+1] = 1;
array[x+1][y+2] = 1;
array[x+4][y+2] = 1;
array[x+1][y+3] = 1;
array[x+4][y+3] = 1;
array[x+1][y+4] = 1;
array[x+4][y+4] = 1;
array[x+2][y+5] = 1;
array[x+3][y+5] = 1;
},
P: function (array,x,y){
array[x+1][y+1] = 1;
array[x+2][y+1] = 1;
array[x+3][y+1] = 1;
array[x+1][y+2] = 1;
array[x+4][y+2] = 1;
array[x+1][y+3] = 1;
array[x+2][y+3] = 1;
array[x+3][y+3] = 1;
array[x+1][y+4] = 1;
array[x+1][y+5] = 1;
},
Q: function (array,x,y){
array[x+2][y+1] = 1;
array[x+3][y+1] = 1;
array[x+1][y+2] = 1;
array[x+4][y+2] = 1;
array[x+1][y+3] = 1;
array[x+4][y+3] = 1;
array[x+1][y+4] = 1;
array[x+3][y+4] = 1;
array[x+2][y+5] = 1;
array[x+4][y+5] = 1;
},
R: function (array,x,y){
array[x+1][y+1] = 1;
array[x+2][y+1] = 1;
array[x+3][y+1] = 1;
array[x+1][y+2] = 1;
array[x+4][y+2] = 1;
array[x+1][y+3] = 1;
array[x+2][y+3] = 1;
array[x+3][y+3] = 1;
array[x+1][y+4] = 1;
array[x+3][y+4] = 1;
array[x+1][y+5] = 1;
array[x+4][y+5] = 1;
},
S: function (array,x,y){
array[x+2][y+1] = 1;
array[x+3][y+1] = 1;
array[x+4][y+1] = 1;
array[x+1][y+2] = 1;
array[x+2][y+3] = 1;
array[x+3][y+3] = 1;
array[x+4][y+4] = 1;
array[x+1][y+5] = 1;
array[x+2][y+5] = 1;
array[x+3][y+5] = 1;
},
T: function (array,x,y){
array[x+0][y+1] = 1;
array[x+1][y+1] = 1;
array[x+2][y+1] = 1;
array[x+3][y+1] = 1;
array[x+4][y+1] = 1;
array[x+2][y+2] = 1;
array[x+2][y+3] = 1;
array[x+2][y+4] = 1;
array[x+2][y+5] = 1;
},
U: function (array,x,y){
array[x+1][y+1] = 1;
array[x+4][y+1] = 1;
array[x+1][y+2] = 1;
array[x+4][y+2] = 1;
array[x+1][y+3] = 1;
array[x+4][y+3] = 1;
array[x+1][y+4] = 1;
array[x+4][y+4] = 1;
array[x+2][y+5] = 1;
array[x+3][y+5] = 1;
},
V: function (array,x,y){
array[x+0][y+1] = 1;
array[x+4][y+1] = 1;
array[x+0][y+2] = 1;
array[x+4][y+2] = 1;
array[x+1][y+3] = 1;
array[x+3][y+3] = 1;
array[x+1][y+4] = 1;
array[x+3][y+4] = 1;
array[x+2][y+5] = 1;
},
W: function W(array,x,y){
array[x+0][y+1] = 1;
array[x+2][y+1] = 1;
array[x+4][y+1] = 1;
array[x+0][y+2] = 1;
array[x+2][y+2] = 1;
array[x+4][y+2] = 1;
array[x+0][y+3] = 1;
array[x+2][y+3] = 1;
array[x+4][y+3] = 1;
array[x+1][y+4] = 1;
array[x+3][y+4] = 1;
array[x+1][y+5] = 1;
array[x+3][y+5] = 1;
},
X: function (array,x,y){
array[x+1][y+1] = 1;
array[x+4][y+1] = 1;
array[x+1][y+2] = 1;
array[x+4][y+2] = 1;
array[x+2][y+3] = 1;
array[x+3][y+3] = 1;
array[x+1][y+4] = 1;
array[x+4][y+4] = 1;
array[x+1][y+5] = 1;
array[x+4][y+5] = 1;
},
Y: function (array,x,y){
array[x+1][y+1] = 1;
array[x+4][y+1] = 1;
array[x+1][y+2] = 1;
array[x+4][y+2] = 1;
array[x+1][y+3] = 1;
array[x+2][y+3] = 1;
array[x+3][y+3] = 1;
array[x+4][y+3] = 1;
array[x+4][y+4] = 1;
array[x+1][y+5] = 1;
array[x+2][y+5] = 1;
array[x+3][y+5] = 1;
},
Z: function (array,x,y){
array[x+1][y+1] = 1;
array[x+2][y+1] = 1;
array[x+3][y+1] = 1;
array[x+4][y+1] = 1;
array[x+4][y+2] = 1;
array[x+2][y+3] = 1;
array[x+3][y+3] = 1;
array[x+1][y+4] = 1;
array[x+1][y+5] = 1;
array[x+2][y+5] = 1;
array[x+3][y+5] = 1;
array[x+4][y+5] = 1;
}
}
<canvas id="GOLCanvas"/>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment