From 99d24daff2ebabe867713c702bda4b93f8165d8e Mon Sep 17 00:00:00 2001 From: Bangara Raju Kottedi Date: Fri, 30 Jan 2026 21:44:39 +0530 Subject: [PATCH] Enhance pawn movement logic to allow attackers to get another turn when beating opponent pawns; refactor beatPawns method to return count of beaten pawns --- backend/handlers/gameHandler.js | 11 ++++++----- backend/models/room.js | 10 +++++++--- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/backend/handlers/gameHandler.js b/backend/handlers/gameHandler.js index 2629c54..4010fa5 100644 --- a/backend/handlers/gameHandler.js +++ b/backend/handlers/gameHandler.js @@ -12,12 +12,13 @@ module.exports = socket => { if (isMoveValid(req.session, pawn, room)) { const newPositionOfMovedPawn = pawn.getPositionAfterMove(room.rolledNumber); room.changePositionOfPawn(pawn, newPositionOfMovedPawn); - room.beatPawns(newPositionOfMovedPawn, req.session.color); - // If player rolled a 6 they get another turn: keep same player but reset turn timer - if (room.rolledNumber !== 6) { - room.changeMovingPlayer(); - } else { + const beaten = room.beatPawns(newPositionOfMovedPawn, req.session.color); + // If pawn killed any opponent pawns, attacker gets another turn. + // Also a roll of 6 grants another turn. + if (beaten > 0 || room.rolledNumber === 6) { room.resetTurnForSamePlayer(); + } else { + room.changeMovingPlayer(); } const winner = room.getWinner(); if (winner) { diff --git a/backend/models/room.js b/backend/models/room.js index 3f50285..d3877d5 100644 --- a/backend/models/room.js +++ b/backend/models/room.js @@ -49,16 +49,20 @@ const RoomSchema = new mongoose.Schema({ RoomSchema.methods.beatPawns = function (position, attackingPawnColor) { // Do not beat pawns on safe/colored positions if (isSafePosition(position)) { - return; + return 0; } - + let beatenCount = 0; const pawnsOnPosition = this.pawns.filter(pawn => pawn.position === position); pawnsOnPosition.forEach(pawn => { if (pawn.color !== attackingPawnColor) { const index = this.getPawnIndex(pawn._id); - this.pawns[index].position = this.pawns[index].basePos; + if (index !== -1 && this.pawns[index].position !== this.pawns[index].basePos) { + this.pawns[index].position = this.pawns[index].basePos; + beatenCount++; + } } }); + return beatenCount; }; RoomSchema.methods.changeMovingPlayer = function () {