From 7230c9a15994f7a62ccd0f0c71d345211be21b77 Mon Sep 17 00:00:00 2001
From: Adam <adam.elarouti@etu.ec-lyon.fr>
Date: Sun, 30 Mar 2025 23:50:41 +0200
Subject: [PATCH] vrai dialogue entre iencli

---
 app.js          |  9 +++---
 htdocs/index.js | 77 ++++++++++++++++++++++++-------------------------
 2 files changed, 42 insertions(+), 44 deletions(-)

diff --git a/app.js b/app.js
index 9379419..2ec5012 100644
--- a/app.js
+++ b/app.js
@@ -5,7 +5,7 @@ const express = require('express');
 const app = express();
 const http = require('http').createServer(app);
 const path = require('path');
-const port = 8080;
+const port = 8060;
 
 const io = require('socket.io')(http);
 
@@ -61,12 +61,13 @@ io.on('connection', (socket) => {
     socket.on('get rooms', () => {
         io.to(socket.id).emit('list rooms', rooms);
     });
+    socket.on('play', (data) => {
+        console.log(`[Server] Play reçu : ${JSON.stringify(data)}`);  // Debugging
 
-    socket.on('play', (g) => {
-        console.log(g);
-        socket.broadcast.emit('play', g); // On renvoie l'objet complet aux autres joueurs
+        socket.broadcast.emit('play', data);  // On diffuse à tous les clients
     });
 
+
     socket.on('play again', (roomId) => {
         const room = rooms.find(r => r.id === roomId);
 
diff --git a/htdocs/index.js b/htdocs/index.js
index d98bf60..e50f344 100644
--- a/htdocs/index.js
+++ b/htdocs/index.js
@@ -107,18 +107,18 @@ socket.on('start game', (players) => {
 });
 
 
-socket.on('play', (f) => {
-    console.log(f);
-    console.log(board);
-    
-    player.playedMove=f;
-    console.log(player.playedMove);
-    draw(player);
+socket.on('play', (moveData) => {
 
 
-    // if (ennemyPlayer.socketId !== player.socketId && !ennemyPlayer.turn) {
-        
-    //     player.playedMove = ennemyPlayer.playedMove;
+    console.log("[Client] Mouvement reçu : ", moveData.move.to.x, 'et', moveData.move.to.y,'et', currentPlayer, 'et', selectedPosition);
+    selectedPiece = moveData.move.piece;
+    row=moveData.move.from.x;
+    col=moveData.move.from.y;
+    newRow=moveData.move.to.x;
+    newCol=moveData.move.to.y;
+    selectedPosition = { row,col };
+    // Ne remplace PAS l'échiquier complet, mais applique le coup reçu
+    movePiece(moveData.move.piece, newRow, newCol);  // Applique le coup reçu sur l'échiquier local et redessine l'échiquier
 
     //     if (ennemyPlayer.win) {
     //         setTurnMessage('alert-info', 'alert-danger', `C'est perdu ! <b>${ennemyPlayer.username}</b> a gagné !`);
@@ -161,7 +161,7 @@ function startGame(players) {
     waitingArea.classList.add('d-none');
     turnMsg.classList.remove('d-none');
     const ennemyPlayer = players.find(p => p.socketId != player.socketId);
-    draw(ennemyPlayer);
+    draw();
     ennemyUsername = ennemyPlayer.username;
 
     if (player.host && player.turn) {
@@ -230,10 +230,10 @@ function drawBoard() {
 }
 
 // Dessiner les pièces sur l'échiquier
-function drawPieces(player) {
+function drawPieces() {
     for (let row = 0; row < 8; row++) {
         for (let col = 0; col < 8; col++) {
-            const piece = player.playedMove[row][col];
+            const piece = board[row][col];
             if (piece !== "") {
                 let img = new Image();
                 img.src = "chess_pieces/" + pieceImages[piece];
@@ -249,14 +249,13 @@ function drawPieces(player) {
 }
 
 // Fonction principale pour dessiner l'échiquier
-function draw(player) {
+function draw() {
     drawBoard();
-    drawPieces(player);
+    drawPieces();
 }
 
 // Appeler la fonction pour afficher l'échiquier
-draw(player);
-
+draw();
 
 //Mouvement des pièces sur l'échiquier 
 
@@ -268,19 +267,26 @@ canvas.addEventListener("click", function(event) {
     const row = Math.floor(event.offsetY / size);
 
     if (selectedPiece) {
-        movePiece(player,row, col);
+        socket.emit('play', {
+            move: {
+                from:{ x:selectedPosition.row, y:selectedPosition.col
+                },
+                to: { x: row, y: col },        // Position d'arrivée
+                piece: selectedPiece            // Nom de la pièce (ex: "pion", "tour", etc.)
+            }
+        });
+        movePiece(selectedPiece, row, col);
     } else {
         selectPiece(row, col);
     }
 });
 
 function selectPiece(row, col) {
-    const piece = board[row][col];
-
-    if (piece !== "" && pieces_joueurs[currentPlayer].includes(piece)) {  // Vérifier que ce n'est pas une case vide
-        selectedPiece = piece;
-        selectedPosition = { row, col };
-        highlightMoves(currentPlayer,piece, 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
+        selectedPiece = current_piece;
+        highlightMoves(currentPlayer,current_piece, row, col);
     }
 }
 
@@ -554,39 +560,30 @@ function highlightMoves(player,piece, row, col) {
 
 
 
-function movePiece(player,newRow, newCol) {
-    if (!selectedPiece) return;
+function movePiece(piece, newRow, newCol) {
+    if (!piece) return;
 
     // Vérifier si le mouvement est valide
-    const validMoves = highlightMoves(currentPlayer,selectedPiece, selectedPosition.row, selectedPosition.col);
-
+    const validMoves = highlightMoves(currentPlayer,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);
 
     if (isValidMove) {
         // Déplacer la pièce
-        board[newRow][newCol] = selectedPiece;
+        board[newRow][newCol] = piece;
         board[selectedPosition.row][selectedPosition.col] = "";
 
         // Réinitialiser la pièce sélectionnée
-        selectedPiece = null;
+
+        selectedPiece =null;
         selectedPosition = null;
         currentPlayer=(currentPlayer+1)%2;
         // Redessiner le plateau
-        drawBoard();
-        drawPieces(player);
-        player.playedMove=board;
-        console.log("[Client] Envoi des données : ", {
-            socketId: player.socketId,
-            playedMove: board // ou ce qui est nécessaire pour l'échiquier
-        });
-        socket.emit('play', player.playedMove // ou quel que soit le nom de ta variable représentant l'échiquier
-        );
+        draw();
     } else {
         // Si le mouvement est invalide, tu pourrais afficher un message
         console.log("Mouvement invalide !");
         selectedPiece=null;
-        
     }
 }
-- 
GitLab