Coming from a python background, I recently started learning django, currently at the javascript section. This tic-tac-toe code is to familiarize myself with javascript basic concepts. No application code is included, just JS and HTML.
tic-tac-toe.css
td {
background: black;
width: 2em;
height: 2em;
font-size: 3em;
text-align: center;
color: orange;
}
table {
margin: auto;
}
h1 {
margin-left: 46%;
}
tic-tac-toe.js
function markCell(cell, marks) {
if (marks.length === 0) {
marks.push('O')
marks.push('X')
}
if (cell.textContent === '') {
cell.textContent = marks.pop()
}
}
function clearBoard() {
for (let cell of document.getElementsByTagName('td')) {
cell.textContent = ''
}
}
function updateWinnerScore(winner) {
let scores = document.querySelector('h1').innerText
let score1 = parseInt(scores[0])
let score2 = parseInt(scores[4])
if (winner === 'XXX') {
score1 += 1
clearBoard()
} else if (winner === 'OOO') {
score2 += 1
clearBoard()
}
document.getElementsByTagName('h1')[0].innerHTML = score1 + ' - ' + score2
}
function updateScores(cells) {
let values = []
for (let c of cells) {
values.push(c.textContent)
}
let combinations = [values.slice(0, 3).join(''), values.slice(3, 6).join(''), values.slice(6, 9).join('')]
for (let i = 0; i < 3; ++i) {
combinations.push([values[i], values[i + 3], values[i + 6]].join(''))
}
combinations.push([values[0], values[4], values[8]].join(''))
combinations.push([values[2], values[4], values[6]].join(''))
let winner
for (let state of ['XXX', 'OOO']) {
if (combinations.includes(state)) {
winner = state
}
}
updateWinnerScore(winner)
if (values.join('').length === 9) {
clearBoard()
}
}
function updateBoard(marks) {
let cells = Array.from(document.getElementsByTagName('td'))
for (let c of cells) {
c.addEventListener('click', function () {
markCell(c, marks)
})
c.addEventListener('click', function () {
updateScores(cells)
})
}
}
tic-tac-toe.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Tic Tac Toe</title>
<link rel="stylesheet" href="tic-tac-toe.css">
<script src="tic-tac-toe.js"></script>
</head>
<body>
<h1>0 - 0</h1>
<table>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</table>
<script>
let marks = ['O', 'X']
updateBoard(marks)
</script>
</body>
</html>