From 1c12923369419e8d6384e03c02223efda1ec165f Mon Sep 17 00:00:00 2001 From: Adam <adam.elarouti@etu.ec-lyon.fr> Date: Mon, 31 Mar 2025 17:44:56 +0200 Subject: [PATCH] tour --- htdocs/index.js | 125 +++++++++++++++++++++++++++++++----------------- 1 file changed, 81 insertions(+), 44 deletions(-) diff --git a/htdocs/index.js b/htdocs/index.js index e50f344..af7e317 100644 --- a/htdocs/index.js +++ b/htdocs/index.js @@ -17,9 +17,12 @@ const player = { symbol: "X", turn: false, win: false, - isBlackPlayer: false + isBlackPlayer: false, + pieces: ["t", "c", "f", "q", "k", "p"] }; + + const socket = io(); const queryString = window.location.search; @@ -102,15 +105,13 @@ socket.on('join room', (roomId) => { }); socket.on('start game', (players) => { - console.log(players); + console.log(players, "Le jeu commence"); startGame(players); }); socket.on('play', (moveData) => { - - - console.log("[Client] Mouvement reçu : ", moveData.move.to.x, 'et', moveData.move.to.y,'et', currentPlayer, 'et', selectedPosition); + console.log("[Client] Mouvement reçu : ", moveData.move.to.x, 'et', moveData.move.to.y,'et', tour, 'et', selectedPosition); selectedPiece = moveData.move.piece; row=moveData.move.from.x; col=moveData.move.from.y; @@ -132,8 +133,8 @@ socket.on('play', (moveData) => { // return; // } - // setTurnMessage('alert-info', 'alert-success', "C'est ton tour de jouer"); - // player.turn = true; + setTurnMessage('alert-info', 'alert-success', "C'est ton tour de jouer"); + player.turn = true; // } else { // if (player.win) { // $("#turn-message").addClass('alert-success').html("Félicitations, tu as gagné la partie !"); @@ -147,8 +148,8 @@ socket.on('play', (moveData) => { // return; // } - // setTurnMessage('alert-success', 'alert-info', `C'est au tour de <b>${ennemyUsername}</b> de jouer`) - // player.turn = false; + setTurnMessage('alert-success', 'alert-info', `C'est au tour de <b>${ennemyUsername}</b> de jouer`) + player.turn = false; // } }); @@ -161,9 +162,12 @@ function startGame(players) { waitingArea.classList.add('d-none'); turnMsg.classList.remove('d-none'); const ennemyPlayer = players.find(p => p.socketId != player.socketId); + ennemyPlayer.isBlackPlayer=true; + ennemyPlayer.pieces = ["P","T","C","F","Q","K"]; draw(); ennemyUsername = ennemyPlayer.username; - + tour = {currentPlayer: player, ennemyPlayer: ennemyPlayer}; + console.log(ennemyPlayer); if (player.host && player.turn) { setTurnMessage('alert-info', 'alert-success', "C'est ton tour de jouer"); } else { @@ -194,7 +198,6 @@ const joinRoom = function () { const canvas = document.getElementById("chessboard"); const ctx = canvas.getContext("2d"); const size = 60; // Taille des cases -currentPlayer = 0; // Disposition initiale de l'échiquier // Charger les images des pièces @@ -214,7 +217,6 @@ const pieceImages = { "K": "roi_noir.png" }; -const pieces_joueurs = {0: ["p","t","c","f","q","k"],1:["P","T","C","F","Q","K"]}; @@ -284,28 +286,27 @@ canvas.addEventListener("click", function(event) { function selectPiece(row, col) { const current_piece = board[row][col]; selectedPosition = {row, col}; - if (current_piece !== "" && pieces_joueurs[currentPlayer].includes(current_piece)) { // Vérifier que ce n'est pas une case vide + if (current_piece !== "" && tour.currentPlayer.pieces.includes(current_piece)) { // Vérifier que ce n'est pas une case vide selectedPiece = current_piece; - highlightMoves(currentPlayer,current_piece, row, col); + highlightMoves(tour,current_piece, row, col); } } function highlightMoves(player,piece, row, col) { - if (player===0){ + if (tour.currentPlayer.isBlackPlayer===false){ direction=-1; - opponent=1; } else{direction=1; - opponent=0; } let moves = []; + console.log(piece.toLowerCase() === "p"); if (piece.toLowerCase() === "p") { - if(row===6 && player===0){ + if(row===6 && tour.currentPlayer.isBlackPlayer===false){ if (board[row + 2*direction][col] === "") { moves.push({row: row + 2*direction,col}); } } - if(row===1 && player===1){ + if(row===1 && tour.currentPlayer.isBlackPlayer===true){ if (board[row +2*direction][col] === "") { moves.push({row: row + 2*direction,col}); } @@ -313,10 +314,10 @@ function highlightMoves(player,piece, row, col) { if (board[row + direction] && board[row + direction][col] === "") { moves.push({ row: row + direction, col }); } - if (pieces_joueurs[opponent].includes(board[row + direction][col + direction])){ + if (tour.ennemyPlayer.pieces.includes(board[row + direction][col + direction])){ moves.push({row: row +direction, col: col + direction }) } - if (pieces_joueurs[opponent].includes(board[row + direction][col - direction])){ + if (tour.ennemyPlayer.pieces.includes(board[row + direction][col - direction])){ moves.push({row: row +direction, col: col - direction }) } } @@ -327,7 +328,7 @@ function highlightMoves(player,piece, row, col) { moves.push({ row: r, col }); } else { - if (pieces_joueurs[opponent].includes(board[r][col])) { + if (tour.ennemyPlayer.pieces.includes(board[r][col])) { moves.push({ row: r, col }); // Capture possible } break // Bloqué par une pièce @@ -339,7 +340,7 @@ function highlightMoves(player,piece, row, col) { if (board[r][col] === "") { moves.push({ row: r, col }); } else { - if (pieces_joueurs[opponent].includes(board[r][col])) { + if (tour.ennemyPlayer.pieces.includes(board[r][col])) { moves.push({ row: r, col }); } break; @@ -351,7 +352,7 @@ function highlightMoves(player,piece, row, col) { if (board[row][c] === "") { moves.push({ row, col: c }); } else { - if (pieces_joueurs[opponent].includes(board[row][c])) { + if (tour.ennemyPlayer.pieces.includes(board[row][c])) { moves.push({ row, col: c }); } break; @@ -363,7 +364,7 @@ function highlightMoves(player,piece, row, col) { if (board[row][c] === "") { moves.push({ row, col: c }); } else { - if (pieces_joueurs[opponent].includes(board[row][c])) { + if (tour.ennemyPlayer.pieces.includes(board[row][c])) { moves.push({ row, col: c }); } break; @@ -376,7 +377,7 @@ function highlightMoves(player,piece, row, col) { if (board[r][c] === "") { moves.push({ row: r, col: c }); } else { - if (pieces_joueurs[opponent].includes(board[r][c])) { + if (tour.ennemyPlayer.pieces.includes(board[r][c])) { moves.push({ row: r, col: c }); } break; // Bloqué par une pièce @@ -388,7 +389,7 @@ function highlightMoves(player,piece, row, col) { if (board[r][c] === "") { moves.push({ row: r, col: c }); } else { - if (pieces_joueurs[opponent].includes(board[r][c])) { + if (tour.ennemyPlayer.pieces.includes(board[r][c])) { moves.push({ row: r, col: c }); } break; @@ -400,7 +401,7 @@ function highlightMoves(player,piece, row, col) { if (board[r][c] === "") { moves.push({ row: r, col: c }); } else { - if (pieces_joueurs[opponent].includes(board[r][c])) { + if (tour.ennemyPlayer.pieces.includes(board[r][c])) { moves.push({ row: r, col: c }); } break; @@ -412,7 +413,7 @@ function highlightMoves(player,piece, row, col) { if (board[r][c] === "") { moves.push({ row: r, col: c }); } else { - if (pieces_joueurs[opponent].includes(board[r][c])) { + if (tour.ennemyPlayer.pieces.includes(board[r][c])) { moves.push({ row: r, col: c }); } break; @@ -437,7 +438,7 @@ function highlightMoves(player,piece, row, col) { // Vérifie que la nouvelle position est sur l'échiquier if (newRow >= 0 && newRow < 8 && newCol >= 0 && newCol < 8) { - if (board[newRow][newCol] === "" || pieces_joueurs[opponent].includes(board[newRow][newCol])) { + if (board[newRow][newCol] === "" || tour.ennemyPlayer.pieces.includes(board[newRow][newCol])) { moves.push({ row: newRow, col: newCol }); } } @@ -457,7 +458,7 @@ function highlightMoves(player,piece, row, col) { // Vérifie que la nouvelle position est sur l'échiquier if (newRow >= 0 && newRow < 8 && newCol >= 0 && newCol < 8) { - if (board[newRow][newCol] === "" || pieces_joueurs[opponent].includes(board[newRow][newCol])) { + if (board[newRow][newCol] === "" || tour.ennemyPlayer.pieces.includes(board[newRow][newCol])) { moves.push({ row: newRow, col: newCol }); } } @@ -470,7 +471,7 @@ function highlightMoves(player,piece, row, col) { if (board[r][col] === "") { moves.push({ row: r, col }); } else { - if (pieces_joueurs[opponent].includes(board[r][col])) { + if (tour.ennemyPlayer.pieces.includes(board[r][col])) { moves.push({ row: r, col }); // Capture possible } break; // Bloqué par une pièce @@ -480,7 +481,7 @@ function highlightMoves(player,piece, row, col) { if (board[r][col] === "") { moves.push({ row: r, col }); } else { - if (pieces_joueurs[opponent].includes(board[r][col])) { + if (tour.ennemyPlayer.pieces.includes(board[r][col])) { moves.push({ row: r, col }); } break; @@ -492,7 +493,7 @@ function highlightMoves(player,piece, row, col) { if (board[row][c] === "") { moves.push({ row, col: c }); } else { - if (pieces_joueurs[opponent].includes(board[row][c])) { + if (tour.ennemyPlayer.pieces.includes(board[row][c])) { moves.push({ row, col: c }); } break; @@ -502,7 +503,7 @@ function highlightMoves(player,piece, row, col) { if (board[row][c] === "") { moves.push({ row, col: c }); } else { - if (pieces_joueurs[opponent].includes(board[row][c])) { + if (tour.ennemyPlayer.pieces.includes(board[row][c])) { moves.push({ row, col: c }); } break; @@ -514,7 +515,7 @@ function highlightMoves(player,piece, row, col) { if (board[r][c] === "") { moves.push({ row: r, col: c }); } else { - if (pieces_joueurs[opponent].includes(board[r][c])) { + if (tour.ennemyPlayer.pieces.includes(board[r][c])) { moves.push({ row: r, col: c }); } break; @@ -524,7 +525,7 @@ function highlightMoves(player,piece, row, col) { if (board[r][c] === "") { moves.push({ row: r, col: c }); } else { - if (pieces_joueurs[opponent].includes(board[r][c])) { + if (tour.ennemyPlayer.pieces.includes(board[r][c])) { moves.push({ row: r, col: c }); } break; @@ -534,7 +535,7 @@ function highlightMoves(player,piece, row, col) { if (board[r][c] === "") { moves.push({ row: r, col: c }); } else { - if (pieces_joueurs[opponent].includes(board[r][c])) { + if (tour.ennemyPlayer.pieces.includes(board[r][c])) { moves.push({ row: r, col: c }); } break; @@ -544,7 +545,7 @@ function highlightMoves(player,piece, row, col) { if (board[r][c] === "") { moves.push({ row: r, col: c }); } else { - if (pieces_joueurs[opponent].includes(board[r][c])) { + if (tour.ennemyPlayer.pieces.includes(board[r][c])) { moves.push({ row: r, col: c }); } break; @@ -556,15 +557,47 @@ function highlightMoves(player,piece, row, col) { } +function find_pieces(piece,board){ + for (let i=0; i<8;i++){ + for (let j=0; j<8;j++){ + if (board[i][j] === piece){ + return [i,j]; + } + } + } +} - - - +// function echec(tour, board) { +// // Trouve la position du roi ennemi +// if (tour.currentPlayer.isBlackPlayer === true){ +// const [kingRow, kingCol] = find_pieces('k', board); +// } +// else{ +// const [kingRow, kingCol] = find_pieces('K', board); +// } +// let casesAttaquees = []; +// let allPositions = []; + +// tour.currentPlayer.pieces.forEach(piece => { +// const piecePosition = find_pieces(piece, board); // Trouve la position de la pièce +// allPositions.push(piecePosition); +// }); +// // Parcourt chaque pièce du joueur courant +// tour.currentPlayer.pieces.forEach(piece => { +// const pieceMoves = highlightMoves(piece, board, ); // On suppose que cette fonction renvoie un tableau de cases accessibles + +// // Ajoute chaque case attaquée par la pièce aux cases attaquées +// casesAttaquees = casesAttaquees.concat(pieceMoves); +// }); + +// // Vérifie si le roi ennemi est attaqué +// return casesAttaquees.some(([row, col]) => row === kingRow && col === kingCol); +// } function movePiece(piece, newRow, newCol) { if (!piece) return; // Vérifier si le mouvement est valide - const validMoves = highlightMoves(currentPlayer,piece, selectedPosition.row, selectedPosition.col); + const validMoves = highlightMoves(tour,piece, selectedPosition.row, selectedPosition.col); // Vérifier que validMoves est un tableau et qu'il contient des objets avec { row, col } const isValidMove = Array.isArray(validMoves) && validMoves.some(m => m.row === newRow && m.col === newCol); @@ -578,7 +611,11 @@ function movePiece(piece, newRow, newCol) { selectedPiece =null; selectedPosition = null; - currentPlayer=(currentPlayer+1)%2; + //currentPlayer=(currentPlayer+1)%2; + [tour.currentPlayer, tour.ennemyPlayer] = [tour.ennemyPlayer, tour.currentPlayer]; + // if (echec(tour,board)===true){ + // console.log('echeeeeeeeeecs') + // } // Redessiner le plateau draw(); } else { -- GitLab