diff --git a/backend/routes/game.js b/backend/routes/game.js index 16e4d08..d40cfc3 100644 --- a/backend/routes/game.js +++ b/backend/routes/game.js @@ -13,9 +13,10 @@ router.post('/move', function (req, res){ if(doc){ // Updating position const updatedPawn = doc.pawns.findIndex(pawn => pawn._id == req.body.pawnId); - doc.pawns[updatedPawn].position = req.body.position; + doc.pawns[updatedPawn].position = getPosition(req.session.rolledNumber, doc.pawns[updatedPawn]); + console.log(getPosition(req.session.rolledNumber, doc.pawns[updatedPawn])); // Capturing a pawn - const pawnsOnPos = doc.pawns.filter( pawn => pawn.position == req.body.position); + const pawnsOnPos = doc.pawns.filter( pawn => pawn.position == doc.pawns[updatedPawn].position); pawnsOnPos.forEach( pawn => { if(pawn.color !== req.session.color){ const index = doc.pawns.findIndex(i => i._id === pawn._id); @@ -33,6 +34,7 @@ router.post('/move', function (req, res){ } // Updating timer doc.nextMoveTime = Date.now()+15000; + // Pushing above data to database RoomModel.findOneAndUpdate({_id: req.session.roomId}, doc, function(err, doc){ res.send("Correctly Moved!"); }); @@ -40,5 +42,64 @@ router.post('/move', function (req, res){ }); }); +function getPosition(rolledNumber, pawn){ + const { position, color } = pawn; + switch (color){ + case 'red': + if(pawn.position + rolledNumber <= 73){ + if(position >= 0 && position <= 3) { + return 16; + }else if(position <= 66 && position + rolledNumber >= 67){ + return position + rolledNumber + 1; + }else{ + return position + rolledNumber; + } + }else{ + return position; + } + case 'blue': + if(pawn.position + rolledNumber <= 79){ + if(position >= 4 && position <= 7){ + return 55; + }else if(position <= 67 && position + rolledNumber > 67){ + return position + rolledNumber - 52; + }else if(position <= 53 && position + rolledNumber >= 54){ + return position + rolledNumber + 20; + }else{ + return position + rolledNumber; + } + }else{ + return position; + } + case 'green': + if(pawn.position + rolledNumber <= 85){ + if(position >= 8 && position <= 11){ + return 42; + }else if(position <= 67 && position + rolledNumber > 67){ + return position + rolledNumber - 52; + }else if(position <= 40 && position + rolledNumber >= 41){ + return position + rolledNumber + 39; + }else{ + return position + rolledNumber; + } + }else{ + return position; + } + case 'yellow': + if(pawn.position + rolledNumber <= 85){ + if(position >= 12 && position <= 15){ + return 29; + }else if(position <= 67 && position + rolledNumber > 67){ + return position + rolledNumber - 52; + }else if(position <= 27 && position + rolledNumber >= 28){ + return position + rolledNumber + 58; + }else{ + return position + rolledNumber; + } + }else{ + return position; + } + } +}; module.exports = router; \ No newline at end of file diff --git a/backend/routes/player.js b/backend/routes/player.js index 6cd61d6..b5108c3 100644 --- a/backend/routes/player.js +++ b/backend/routes/player.js @@ -18,7 +18,7 @@ var changeReadyState = (req, res, exit) =>{ } if(updatedPlayers.filter(player => player.ready).length >= 2){ updatedDoc.started = true; - updatedDoc.players = updatedDoc.players.map(player => player.ready === true); + updatedDoc.players.forEach(player => player.ready = true); updatedDoc.nextMoveTime = Date.now() + 15000; updatedDoc.players[0].nowMoving = true; } diff --git a/backend/routes/room.js b/backend/routes/room.js index 591194b..60bc1bc 100644 --- a/backend/routes/room.js +++ b/backend/routes/room.js @@ -59,7 +59,7 @@ router.post('/add', function (req, res) { updateObj.full = true; // Room is full updateObj.started = true; // Game started updateObj.nextMoveTime = Date.now() + 15000; - updateObj.players = updateObj.players.map(player => player.ready === true); + updateObj.players.forEach(player => player.ready = true); updateObj.players[0].nowMoving = true; //First joined player moving updateObj.pawns = getStartPositions(); } diff --git a/src/components/game-board-components/Dice.jsx b/src/components/game-board-components/Dice.jsx index 3c1a893..0f768b4 100644 --- a/src/components/game-board-components/Dice.jsx +++ b/src/components/game-board-components/Dice.jsx @@ -11,7 +11,7 @@ const Dice = ({ rolledNumberCallback, nowMoving }) => { const [rolledNumber, setRolledNumber] = useState(); const [images] = useState([one, two, three, four, five, six]); const handleRoll = () => { - axios.get('http://localhost:3000/game/roll').then(response => { + axios.get('http://localhost:3000/game/roll', {withCredentials: true}).then(response => { const utterance = new SpeechSynthesisUtterance(response.data.number); speechSynthesis.speak(utterance); setRolledNumber(response.data.number); diff --git a/src/components/game-board-components/Map.jsx b/src/components/game-board-components/Map.jsx index 199e281..586427e 100644 --- a/src/components/game-board-components/Map.jsx +++ b/src/components/game-board-components/Map.jsx @@ -55,7 +55,7 @@ const Map = ({ pawns, nowMoving, rolledNumber }) => { y = event.clientY - rect.top; for(const pawn of pawns){ if (ctx.isPointInPath(pawn.circle, x, y)) { - axios.post('http://localhost:3000/game/move', {pawnId: pawn._id, position: hintPawn.position}, {withCredentials: true}) + axios.post('http://localhost:3000/game/move', {pawnId: pawn._id}, {withCredentials: true, mode: 'cors'}) .then(() => { setHintPawn(null); });