diff --git a/app.js b/app.js index 39373d0f4954d3b1f399e90b6722a16991452e2d..2da8d7d46e5f88b9108a3a20c15502e7504dfe95 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); @@ -67,7 +67,9 @@ io.on('connection', (socket) => { socket.broadcast.emit('play', data); // On diffuse à tous les clients }); - + socket.on('echec', () => { + socket.broadcast.emit('echec'); + }); socket.on('play again', (roomId) => { const room = rooms.find(r => r.id === roomId); diff --git a/htdocs/index.js b/htdocs/index.js index aaf5759737911ca0e75ee3a682876a095d96456a..732b0a7904becb2ad98a5ccd9ad0b996b6b3d578 100644 --- a/htdocs/index.js +++ b/htdocs/index.js @@ -108,18 +108,20 @@ socket.on('join room', (roomId) => { }); socket.on('start game', (players) => { - console.log(players, "Le jeu commence"); + //console.log(players, "Le jeu commence"); startGame(players); - console.log(player.isBlackPlayer) + //console.log(player.isBlackPlayer) if (player.isBlackPlayer) { document.getElementById('chessboard').classList.add('black-perspective'); - console.log("échiquier inversé") + //console.log("échiquier inversé") } }); - +socket.on('echec', () => { // Fonction de callback correcte + document.getElementById("echec-message").classList.remove("d-none"); +}); socket.on('play', (moveData) => { - console.log("[Client] Mouvement reçu : ", moveData.move.to.x, 'et', moveData.move.to.y,'et', tour, '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,7 +134,7 @@ socket.on('play', (moveData) => { // Réinitialiser la pièce sélectionnée - selectedPiece =null; + selectedPiece = null; selectedPosition = null; draw() // Ne remplace PAS l'échiquier complet, mais applique le coup reçu @@ -181,7 +183,7 @@ function startGame(players) { draw(); ennemyUsername = ennemyPlayer.username; tour = {currentPlayer: player, ennemyPlayer: ennemyPlayer}; - console.log(ennemyPlayer); + //console.log(ennemyPlayer); if (player.host && player.turn) { setTurnMessage('alert-info', 'alert-success', "C'est ton tour de jouer"); } else { @@ -332,7 +334,8 @@ function highlightMoves(tour,piece, row, col) { ennemyPieces = ["t", "c", "f", "q", "k", "p"]; } let moves = []; - console.log(piece.toLowerCase() === "p"); + + if (piece.toLowerCase() === "p") { if(row===6 && player.isBlackPlayer===false){ if (board[row + 2*direction][col] === "") { @@ -604,38 +607,38 @@ function find_pieces(piece,board){ } } -// function echec(tour, board) { -// // Trouve la position du roi ennemi -// let kingRow, kingCol; -// if (player.turn === true) { -// attackingPlayer = player; -// [kingRow, kingCol] = find_pieces('k', board); // Roi noir (adverse) si c'est au joueur blanc de jouer -// } else { -// attackingPlayer = ennemyPlayer; -// [kingRow, kingCol] = find_pieces('K', board); // Roi blanc (adverse) si c'est au joueur noir de jouer -// } - -// let allPositions = []; - -// for (let i = 0; i < board.length; i++) { -// for (let j = 0; j < board[i].length; j++) { -// const piece = board[i][j]; -// if (piece) { -// const moves = highlightMoves(piece, board, i, j); -// allPositions.push({ piece, position: { i, j }, moves }); - -// // 🔍 Vérifie si un des mouvements possibles atteint le roi -// for (let move of moves) { -// if (move.i === kingRow && move.j === kingCol) { -// console.log(`Le roi est en échec par la pièce ${piece} en position (${i}, ${j})`); -// return true; // Roi est en échec -// } -// } -// } -// } -// } -// } +function echec(board) { + + // Trouve la position du roi ennemi + let piecesAttaquant = []; + let kingRow, kingCol; + let allPositions = []; + + if (player.isBlackPlayer === false) { + [kingRow, kingCol] = find_pieces("K", board); // Roi noir (adverse) si c'est au joueur blanc de jouer + piecesAttaquant = ["t", "c", "f", "q", "k", "p"]; + } else { + [kingRow, kingCol] = find_pieces("k", board); // Roi blanc (adverse) si c'est au joueur noir de jouer + piecesAttaquant = ["T", "C", "F", "Q", "K", "P"]; + } + + + for (let i = 0; i < board.length; i++) { + for (let j = 0; j < board[i].length; j++) { + const pieceAttack = board[i][j]; + + if (pieceAttack !== "" && piecesAttaquant.includes(pieceAttack)) { + moves=highlightMoves(board,pieceAttack , i, j) + for (k =0; k<moves.length;k++){ + if (moves[k].row === kingRow && moves[k].col === kingCol) return true; + } + } + } + } + return false; +} function movePiece(piece, newRow, newCol) { + document.getElementById("echec-message").classList.add("d-none"); if (!piece) return; // Vérifier si le mouvement est valide @@ -648,10 +651,10 @@ function movePiece(piece, newRow, newCol) { // Déplacer la pièce board[newRow][newCol] = piece; board[selectedPosition.row][selectedPosition.col] = ""; + console.log(echec(board)); + + - // Réinitialiser la pièce sélectionnée - console.log(selectedPosition.row,selectedPosition.col) - //currentPlayer=(currentPlayer+1)%2; socket.emit('play', { move: { @@ -661,15 +664,18 @@ function movePiece(piece, newRow, newCol) { piece: selectedPiece // Nom de la pièce (ex: "pion", "tour", etc.) } }); + + if (echec(board)){ + socket.emit('echec'); + } + setTurnMessage('alert-success', 'alert-info', `C'est au tour de <b>${ennemyUsername}</b> de jouer`) player.turn = false; selectedPiece =null; selectedPosition = null; [tour.currentPlayer, tour.ennemyPlayer] = [tour.ennemyPlayer, tour.currentPlayer]; - // if (echec(tour,board)===true){ - // console.log('echeeeeeeeeecs') - // } + // Redessiner le plateau draw(); } else { diff --git a/htdocs/page_acceuil2.html b/htdocs/page_acceuil2.html index fd5ecf11f327feda111ba511560b022331b9066f..670aae3ac8fd2150c8c3659032a4210774197cb2 100644 --- a/htdocs/page_acceuil2.html +++ b/htdocs/page_acceuil2.html @@ -88,6 +88,7 @@ </div> </div> </div> + <div id="echec-message" class="d-none">Échec !</div> <canvas id="chessboard" class="board" width="480" height="480"></canvas> <script src="./jquery/jquery.min.js"></script> <script src="./bootstrap/js/bootstrap.min.js"></script>