-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
181 lines (170 loc) · 5.42 KB
/
index.js
File metadata and controls
181 lines (170 loc) · 5.42 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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
/**
* This program is a boliler plate code for the famous tic tac toe game
* Here box represents one placeholder for either X or a 0
* We have a 2D array to represent the arrangement of X or O is a grid
* 0 -> empty box
* 1 -> box with X
* 2 -> box with O
*
* Below are the tasks which needs to be completed
* Imagine you are playing with Computer so every alternate move should be by Computer
* X -> player
* O -> Computer
*
* Winner has to be decided and has to be flashed
*
* Extra points will be given for the Creativity
*
* Use of Google is not encouraged
*
*/
let grid = [];
const GRID_LENGTH = 3;
let turn = 'X';
let newValue = 1;
let count = 0;
function initializeGrid() {
for (let colIdx = 0;colIdx < GRID_LENGTH; colIdx++) {
const tempArray = [];
for (let rowidx = 0; rowidx < GRID_LENGTH;rowidx++) {
tempArray.push(0);
}
grid.push(tempArray);
}
}
function getRowBoxes(colIdx) {
let rowDivs = '';
for(let rowIdx=0; rowIdx < GRID_LENGTH ; rowIdx++ ) {
let additionalClass = 'darkBackground';
let content = '';
const sum = colIdx + rowIdx;
if (sum%2 === 0) {
additionalClass = 'lightBackground'
}
const gridValue = grid[colIdx][rowIdx];
if(gridValue === 1) {
content = '<span class="cross">X</span>';
}
else if (gridValue === 2) {
content = '<span class="cross">O</span>';
}
rowDivs = rowDivs + '<div colIdx="'+ colIdx +'" rowIdx="' + rowIdx + '" class="box ' +
additionalClass + '">' + content + '</div>';
}
return rowDivs;
}
function getColumns() {
let columnDivs = '';
for(let colIdx=0; colIdx < GRID_LENGTH; colIdx++) {
let coldiv = getRowBoxes(colIdx);
coldiv = '<div class="rowStyle">' + coldiv + '</div>';
columnDivs = columnDivs + coldiv;
}
return columnDivs;
}
function renderMainGrid() {
const parent = document.getElementById("grid");
const columnDivs = getColumns();
parent.innerHTML = '<div class="columnsStyle">' + columnDivs + '</div>';
}
function updateCount(id){
document.getElementById(id).innerHTML = parseInt(document.getElementById(id).innerHTML) + 1;
removeClickHandlers();
}
function checkWinner(){
if (grid[0][0] === grid[0][1] && grid[0][1] === grid[0][2] && grid[0][0]!=0) {
if (grid[0][0]%2===0) {
alert('Computer won');
updateCount("computer_won");
} else{
alert('Player won');
updateCount("player_won");
}
} else if (grid[1][0] === grid[1][1] && grid[1][1] === grid[1][2] && grid[1][0]!=0) {
if (grid[1][0]%2===0) {
alert('Computer won');
updateCount("computer_won");
} else{
alert('Player won');
updateCount("player_won");
}
} else if (grid[2][0] === grid[2][1] && grid[2][1] === grid[2][2] && grid[2][0]!=0) {
if (grid[2][0]%2===0) {
alert('Computer won');
updateCount("computer_won");
} else{
alert('Player won');
updateCount("player_won");
}
} else if (grid[0][0] === grid[1][0] && grid[1][0] === grid[2][0] && grid[0][0]!=0) {
if (grid[0][0]%2===0) {
alert('Computer won');
updateCount("computer_won");
} else{
alert('Player won');
updateCount("player_won");
}
} else if (grid[0][1] === grid[1][1] && grid[1][1] === grid[1][2] && grid[0][1]!=0) {
if (grid[0][1]%2===0) {
alert('Computer won');
updateCount("computer_won");
} else{
alert('Player won');
updateCount("player_won");
}
} else if (grid[0][2] === grid[1][2] && grid[1][2] === grid[2][2] && grid[0][2]!=0) {
if (grid[0][2]%2===0) {
alert('Computer won');
updateCount("computer_won");
} else{
alert('Player won');
updateCount("player_won");
}
} else if (grid[0][0] === grid[1][1] && grid[1][1] === grid[2][2] && grid[0][0]!=0) {
if (grid[0][0]%2===0) {
alert('Computer won');
updateCount("computer_won");
} else{
alert('Player won');
updateCount("player_won");
}
} else if (grid[0][2] === grid[1][1] && grid[1][1] === grid[2][0] && grid[0][2]!=0) {
if (grid[0][2]%2===0) {
alert('Computer won');
updateCount("computer_won");
} else{
alert('Player won');
updateCount("player_won");
}
} else if(count===9){
alert('its a tie');
}
}
function onBoxClick() {
count++;
var rowIdx = this.getAttribute("rowIdx");
var colIdx = this.getAttribute("colIdx");
grid[colIdx][rowIdx] = newValue%2===0? newValue-- : newValue++;
renderMainGrid();
addClickHandlers();
checkWinner();
}
function addClickHandlers() {
var boxes = document.getElementsByClassName("box");
for (var idx = 0; idx < boxes.length; idx++) {
boxes[idx].addEventListener('click', onBoxClick, false);
}
}
function removeClickHandlers() {
var boxes = document.getElementsByClassName("box");
for (var idx = 0; idx < boxes.length; idx++) {
boxes[idx].removeEventListener('click', onBoxClick);
}
}
function restGrid(){
grid =[];
initializeGrid();
renderMainGrid();
addClickHandlers();
}
restGrid();