diff --git a/README.md b/README.md
index 9f12067..e83868b 100644
--- a/README.md
+++ b/README.md
@@ -18,7 +18,7 @@ This project is part of the 42 School Common Core curriculum. Its purpose is to
| Module | Nb point | state|
| ------ | -------- | ---- |
-| Multiplayer | 2 | 🚧
+| Multiplayer | 2 | 🏁 |
| Remote | 2 | 🚧
| Bootstrap | 1 | 🏁 |
| Django | 2 | 🏁 |
diff --git a/frontend/static/js/api/game/Game.js b/frontend/static/js/api/game/Game.js
index dc193bb..4c1b830 100644
--- a/frontend/static/js/api/game/Game.js
+++ b/frontend/static/js/api/game/Game.js
@@ -290,8 +290,11 @@ class Game
leave()
{
- this._socket.close();
- this._socket = undefined;
+ if (this._socket)
+ {
+ this._socket.close();
+ this._socket = undefined;
+ }
}
}
diff --git a/frontend/static/js/views/MatchMakingView.js b/frontend/static/js/views/MatchMakingView.js
index 46e8337..40f9922 100644
--- a/frontend/static/js/views/MatchMakingView.js
+++ b/frontend/static/js/views/MatchMakingView.js
@@ -91,7 +91,7 @@ export default class extends AbstractAuthenticatedView {
});
let update = () => {
- if (input.value < 2)
+ if (input.value < 2 || input.value > 4)
button.disabled = true;
else
button.disabled = false;
@@ -106,7 +106,7 @@ export default class extends AbstractAuthenticatedView {
async getHtml() {
return `
Select mode
-
+
diff --git a/games/objects/Game.py b/games/objects/Game.py
index 718ad36..889636c 100644
--- a/games/objects/Game.py
+++ b/games/objects/Game.py
@@ -43,7 +43,7 @@ class Game(AbstractRoom):
players_id: list[int] = self.model.get_players_id()
- nb_sides = len(players_id) * 2
+ nb_sides = 4
polygon: list[Point] = []
@@ -60,18 +60,24 @@ class Game(AbstractRoom):
for i in range(nb_sides):
segments.append(Segment(polygon[i], polygon[(i + 1) % nb_sides]))
- self.players: list[Player] = []
- for i, player_id in enumerate(players_id):
- player = Player(self, player_id, None, segments[i * 2])
- self.players.append(player)
+ self.walls: list[Wall]
+ self.players: list[Player]
+
+ nb_players: int = len(players_id)
+ if (nb_players == 2):
+ self.players = [Player(self, players_id[0], None, segments[0]), Player(self, players_id[1], None, segments[2])]
+ self.walls = [Wall(segments[1]), Wall(segments[3])]
+ else:
+ self.players = []
+ self.walls = []
+ for i, side in enumerate(range(4)):
+ if (i < nb_players):
+ self.players.append(Player(self, players_id[i], None, segments[i]))
+ else:
+ self.walls.append(Wall(segments[i]))
self.spectators: list[Spectator] = []
- self.walls: list[Wall] = []
-
- for i in range(1, nb_sides, 2):
- self.walls.append(Wall(segments[i]))
-
self._updated_players: list[Player] = []
self.game_id: int = game_id
@@ -103,14 +109,12 @@ class Game(AbstractRoom):
self.broadcast("goal", {"player_id": goal_taker.user_id,
"timestamp": timestamp})
-
if (len(goal_taker.score) >= config.GAME_MAX_SCORE):
connected_players: list[Player] = self.get_players_connected()
if (len(connected_players) == 2):
self.finish(connected_players[not connected_players.index(goal_taker)])
else:
goal_taker.eliminate()
-
def get_player_by_user_id(self, user_id: int) -> Player:
for player in self.players:
diff --git a/matchmaking/consumers.py b/matchmaking/consumers.py
index 8480d26..e6375f8 100644
--- a/matchmaking/consumers.py
+++ b/matchmaking/consumers.py
@@ -29,9 +29,9 @@ class MatchMaking(WebsocketConsumer):
waiting_room: WaitingRoom = normal.get(self.mode)
waiting_room.append(Waiter(user.pk, self))
- if (self.mode < 2):
+ if (self.mode < 2 or self.mode > 4):
data: dict = {
- "detail": "The mode must be > 1.",
+ "detail": "The mode must be > 1 and < 4.",
}
self.send(json.dumps(data))
self.disconnect(1000)