-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgameOfLife.js
More file actions
118 lines (95 loc) · 3.83 KB
/
Copy pathgameOfLife.js
File metadata and controls
118 lines (95 loc) · 3.83 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
GameOfLife = {}
$(document).ready(function () {
GameOfLife.Initialize();
});
GameOfLife = {
Initialize: function () {
this.Generation = 0;
this.neighbourHoodWidth = 20;
this.neighbourHoodHeight = 22;
this.CreateNeighbourHood();
$('#btnNextGeneration').click(this.NextGeneration);
$('#btnClear').click(function () {
GameOfLife.Generation = 0;
$('.cell').removeClass('liveCell')
$('#lblGenerationNumber').html(' ' + GameOfLife.Generation);
});
},
CreateNeighbourHood: function () {
for (var i = 0; i < this.neighbourHoodHeight; i++) {
var tdToAppend = '';
for (var j = 0; j < this.neighbourHoodWidth; j++) {
tdToAppend = tdToAppend + '<td id="cell_' + i + '_' + j + '" class="cell"></td>';
}
$('#neighbourHood').append('<tr>' + tdToAppend + '</tr>');
}
$('.cell').click(this.ChangeStatusOnACell);
},
NextGeneration: function () {
GameOfLife.Generation = GameOfLife.Generation + 1;
$('#lblGenerationNumber').html(' ' + GameOfLife.Generation);
GameOfLife.ApplyRules();
},
ChangeStatusOnACell: function (cell) {
if ($(this).hasClass('liveCell')) {
$(this).removeClass('liveCell');
}
else {
$(this).addClass('liveCell');
}
},
ApplyRules: function () {
var cellsToUpdate = [];
var j = 0;
$.each($('.cell'), function (i, cell) {
var numberOfNeighbors = GameOfLife.CalculateNumberOfNeighbors(cell);
if (numberOfNeighbors == 3) {
if (!$(cell).hasClass('liveCell')) {
cellsToUpdate[j] = $(cell);
j++;
}
}
else if (numberOfNeighbors != 2) {
if ($(cell).hasClass('liveCell')) {
cellsToUpdate[j] = $(cell);
j++;
}
}
});
$.each(cellsToUpdate, function (i, cell) {
if ($(cell).hasClass('liveCell')) { $(cell).removeClass('liveCell'); }
else { $(cell).addClass('liveCell'); }
})
},
CalculateNumberOfNeighbors: function (cell) {
var id = $(cell).attr('id').split('_');
var horizontalId = parseInt(id[1], 0);
var verticalId = parseInt(id[2], 0);
var numberOfNeighbors = 0;
if ($('#cell_' + horizontalId + '_' + parseInt(verticalId - 1, 0)).hasClass('liveCell')) {
numberOfNeighbors = numberOfNeighbors + 1;
}
if ($('#cell_' + horizontalId + '_' + parseInt(verticalId + 1, 0)).hasClass('liveCell')) {
numberOfNeighbors = numberOfNeighbors + 1;
}
if ($('#cell_' + parseInt(horizontalId - 1, 0) + '_' + verticalId).hasClass('liveCell')) {
numberOfNeighbors = numberOfNeighbors + 1;
}
if ($('#cell_' + parseInt(horizontalId + 1, 0) + '_' + verticalId).hasClass('liveCell')) {
numberOfNeighbors = numberOfNeighbors + 1;
}
if ($('#cell_' + parseInt(horizontalId + 1, 0) + '_' + parseInt(verticalId + 1, 0)).hasClass('liveCell')) {
numberOfNeighbors = numberOfNeighbors + 1;
}
if ($('#cell_' + parseInt(horizontalId - 1, 0) + '_' + parseInt(verticalId - 1, 0)).hasClass('liveCell')) {
numberOfNeighbors = numberOfNeighbors + 1;
}
if ($('#cell_' + parseInt(horizontalId - 1, 0) + '_' + parseInt(verticalId + 1, 0)).hasClass('liveCell')) {
numberOfNeighbors = numberOfNeighbors + 1;
}
if ($('#cell_' + parseInt(horizontalId + 1, 0) + '_' + parseInt(verticalId - 1, 0)).hasClass('liveCell')) {
numberOfNeighbors = numberOfNeighbors + 1;
}
return numberOfNeighbors;
}
}