Tell us what’s happening:
I don’t actually know why i failed test 10 where as everything looks okay to me
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: index.jsx */
const { useState } = React;
export function Board() {
const [squares, setSquares] = useState(Array(9).fill(null));
const [isXNext, setIsXNext] = useState(true);
const calculateWinner = (squares) => {
const lines = [
[0, 1, 2],
[3, 4, 5],
[6, 7, 8],
[0, 3, 6],
[1, 4, 7],
[2, 5, 8],
[0, 4, 8],
[2, 4, 6],
];
for (let [a, b, c] of lines) {
if (
squares[a] &&
squares[a] === squares[b] &&
squares[a] === squares[c]
) {
return squares[a];
}
}
return null;
};
const winner = calculateWinner(squares);
const isDraw = !winner && squares.every((square) => square !== null);
const handleClick = (index) => {
if (winner || squares[index]) return;
const newSquares = [...squares];
newSquares[index] = isXNext ? "X" : "O";
setSquares(newSquares);
setIsXNext(!isXNext);
};
const resetGame = () => {
setSquares(Array(9).fill(null));
setIsXNext(true);
}
let status;
if (winner) {
status = `winner: ${winner}`;
} else if (isDraw) {
status = "It's a draw";
} else {
status = `Next Player: ${isXNext ? "X" : "O"}`;
}
return (
<div>
<h2>{status}</h2>
<div className="board">
{squares.map((value, index) => (
<button
key={index}
className="square"
onClick={() => handleClick(index)}
>
{value}
</button>
))}
</div>
<button id="reset" onClick={resetGame}>
Reset Game
</button>
</div>
);
}
/* file: styles.css */
body {
display: flex;
justify-content: center;
align-items: center;
text-align: center;
}
.board {
display: grid;
grid-template-columns: repeat(3, 100px);
grid-template-rows: repeat(3, 100px);
gap: 5px;
}
.square {
font-size: 24px;
cursor: pointer;
}
#reset {
margin-top: 20px;
padding: 20px;
width: 100%;
font-size: 16px;
font-weight: 600;
}
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36
Challenge Information:
Build a Tic-Tac-Toe Game - Build a Tic-Tac-Toe Game