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