I've made a tic tac toe game in HTML, CSS, and Javascript. Clicking on the boxes, displaying messages, and everything else works, except for checking if someone won the game doesn't.
The code doesn't generate errors, it just doesn't work.
Here's the code I used:
var currentPlayer = "X";
var tds = document.querySelectorAll("td");
var playerDisplay = document.querySelector("#playerDisplay")
var warning = document.querySelector("#warning")
var winDisplay = document.querySelector("#win")
function switchPlayers() {
if(currentPlayer === "X") {
currentPlayer = "O";
playerDisplay.innerHTML = "O"
} else {
currentPlayer = "X";
playerDisplay.innerHTML = "X"
}
}
function checkWin() {
if (tds[0].textContent === tds[1].textContent === tds[2].textContent) {
return tds[0].textContent;
} else if (tds[3].textContent === tds[4].textContent ==tds[5].textContent){
return tds[3].textContent;
} else if (tds[6].textContent === tds[7].textContent === tds[8].textContent){
return tds[6].textContent;
} else if (tds[0].textContent === tds[3].textContent === tds[6].textContent){
return tds[0].textContent;
} else if (tds[1].textContent === tds[4].textContent === tds[7].textContent){
return tds[1].textContent;
} else if (tds[2].textContent === tds[5].textContent === tds[8].textContent){
return tds[2].textContent;
} else if (tds[0].textContent === tds[4].textContent === tds[8].textContent){
return tds[0].textContent;
} else if (tds[2].textContent === tds[4].textContent === tds[6].textContent){
return tds[2].textContent;
} else if (tds[0].textContent != "-" && tds[1].textContent != "-" && tds[2].textContent != "-" && tds[3].textContent != "-" && tds[4].textContent != "-" && tds[5].textContent != "-" && tds[6].textContent != "-" && tds[7].textContent != "-" && tds[8].textContent != "-"){
return -1;
} else {
return -2;
}
}
function game() {
for(var i = 0; i < tds.length; i++) {
tds[i].addEventListener("click", function(){
if(this.textContent === "-") {
this.textContent = currentPlayer;
if(checkWin() === "X") {
winDisplay.textContent = "X wins!!!";
return;
} else if(checkWin() === "O"){
winDisplay.textContent = "O wins!!!";
return;
} else if (checkWin() === -1) {
winDisplay.textContent = "Tied!!!"
return;
}
switchPlayers();
} else {
warning.textContent = "That block has already been filled, choose and empty one."
setTimeout(function(){
warning.textContent = "";
}, 1000);
}
});
}
}
game();
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>Tic Tac Toe</title>
<link href="style.css" rel="stylesheet" type="text/css" />
<link href="https://fonts.googleapis.com/css?family=Open+Sans|Roboto&display=swap" rel="stylesheet">
</head>
<body>
<h1>Tic Tac Toe</h1>
<table>
<tr>
<td id="1">-</td>
<td id="2" class="top-middle">-</td>
<td id="3" >-</td>
</tr>
<tr>
<td id="4" class="left">-</td>
<td id="5" class="middle">-</td>
<td id="6" class="right">-</td>
</tr>
<tr>
<td id="7" >-</td>
<td id="8" class="bottom-middle">-</td>
<td id="9">-</td>
</tr>
</table>
<p id = "win">It's <span id="playerDisplay">X</span>'s turn.</p>
<p id="warning"></p>
<script src="script.js"></script>
</body>
</html>
I just don't understand why it's not working. :)