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)) && }
);