<div class='flex'>
<div class='p1'>Player 1: 0</div>
<h1 class='header'>Tic Tac Toe</h1>
<div class='p2'>Player 2: 0</div>
</div>
<div class='grid'>
<div class='space' id='one'></div>
<div class='space' id='two'></div>
<div class='space' id='three'></div>
<div class='space' id='four'></div>
<div class='space' id='five'></div>
<div class='space' id='six'></div>
<div class='space' id='seven'></div>
<div class='space' id='eight'></div>
<div class='space' id='nine'></div>
</div>
<div class='wrapper'>
<button class='reset'>Reset</button>
</div>
body {
background-color: white;
}
.grid {
background-color: rgba(0,0,0,.2);
margin: 50px auto;
vertical-align: center;
width: 400px;
height: 400px;
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template rows: 1fr 1fr 1fr;
grid-gap: 2px;
border-radius: 4px;
box-shadow: rgba(0, 0, 0, 0.3) 0px 17px 50px;
}
.space {
background-color: white;
transition: background-color .5s;
display: flex;
justify-content: center;
align-items: center;
}
.space:hover {
background-color: rgba(0,0,0,0);
transition: background-color .5s;
cursor: pointer;
}
.x, .o {
font-family: 'arial';
font-size: 70px;
position: absolute;
}
.x {
color: tomato;
}
.o {
color: #33DBFF;
}
.header {
font-family: 'IBM Plex Sans Condensed', sans-serif;
font-family: 'Montserrat', sans-serif;
font-size: 35px;
color: tomato;
text-align: center;
margin-top: 50px;
}
.reset {
font-size: 20px;
font-family: 'IBM Plex Sans Condensed', sans-serif;
font-family: 'Montserrat', sans-serif;
color: tomato;
background-color: white;
border: 1px solid tomato;
padding: 5px;
transition: border, color, .5s;
}
.reset:hover {
cursor: pointer;
color: #33DBFF;
border: 1px solid #33DBFF;
transition: border, color, .5s;
}
.reset:focus {
outline: none;
}
.wrapper {
display: flex;
justify-content: center;
margin-bottom: 50px;
}
.p1, .p2 {
font-family: 'IBM Plex Sans Condensed', sans-serif;
font-family: 'Montserrat', sans-serif;
font-size: 20px;
}
.p1 {
color: tomato;
margin-left: 20px;
}
.p2 {
color: #33DBFF;
margin-right: 20px;
}
.flex {
display: flex;
flex-direction: row;
justify-content: space-between;
}
let board = [
[1,2,3],
[4,5,6],
[7,8,9],
];
let p1Counter = 1;
let p2Counter = 1;
class Player {
constructor() {
this.isTurn = false;
this.win = false;
}
}
class Space {
constructor(id) {
this.played = false;
this.id = id;
}
addSymbolX(space) {
$(space).append("<div class='x'>X</div>");
}
addSymbolO(space) {
$(space).append("<div class='o'>O</div>");
}
}
//create players
const player1 = new Player();
const player2 = new Player();
//create spaces
const space1 = new Space('one');
const space2 = new Space('two');
const space3 = new Space('three');
const space4 = new Space('four');
const space5 = new Space('five');
const space6 = new Space('six');
const space7 = new Space('seven');
const space8 = new Space('eight');
const space9 = new Space('nine');
//switch turns
function switchTurns(one, two) {
one.isTurn = true;
two.isTurn = false;
}
//gameplay
player1.isTurn = true;
$('.grid').on('click', (e) => {
if(player1.win !== true && player2.win !== true) {
if(e.target.id === space1.id && space1.played === false) {
if(player1.isTurn) {
space1.addSymbolX(e.target);
let index = board[0].indexOf(1);
if(index !== -1) {
board[0][index] = 'x';
}
switchTurns(player2, player1);
space1.played = true;
} else {
space1.addSymbolO(e.target);
let index = board[0].indexOf(1);
if(index !== -1) {
board[0][index] = 'o';
}
switchTurns(player1, player2);
space1.played = true;
}
}
else if (e.target.id === space2.id && space2.played === false) {
if(player1.isTurn) {
space2.addSymbolX(e.target);
let index = board[0].indexOf(2);
if(index !== -1) {
board[0][index] = 'x';
}
switchTurns(player2, player1);
space2.played = true;
} else {
space2.addSymbolO(e.target);
let index = board[0].indexOf(2);
if(index !== -1) {
board[0][index] = 'o';
}
switchTurns(player1, player2);
space2.played = true;
}
}
else if (e.target.id === space3.id && space3.played === false) {
if(player1.isTurn) {
space3.addSymbolX(e.target);
let index = board[0].indexOf(3);
if(index !== -1) {
board[0][index] = 'x';
}
switchTurns(player2, player1);
space3.played = true;
} else {
space3.addSymbolO(e.target);
let index = board[0].indexOf(3);
if(index !== -1) {
board[0][index] = 'o';
}
switchTurns(player1, player2);
space3.played = true;
}
}
else if (e.target.id === space4.id && space4.played === false) {
if(player1.isTurn) {
space4.addSymbolX(e.target);
let index = board[1].indexOf(4);
if(index !== -1) {
board[1][index] = 'x';
}
switchTurns(player2, player1);
space4.played = true;
} else {
space4.addSymbolO(e.target);
let index = board[1].indexOf(4);
if(index !== -1) {
board[1][index] = 'o';
}
switchTurns(player1, player2);
space4.played = true;
}
}
else if (e.target.id === space5.id && space5.played === false) {
if(player1.isTurn) {
space5.addSymbolX(e.target);
let index = board[1].indexOf(5);
if(index !== -1) {
board[1][index] = 'x';
}
switchTurns(player2, player1);
space5.played = true;
} else {
space5.addSymbolO(e.target);
let index = board[1].indexOf(5);
if(index !== -1) {
board[1][index] = 'o';
}
switchTurns(player1, player2);
space5.played = true;
}
}
else if (e.target.id === space6.id && space6.played === false) {
if(player1.isTurn) {
space6.addSymbolX(e.target);
let index = board[1].indexOf(6);
if(index !== -1) {
board[1][index] = 'x';
}
switchTurns(player2, player1);
space6.played = true;
} else {
space6.addSymbolO(e.target);
let index = board[1].indexOf(6);
if(index !== -1) {
board[1][index] = 'o';
}
switchTurns(player1, player2);
space6.played = true;
}
}
else if (e.target.id === space7.id && space7.played === false) {
if(player1.isTurn) {
space7.addSymbolX(e.target);
let index = board[2].indexOf(7);
if(index !== -1) {
board[2][index] = 'x';
}
switchTurns(player2, player1);
space7.played = true;
} else {
space7.addSymbolO(e.target);
let index = board[2].indexOf(7);
if(index !== -1) {
board[2][index] = 'o';
}
switchTurns(player1, player2);
space7.played = true;
}
}
else if (e.target.id === space8.id && space8.played === false) {
if(player1.isTurn) {
space8.addSymbolX(e.target);
let index = board[2].indexOf(8);
if(index !== -1) {
board[2][index] = 'x';
}
switchTurns(player2, player1);
space8.played = true;
} else {
space8.addSymbolO(e.target);
let index = board[2].indexOf(8);
if(index !== -1) {
board[2][index] = 'o';
}
switchTurns(player1, player2);
space8.played = true;
}
}
else if (e.target.id === space9.id && space9.played === false) {
if(player1.isTurn) {
space9.addSymbolX(e.target);
let index = board[2].indexOf(9);
if(index !== -1) {
board[2][index] = 'x';
}
switchTurns(player2, player1);
space9.played = true;
} else {
space9.addSymbolO(e.target);
let index = board[2].indexOf(9);
if(index !== -1) {
board[2][index] = 'o';
}
switchTurns(player1, player2);
space9.played = true;
}
}
//check if playerX wins
// top row
if(board[0][0] === "x" && board[0][1] === "x" && board[0][2] === "x") {
$('.header').text('Player One Wins!');
$('.header').css('color', 'tomato');
$('.p1').text ('Player 1: '+ p1Counter);
p1Counter += 1;
player1.win = true;
}
// middle row
else if (board[1][0] === "x" && board[1][1] === "x" && board[1][2] === "x") {
$('.header').text('Player One Wins!');
$('.header').css('color', 'tomato');
$('.p1').text ('Player 1:' + p1counter);
p1Counter += 1;
player1.win = true;
}
// bottom row
else if (board[2][0] === "x" && board[2][1] === "x" && board[2][2] === "x") {
$('.header').text('Player One Wins!');
$('.header').css('color', 'tomato');
$('.p1').text ('Player 1: ' + p1Counter);
p1Counter += 1;
player1.win = true;
}
// first column
else if (board[0][0] === 'x' && board[1][0] === 'x' && board[2][0] === 'x') {
$('.header').text('Player One Wins!');
$('.header').css('color', 'tomato');
$('.p1').text ('Player 1: ' + p1Counter);
p1Counter += 1;
player1.win = true;
}
// second column
else if (board[0][1] === 'x' && board[1][1] === 'x' && board[2][1] === 'x') {
$('.header').text('Player One Wins!');
$('.header').css('color', 'tomato');
$('.p1').text ('Player 1: ' + p1Counter);
p1Counter += 1;
player1.win = true;
}
// third column
else if (board[0][2] === 'x' && board[1][2] === 'x' && board[2][2] === 'x') {
$('.header').text('Player One Wins!');
$('.header').css('color', 'tomato');
$('.p1').text ('Player 1: ' + p1Counter);
p1Counter += 1;
player1.win = true;
}
// diaganol right
else if (board[0][0] === 'x' && board[1][1] === 'x' && board[2][2] === 'x') {
$('.header').text('Player One Wins!');
$('.header').css('color', 'tomato');
$('.p1').text ('Player 1: ' + p1Counter);
p1Counter += 1;
player1.win = true;
}
// diaganol left
else if (board[0][2] === 'x' && board[1][1] === 'x' && board[2][0] === 'x') {
$('.header').text('Player One Wins!');
$('.header').css('color', 'tomato');
$('.p1').text ('Player 1: ' + p1Counter);
p1Counter += 1;
player1.win = true;
}
// check if player 2 wins
//top row
if(board[0][0] === "o" && board[0][1] === "o" && board[0][2] === "o") {
$('.header').text('Player Two Wins!');
$('.header').css('color', '#33DBFF');
$('.p2').text ('Player 2: ' + p2Counter);
p2Counter += 1;
player2.win = true;
}
// middle row
else if (board[1][0] === "o" && board[1][1] === "o" && board[1][2] === "o") {
$('.header').text('Player Two Wins!');
$('.header').css('color', '#33DBFF');
$('.p2').text ('Player 2: ' + p2Counter);
p2Counter += 1;
player2.win = true;
}
// bottom row
else if (board[2][0] === "o" && board[2][1] === "o" && board[2][2] === "o") {
$('.header').text('Player Two Wins!');
$('.header').css('color', '#33DBFF');
$('.p2').text ('Player 2: ' + p2Counter);
p2Counter += 1;
player2.win = true;
}
// first column
else if (board[0][0] === 'o' && board[1][0] === 'o' && board[2][0] === 'o') {
$('.header').text('Player Two Wins!');
$('.header').css('color', '#33DBFF');
$('.p2').text ('Player 2: ' + p2Counter);
p2Counter += 1;
player2.win = true;
}
// second column
else if (board[0][1] === 'o' && board[1][1] === 'o' && board[2][1] === 'o') {
$('.header').text('Player Two Wins!');
$('.header').css('color', '#33DBFF');
$('.p2').text ('Player 2: ' + p2Counter);
p2Counter += 1;
player2.win = true;
}
// third column
else if (board[0][2] === 'o' && board[1][2] === 'o' && board[2][2] === 'o') {
$('.header').text('Player Two Wins!');
$('.header').css('color', '#33DBFF');
$('.p2').text ('Player 2: ' + p2Counter);
p2Counter += 1;
player2.win = true;
}
// diaganol right
else if (board[0][0] === 'o' && board[1][1] === 'o' && board[2][2] === 'o') {
$('.header').text('Player Two Wins!');
$('.header').css('color', '#33DBFF');
$('.p2').text ('Player 2: ' + p2Counter);
p2Counter += 1;
player2.win = true;
}
// diaganol left
else if (board[0][2] === 'o' && board[1][1] === 'o' && board[2][0] === 'o') {
$('.header').text('Player Two Wins!');
$('.header').css('color', '#33DBFF');
$('.p2').text ('Player 2: ' + p2Counter);
p2Counter += 1;
player2.win = true;
}
}
});
$('.reset').on('click', () => {
player1.isTurn = true;
player2.isTurn = false;
player1.win = false;
player2.win = false;
$('.x').remove();
$('.o').remove();
$('.header').text('Tic Tac Toe');
board = [[1,2,3],[4,5,6],[7,8,9]];
space1.played = false;
space2.played = false;
space3.played = false;
space4.played = false;
space5.played = false;
space6.played = false;
space7.played = false;
space8.played = false;
space9.played = false;
});
This Pen doesn't use any external CSS resources.