function aiPick() { let aiCell = null; while (aiCell == null) { let aiColIndex = Math.floor(Math.random() * 7) console.log(aiColIndex) aiCell = getFirstOpenCellForColumn(aiColIndex) console.log(typeof(aiCell)) console.log(getClassListArray(aiCell)) } aiCell.classList.add('red') checkStatusOfGame(aiCell) yellowIsNext = !yellowIsNext aiClassList = getClassListArray(aiCell) aiColClass = aiClassList.find(className => className.includes('col')); let aiColIndex = parseInt(aiColClass[4], 10); clearColorFromTop(aiColIndex) } Estoy trabajando en un oponente para un juego Connect Four. Hago que elija una de las siete columnas al azar, y luego la función getFirstOpenCellForColumn marcará la primera celda abierta agregando una clase de red a ese div .
Luego, el código verifica si el movimiento es una victoria con checkStatusOfGame(aiCell) , intercambia al jugador y elimina una ficha que aparece en la parte superior de la columna, fuera del tablero, que sirve como "selector".
Estaba buscando una manera de hacer que la computadora generara un nuevo número aleatorio para elegir una columna cuando el último espacio en la columna estaba ocupado. Pensé que esto sería suficiente, ya que cuando la computadora selecciona una columna completa, me da este mensaje de error:
script.js:39 Uncaught TypeError: Cannot read properties of null (reading 'classList') at getClassListArray (script.js:39) at aiPick (script.js:274) at HTMLDivElement.handleCellClick (script.js:258) Pero luego parece que no vuelve a elegir un número aleatorio, sino que simplemente salta a yellowIsNext = !yellowIsNext modo que ahora estoy colocando la ficha roja de la computadora en lugar de las amarillas.
Básicamente, quiero que el código
¿Sabes por qué esto no funciona? ¿Hay otra forma de escribir el ciclo while , o es let aiCell = null ?
¡Gracias!