refactored frontend

This commit is contained in:
Wenszel
2023-12-08 17:25:51 +01:00
parent f318afe071
commit f87938ae08
26 changed files with 407 additions and 313 deletions
+1 -7
View File
@@ -23,14 +23,8 @@ const createNewRoom = data => {
return room;
};
const findPlayer = async sessionID => {
const player = await Room.findOne({ 'players.sessionID': sessionID }).exec();
console.log(player);
return await Room.findOne({ 'players.sessionID': sessionID }).exec();
};
Room.watch().on('change', async data => {
sendToPlayersData(await getRoom(data.documentKey._id));
});
module.exports = { getRoom, getRooms, updateRoom, getJoinableRoom, createNewRoom, findPlayer };
module.exports = { getRoom, getRooms, updateRoom, getJoinableRoom, createNewRoom };
+1 -2
View File
@@ -1,6 +1,5 @@
const { getRoom, updateRoom } = require('../controllers/roomController');
const { sendToPlayersRolledNumber } = require('../socket/emits');
const { getPawnPositionAfterMove } = require('../utils/functions');
const { rollDice, isMoveValid } = require('./handlersFunctions');
module.exports = socket => {
@@ -10,7 +9,7 @@ module.exports = socket => {
const room = await getRoom(req.session.roomId);
const pawn = room.getPawn(pawnId);
if (isMoveValid(req.session, pawn, room)) {
const newPositionOfMovedPawn = getPawnPositionAfterMove(room.rolledNumber, pawn);
const newPositionOfMovedPawn = pawn.getPositionAfterMove(room.rolledNumber);
room.changePositionOfPawn(pawn, newPositionOfMovedPawn);
room.beatPawns(newPositionOfMovedPawn, req.session.color);
room.changeMovingPlayer();
+1 -1
View File
@@ -1,5 +1,5 @@
const { getRooms, getRoom, updateRoom, createNewRoom } = require('../controllers/roomController');
const { sendToOnePlayerRooms, sendToOnePlayerData, sendToPlayersData } = require('../socket/emits');
const { sendToOnePlayerRooms, sendToOnePlayerData } = require('../socket/emits');
module.exports = socket => {
const req = socket.request;
+61 -3
View File
@@ -2,8 +2,6 @@ const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const { getPawnPositionAfterMove } = require('../utils/functions');
const PawnSchema = new Schema({
color: String,
basePos: Number,
@@ -15,10 +13,70 @@ PawnSchema.methods.canMove = function (rolledNumber) {
return true;
}
// (if player's pawn is near finish line) if the move does not go beyond the win line
if (this.position !== getPawnPositionAfterMove(rolledNumber, this) && this.position !== this.basePos) {
if (this.position !== this.getPositionAfterMove(rolledNumber) && this.position !== this.basePos) {
return true;
}
return false;
};
PawnSchema.methods.getPositionAfterMove = function (rolledNumber) {
const { position, color } = this;
switch (color) {
case 'red':
if (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 (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 (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 (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 = PawnSchema;
+18 -3
View File
@@ -1,6 +1,5 @@
const mongoose = require('mongoose');
const { colors } = require('../utils/constants');
const { getPawnPositionAfterMove, getStartPositions } = require('../utils/functions');
const { makeRandomMove } = require('../handlers/handlersFunctions');
const PawnSchema = require('./pawn');
const PlayerSchema = require('./player');
@@ -16,7 +15,23 @@ const RoomSchema = new mongoose.Schema({
timeoutID: Number,
rolledNumber: Number,
players: [PlayerSchema],
pawns: { type: [PawnSchema], default: getStartPositions() },
pawns: {
type: [PawnSchema],
default: () => {
const startPositions = [];
for (let i = 0; i < 16; i++) {
let pawn = {};
pawn.basePos = i;
pawn.position = i;
if (i < 4) pawn.color = colors[0];
else if (i < 8) pawn.color = colors[1];
else if (i < 12) pawn.color = colors[2];
else if (i < 16) pawn.color = colors[3];
startPositions.push(pawn);
}
return startPositions;
},
},
});
RoomSchema.methods.beatPawns = function (position, attackingPawnColor) {
@@ -44,7 +59,7 @@ RoomSchema.methods.changeMovingPlayer = function () {
};
RoomSchema.methods.movePawn = function (pawn) {
const newPositionOfMovedPawn = getPawnPositionAfterMove(this.rolledNumber, pawn);
const newPositionOfMovedPawn = pawn.getPositionAfterMove(this.rolledNumber);
this.changePositionOfPawn(pawn, newPositionOfMovedPawn);
this.beatPawns(newPositionOfMovedPawn, pawn.color);
};
-75
View File
@@ -1,75 +0,0 @@
const { colors } = require('./constants');
function getStartPositions() {
const startPositions = [];
for (let i = 0; i < 16; i++) {
let pawn = {};
pawn.basePos = i;
pawn.position = i;
if (i < 4) pawn.color = colors[0];
else if (i < 8) pawn.color = colors[1];
else if (i < 12) pawn.color = colors[2];
else if (i < 16) pawn.color = colors[3];
startPositions.push(pawn);
}
return startPositions;
}
function getPawnPositionAfterMove(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 = { getStartPositions, getPawnPositionAfterMove };