Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

129
Vistas
how do i check if a cell in tic tac toe is chosen or not

im making tic tac toe with a bot and need to check if a cell is empty or not. i kind of did make the bot work, because it writes a random X on the board but the bot writes Xs over Os. so i need to figure out how to check if a cell contains Xs or Os if not then place the X. Right now my code is this.

const cellElement = document.querySelectorAll('[data-cell]')
const winner = document.getElementById("winner")
let nextTurn = false
let winningConditions = [
    [0, 1, 2],
    [3, 4, 5],
    [6, 7, 8],
    [0, 3, 6],
    [1, 4, 7],
    [2, 5, 8],
    [0, 4, 8],
    [2, 4, 6],
]

cellElement.forEach(cell => {
    cell.addEventListener("click", handleClick, { once: true })

    function handleClick() {
        playerTurn(cell)
        checkWin()
        computerTurn()
        //check for draw
    }
});

function playerTurn(cell) {
    if (nextTurn == false) {
        cell.innerHTML = "O"
        nextTurn = true
    }
}

function computerTurn() {
    if (nextTurn == true) {
        cellElement[Math.floor(Math.random() * cellElement.length)].innerHTML = "X"
        nextTurn = false
    } 
}

function checkWin() {
    for (let winCondition of winningConditions) {
        if (winCondition.every(i => cellElement[i].innerHTML == "X")) {
            winner.innerHTML = "X WON!!!"
        } else if (winCondition.every(i => cellElement[i].innerHTML == "O")) {
            winner.innerHTML = "O WON!!!"
        }
    }
}

what i've tried is this, but what is does is that it only put x in the first cell and then goes 1 cell ahead but even though there is a O there it just overwrites is.

function computerTurn() {
    for (let i = 0; i < cellElement.length; i++) {
        console.log(cellElement[i]);
        if (nextTurn == true) {
            if (cellElement[i].innerHTML !== "X" && "O") {
                cellElement[i].innerHTML = "X"
                nextTurn = false
                break;
            }
        } else {
            computerTurn()
        }
    }
}

you can test out the code here https://jsfiddle.net/tv01cy7x/3/

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

You cannot do

if (cellElement[i].innerHTML !== "X" && "O") {
                cellElement[i].innerHTML = "X"

but

const val = cellElement[i].innerHTML
if ( val !== "X" && val !== "O")

In a if, every condition is evaluated independentely, so when you put an && you still need to tell him which variable to compare

In other words : if ( val !== "X" && "O") is equivalent to if ( "O" && val !== "X") and because anything which is not null or 0 or undefined, is equal to True, it is equivalent to : if ( val !== "X" && true ) so equivalent to if ( val !== "X" )


What you could do to find place a random X would be :

function computerTurn(){
  r = Math.floor(Math.random() * cellElement.length);
  if (cellElement[i].innerHTML !== "X" && "O") {
    cellElement[i].innerHTML = "X";
    return 1;
  }
  return computerTurn();
}
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda