Skip to content

Instantly share code, notes, and snippets.

@federicobucchi
Created September 9, 2015 21:23
Show Gist options
  • Save federicobucchi/581bf7065a5b342daa9a to your computer and use it in GitHub Desktop.
Save federicobucchi/581bf7065a5b342daa9a to your computer and use it in GitHub Desktop.
Tic Tac Toe game
(function() {
var player1 = new player('Federico', 'Bucchi', 'X');
var player2 = new player('Mac', 'BookPro', 'O');
var wins = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[1, 4, 7],
[2, 5, 8],
[3, 6, 9],
[1, 5, 9],
[3, 5, 7]
];
var end = false;
var moves = 0;
var tableEl;
var tdEl;
var activeUser;
var maxMoves;
function player(name, lastname, symbol) {
this.name = name;
this.lastname = lastname;
this.symbol = symbol;
this.points = 0;
this.checks = [];
};
function initTable () {
tableEl = document.getElementsByTagName('table')[0];
tdEl = tableEl.getElementsByTagName('td');
for (var i = 1; i <= tdEl.length; i++) {
tdEl[i - 1].setAttribute('class', i);
tdEl[i - 1].addEventListener('click', function() {
selectCell(this);
}, false);
maxMoves = i;
}
};
function initGame () {
end = false;
moves = 0;
player1.checks = [];
player2.checks = [];
activeUser = player1;
for (var i = 0; i <= tdEl.length; i++) {
tdEl[i].innerHTML = '';
}
};
function switchPLayer () {
if (activeUser === player1) {
activeUser = player2;
} else {
activeUser = player1;
}
};
function selectCell(cell) {
if (cell.innerHTML === '') {
cell.innerHTML = activeUser.symbol;
activeUser.checks.push(cell.className);
moves += 1;
checkEnd();
}
};
function checkEnd () {
var match;
for (var i = 0; i < wins.length; i++) {
match = 0;
for (var x = 0; x < activeUser.checks.length; x++) {
if (wins[i].indexOf(+activeUser.checks[x]) > -1) {
match += 1;
}
}
if (match >= 3) {
end = true;
break;
}
}
if (!end) {
if (maxMoves === moves) {
alert('Tie');
initGame();
} else {
switchPLayer();
}
} else {
alert(activeUser.name + ' Wins');
activeUser.points += 1;
initGame();
}
};
initTable();
initGame();
})()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment