game: add: support multiplayer
This commit is contained in:
parent
f567943894
commit
9f30f5c3d1
@ -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 | 🏁 |
|
||||
|
@ -290,8 +290,11 @@ class Game
|
||||
|
||||
leave()
|
||||
{
|
||||
this._socket.close();
|
||||
this._socket = undefined;
|
||||
if (this._socket)
|
||||
{
|
||||
this._socket.close();
|
||||
this._socket = undefined;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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 `
|
||||
<h1>Select mode</h1>
|
||||
<input type="number" value="2" min="1" id="nb_players-input">
|
||||
<input type="number" value="2" min="1" max="4" id="nb_players-input">
|
||||
<input type="button" value="Find a game" id="button">
|
||||
<input type="button" value="2D" id="game-mode">
|
||||
<span id="detail"></span>
|
||||
|
@ -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:
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user