Code: Select all
document.addEventListener('DOMContentLoaded', function () {
var board=Array(9);
var wins=[
[0, 1, 2],
[3, 4, 5],
[6, 7, 8],
[0, 3, 6],
[1, 4, 7],
[2, 5, 8],
[0, 4, 8],
[2, 4, 6] ];
var turn=0;
var boardNum=0;
var openSquare=[];
var squareNum=1;
Array.from(document.querySelectorAll('td a'), function (link, i) {
link.addEventListener('click', gotClicked.bind(null,link,i),randomAi(null,link,i));
});
function gotClicked(link, i,e) {
e.preventDefult();
// From the `turn` value we can know who the current player is: 0 or 1
// We use the modulo operator to get the remainder when dividing by 2
var player=turn%2;
// Use this 0 or 1 as index in the XO string and display it
// When player is 0 this gives 'X', when 1 it gives 'O'
link.parentNode.textContent='XO'[player];
// Also put the 0 or 1 in our array
board[i]=player;
randomAi(link,i);
// Now board has changed, check if there is a 3-in-a-row for this player
if (isWinFor(player)) alert('Winning move!');
// Player played, so now increment `turn`
turn++;
}
function RandomAi(link,i) {
if (player==1) {
while (board[boardNum]!==board[8]) {
if(board[boardNum]!=1 || 0) {
openSquare[squareNum]=board[boardNum];
squareNum=squareNum+1;
}
boardNum=boardNum+1;
}
var randomPick=Math.random()*squareNum;
var choosenSquare=openSquare[randomPick];
board[choosenSquare]=1;
link.parentNode.textContent='XO'[player];
boardNum=0;
squareNum=0;
}
}
function isWinFor(player) {
// Player is 0 or 1.
// Iterate over all the 8 potential wins
for (var win of wins) {
// `win` is a triplet of indices, which when they contain the player's value
// constitute a winning position. Let's count how many of those three
// have the player's value (0 or 1)
var count = 0;
for (var index of win) {
// Is the value on the board the value that corresponds to the player?
if (board[index] !== player) break; // don't bother looking further.
count++;
}
// If we have a count of 3 here, it is a winning position.
if (count == 3) return true;
}
}
});