Tell us what’s happening:
It’s failing tests 9, 10, and 11. But it does what it’s supposed to do when I run it, as far as I can tell.
Your code so far
<!-- file: index.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Tic-Tac-Toe</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/18.3.1/umd/react.development.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/18.3.1/umd/react-dom.development.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/7.26.5/babel.min.js"></script>
<script
data-plugins="transform-modules-umd"
type="text/babel"
src="index.jsx"
></script>
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<div id="root"></div>
<script
data-plugins="transform-modules-umd"
type="text/babel"
data-presets="react"
data-type="module"
>
import { Board } from './index.jsx';
ReactDOM.createRoot(document.getElementById('root')).render(<Board />);
</script>
</body>
</html>
/* file: styles.css */
.container {
display: grid;
grid-template-columns: auto auto auto;
width: 200px;
}
button.square {
width: 50px;
height: 50px;
margin: 10px;
}
/* file: index.jsx */
const { useState, useEffect } = React;
export function Board() {
const 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]
]
const [buttons,setButtons] = useState(Array(9).fill(false));
const [player,setPlayer] = useState("X");
const [count, setCount] = useState(0);
const [display, setDisplay]=useState('Next Player: X');
const [gameOver, setGameOver]=useState(false);
const [xMoves, setXMoves]=useState([]);
const [oMoves, setOMoves]=useState([]);
useEffect(()=> {
for (let i = 0; i < wins.length; i++) {
if (wins[i].every(z => xMoves.includes(z))) {
setGameOver(true);
setDisplay("Winner: X");
}
else if (wins[i].every(z => oMoves.includes(z))) {
setGameOver(true);
setDisplay("Winner: O")
}
else if (count === 9) {
setGameOver(true);
setDisplay("Draw!")
}
else if (count < 9 && !gameOver) {
setDisplay(`Next Player: ${player}`);
}
}})
function handleClick(index) {
const btnStatus = buttons.map((value,i) =>
{return i === index ? player : value}
)
player === 'X' ? setXMoves([...xMoves, index]) : setOMoves([...oMoves, index]);
player === 'X' ? setPlayer('O') : setPlayer('X');
setButtons(prev => btnStatus)
setCount(count + 1);
}
function reset() {
setButtons(Array(9).fill(false));
setPlayer("X");
setDisplay('Next Player: X');
setCount(0);
setGameOver(false);
setXMoves([]);
setOMoves([]);
}
return (
<div>
<h1>Tic-Tac-Toe</h1>
<p>{display}</p>
<div className='container'>
{
buttons.map( (_,index) =>
<button className='square'
key={index}
disabled = {buttons[index] || gameOver}
onClick={() => handleClick(index)}>
{buttons[index]}
</button>
)}
</div>
<button id="reset" onClick={reset}>Reset Game</button>
</div>
);
}
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36
Challenge Information:
Build a Tic-Tac-Toe Game - Build a Tic-Tac-Toe Game