Build a Tic-Tac-Toe Game - Build a Tic-Tac-Toe Game

Tell us what’s happening:

Hi all, I can’t just pass the validations tests 9, 10, and 10. My application is working properly following the instructions: it shows “Winner: X” or “Winner: O” or “It’s a Draw!” as the example App does. I don’t really know what should I do at this point. Thanks in advance for your help!

Your code so far

<!-- file: index.html -->

/* file: index.jsx */
const { useState, useRef, useEffect } = React;

export function Board() {
  const [nextPlayer, setNextPlayer] = useState("X");
  const [gameEnd, setGameEnd] = useState(false);
  const btoneRef = useRef(null);
  const bttwoRef = useRef(null);
  const btthreeRef = useRef(null);
  const btfourRef = useRef(null);
  const btfiveRef = useRef(null);
  const btsixRef = useRef(null);
  const btsevenRef = useRef(null);
  const bteightRef = useRef(null);
  const btnineRef = useRef(null);

  const [scores, setScores] = useState([]);
  const [xscores, setXscores] = useState([]);
  const [oscores, setOscores] = useState([]);
  const [winner, setWinner] = useState("");
  const [winning, setWinning] = useState([
    "123","456","789","147","258","369","159","357"
  ]);

  function updateScores(player, id){
      setScores(prev => [...prev,id]);
      if(player === "X"){
        setXscores(prev => [...prev,id]);
      }else{
        setOscores(prev => [...prev,id]);
      }  
    }
    useEffect(() =>{
        //check score and win
      if(xscores.length >= 3 || oscores.length >= 3){
        if(xscores.length >= 3 && checkWinner(xscores)){
            console.log("Winner:X");
            setWinner("Winner: X");
            setGameEnd(true);
        }
        if(oscores.length >= 3 && checkWinner(oscores)){
            console.log("Winner: O");
            setWinner("Winner: O");
            setGameEnd(true);
        }
        //treat draw case here
        if (scores.length === 9 && !winner) {
          setGameEnd(true);
          setWinner("Draw");
        }

      }
    },[xscores, oscores, scores]);

  function checkWinner(playerScores){   
    const finalWin = winning.some(triple => {
      const charTriple = [...triple];      
      return charTriple.every(c => playerScores.includes(Number(c)));         
    });
    return finalWin;
  }

  function handleClick(btnref, id) {
    if (gameEnd || winner) return;
    if (btnref.current.innerText !== "") return;

    btnref.current.innerText = nextPlayer;

    updateScores(nextPlayer, id);
    setNextPlayer(prev => (prev === "X" ? "O" : "X"));
}
  function handleReset(){
    
    setNextPlayer("X");
    setOscores([]);
    setXscores([]);
    setScores([]);
    setGameEnd(false);
    setWinner("");
    document.querySelectorAll(".square").forEach(btn => {
    btn.innerText = "";});
  }

  return(
    <div className="container">
    <p>
  {gameEnd
    ? (winner !=="Draw" ? winner : "It's a Draw!")
    : "Next Player: " + nextPlayer}
</p>
    <div className="board">
      <button className="square" ref={btoneRef} disabled={gameEnd} onClick={e => handleClick(btoneRef,1)}></button>
      <button className="square" ref={bttwoRef} disabled={gameEnd} onClick={e =>handleClick(bttwoRef,2)}></button>      
      <button className="square" ref={btthreeRef} disabled={gameEnd} onClick={e =>handleClick(btthreeRef,3)}></button>
      <button className="square" ref={btfourRef} disabled={gameEnd} onClick={e =>handleClick(btfourRef,4)}></button>
      <button className="square" ref={btfiveRef} disabled={gameEnd} onClick={e =>handleClick(btfiveRef,5)}></button>
      <button className="square" ref={btsixRef} disabled={gameEnd} onClick={e =>handleClick(btsixRef,6)}></button>
      <button className="square" ref={btsevenRef} disabled={gameEnd} onClick={e =>handleClick(btsevenRef,7)}></button>
      <button className="square" ref={bteightRef} disabled={gameEnd} onClick={e =>handleClick(bteightRef,8)}></button>
      <button className="square" ref={btnineRef} disabled={gameEnd} onClick={e =>handleClick(btnineRef,9)}></button>
      </div>
      <button id="reset" onClick={handleReset}>Reset</button>
    </div>
    
  );

}
/* file: styles.css */

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36

Challenge Information:

Build a Tic-Tac-Toe Game - Build a Tic-Tac-Toe Game