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)