diff --git a/src/components/Board.tsx b/src/components/Board.tsx
index 3989a44..9ec797f 100644
--- a/src/components/Board.tsx
+++ b/src/components/Board.tsx
@@ -5,18 +5,13 @@ interface BoardProps {
onSquareClick: (index: number) => void;
}
-export default function Board(props: BoardProps) {
+const Board = ({ squares, onSquareClick }: BoardProps) => {
return (
- props.onSquareClick(0)} />
- props.onSquareClick(1)} />
- props.onSquareClick(2)} />
- props.onSquareClick(3)} />
- props.onSquareClick(4)} />
- props.onSquareClick(5)} />
- props.onSquareClick(6)} />
- props.onSquareClick(7)} />
- props.onSquareClick(8)} />
+ {squares.map((item, index) =>
+ onSquareClick(index)}/>
+ )}
);
-}
+};
+export default Board;
diff --git a/src/components/Game.tsx b/src/components/Game.tsx
index 80be18b..f81dc57 100644
--- a/src/components/Game.tsx
+++ b/src/components/Game.tsx
@@ -1,4 +1,4 @@
-import { useState } from "react";
+import { useState, useEffect } from "react";
import Board from "./Board";
export default function Game() {
@@ -6,18 +6,62 @@ export default function Game() {
Array(9).fill(null)
);
const [isXNext, setIsXNext] = useState(true);
+ const [winner, setWinner] = useState(null);
+ const [timeLeft, setTimeLeft] = useState(10);
+
+
+ useEffect(() => {
+ const interval = setInterval(() => {
+ setTimeLeft(prev => {
+ if (prev <= 1) {
+ setIsXNext(prev => !prev);
+ return 10;
+ }
+ return prev - 1;
+ });
+ }, 1000);
+
+ return () => clearInterval(interval);
+ }, []);
function handleSquareClick(index: number) {
- // Temporary: no gameplay logic yet
+ if (squares[index] !== null || winner) return;
+ setIsXNext(squares[index] === null ? prev => !prev : isXNext);
+ const newSquares = squares.map((value, arrIndex) => arrIndex !== index ? value : isXNext ? "X" : "O");
+ setSquares(newSquares);
+ calculateWinner(newSquares);
+ setTimeLeft(10);
console.log("Clicked square:", index);
}
-
+ const calculateWinner = (newSquares: (string | null)[]) => {
+ 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],
+ ];
+ const winnerLine = lines.find(line => line.every(i => newSquares[i] === newSquares[line[0]] && newSquares[i] !== null));
+ winnerLine ? setWinner(newSquares[winnerLine[0]]) : setWinner(winner);
+ }
+ const playAgain = () => {
+ setSquares(Array(9).fill(null));
+ setIsXNext(true);
+ setWinner(null);
+ setTimeLeft(10);
+ }
return (
Tic Tac Toe
Next Player: {isXNext ? "X" : "O"}
+ {(winner === null && !squares.every(i => i !== null)) && (
Time Left: {timeLeft}
)}
+ {winner !== null &&
Winner: {winner}
}
+ {(winner !== null || squares.every(i => i !== null)) &&
}
);