Session BRE05 Help

Correction : Mini-projet Tic-Tac-Toe

Ça n'est pas du tout la version la plus optimisée du jeu mais la correction me parait plus facile à comprendre comme ça :

function checkWin(grid) { let gridFull = true; let victory = false; let defeat = false; let equality = false; console.log(grid); for(let i = 0; i < grid.length; i++) { if(grid[i] === "") { gridFull = false; } } if(grid[0] === "X" && grid[1] === "X" && grid[2] === "X") // line 1 player { victory = true; } else if(grid[3] === "X" && grid[4] === "X" && grid[5] === "X") // line 2 player { victory = true; } else if(grid[6] === "X" && grid[7] === "X" && grid[8] === "X") // line 3 player { victory = true; } else if(grid[0] === "O" && grid[1] === "O" && grid[2] === "O") // line 1 computer { defeat = true; } else if(grid[3] === "0" && grid[4] === "0" && grid[5] === "0") // line 2 computer { defeat = true; } else if(grid[6] === "0" && grid[7] === "0" && grid[8] === "0") // line 3 computer { defeat = true; } else if(grid[0] === "X" && grid[3] === "X" && grid[6] === "X") // col 1 player { victory = true; } else if(grid[1] === "X" && grid[4] === "X" && grid[7] === "X") // col 2 player { victory = true; } else if(grid[2] === "X" && grid[5] === "X" && grid[8] === "X") // col 3 player { victory = true; } else if(grid[0] === "O" && grid[3] === "O" && grid[6] === "O") // col 1 computer { defeat = true; } else if(grid[1] === "O" && grid[4] === "O" && grid[7] === "O") // col 2 computer { defeat = true; } else if(grid[2] === "O" && grid[5] === "O" && grid[8] === "O") // col 3 computer { defeat = true; } else if(grid[0] === "X" && grid[4] === "X" && grid[8] === "X") // diag tl to br player { victory = true; } else if(grid[2] === "X" && grid[4] === "X" && grid[6] === "X") // diag tr to bl player { victory = true; } else if(grid[0] === "O" && grid[4] === "O" && grid[8] === "O") // diag tl to br computer { defeat = true; } else if(grid[2] === "O" && grid[4] === "O" && grid[6] === "O") // diag tr to bl computer { defeat = true; } else { if(gridFull) { equality = true; } } if(victory) { window.alert("C'est gagné !"); return "victory" } else if(defeat) { window.alert("C'est perdu !"); return "defeat"; } else if(equality) { window.alert("Match nul !"); return "equality"; } else { return "ongoing"; } } function getFirstEmptyBox(grid) { for(let i = 0; i < grid.length; i++) { if(grid[i] === "") { return `box-${i}`; } } return null; } function player(grid, box) { // je vérifie si la case est bien vide if(box.textContent.trim() !== " ") { // je rajoute mon X dans la grille updateGrid(box, "X", grid); } else { window.alert("Case déjà occupée !"); } } function computer(grid) { // mode facile : il récupère la première case vide let emptyBox = getFirstEmptyBox(grid); // il rajoute son O dans la grille updateGrid(document.getElementById(emptyBox), "O", grid); } function updateGrid(box, symbol, grid) { let boxNb = -1; if(box.id === "box-0") { boxNb = 0; } else if(box.id === "box-1") { boxNb = 1; } else if(box.id === "box-2") { boxNb = 2; } else if(box.id === "box-3") { boxNb = 3; } else if(box.id === "box-4") { boxNb = 4; } else if(box.id === "box-5") { boxNb = 5; } else if(box.id === "box-6") { boxNb = 6; } else if(box.id === "box-7") { boxNb = 7; } else if(box.id === "box-8") { boxNb = 8; } grid[boxNb] = symbol; } function displayGrid(grid) { for(let i = 0; i < grid.length; i++) { if(grid[i] !== "") { let box = document.querySelector(`#box-${i}`); box.innerHTML = ""; let text = document.createTextNode(grid[i]); box.appendChild(text); } } } window.addEventListener('DOMContentLoaded', () => { // je crée un tableau qui représente mes cases let grid = ["", "", "", "", "", "", "", "", ""]; // Je mets un eventListener pour réagir aux clics sur les cases du HTML let boxes = document.querySelectorAll("#game-board > div"); for(let box of boxes) { // pour chacune des cases, je réagis au clic box.addEventListener("click", (event) => { // c'est le tour du joueur player(grid, event.target); console.log(grid); // j'affiche la grille dans le html displayGrid(grid); // je vérifie si quelqu'un a gagné let status = checkWin(grid); console.log(status); // si personne n'a gagné et qu'il n'y a pas égalité if(status === "ongoing") { // c'est le tour de l'ordinateur computer(grid); console.log(grid); // j'affiche la grille dans le html displayGrid(grid); // je vérifie si quelqu'un a gagné status = checkWin(grid); console.log(status); } }); // le bouton reset let button = document.querySelector("#reset"); button.addEventListener("click", () => { // je recharge la page location.reload(); }); } });
12 January 2026