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 () {