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|
|
| Module | Nb point | state|
|
||||||
| ------ | -------- | ---- |
|
| ------ | -------- | ---- |
|
||||||
| Multiplayer | 2 | 🚧
|
| Multiplayer | 2 | 🏁 |
|
||||||
| Remote | 2 | 🚧
|
| Remote | 2 | 🚧
|
||||||
| Bootstrap | 1 | 🏁 |
|
| Bootstrap | 1 | 🏁 |
|
||||||
| Django | 2 | 🏁 |
|
| Django | 2 | 🏁 |
|
||||||
|
@ -290,8 +290,11 @@ class Game
|
|||||||
|
|
||||||
leave()
|
leave()
|
||||||
{
|
{
|
||||||
this._socket.close();
|
if (this._socket)
|
||||||
this._socket = undefined;
|
{
|
||||||
|
this._socket.close();
|
||||||
|
this._socket = undefined;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ export default class extends AbstractAuthenticatedView {
|
|||||||
});
|
});
|
||||||
|
|
||||||
let update = () => {
|
let update = () => {
|
||||||
if (input.value < 2)
|
if (input.value < 2 || input.value > 4)
|
||||||
button.disabled = true;
|
button.disabled = true;
|
||||||
else
|
else
|
||||||
button.disabled = false;
|
button.disabled = false;
|
||||||
@ -106,7 +106,7 @@ export default class extends AbstractAuthenticatedView {
|
|||||||
async getHtml() {
|
async getHtml() {
|
||||||
return `
|
return `
|
||||||
<h1>Select mode</h1>
|
<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="Find a game" id="button">
|
||||||
<input type="button" value="2D" id="game-mode">
|
<input type="button" value="2D" id="game-mode">
|
||||||
<span id="detail"></span>
|
<span id="detail"></span>
|
||||||
|
@ -43,7 +43,7 @@ class Game(AbstractRoom):
|
|||||||
|
|
||||||
players_id: list[int] = self.model.get_players_id()
|
players_id: list[int] = self.model.get_players_id()
|
||||||
|
|
||||||
nb_sides = len(players_id) * 2
|
nb_sides = 4
|
||||||
|
|
||||||
polygon: list[Point] = []
|
polygon: list[Point] = []
|
||||||
|
|
||||||
@ -60,18 +60,24 @@ class Game(AbstractRoom):
|
|||||||
for i in range(nb_sides):
|
for i in range(nb_sides):
|
||||||
segments.append(Segment(polygon[i], polygon[(i + 1) % nb_sides]))
|
segments.append(Segment(polygon[i], polygon[(i + 1) % nb_sides]))
|
||||||
|
|
||||||
self.players: list[Player] = []
|
self.walls: list[Wall]
|
||||||
for i, player_id in enumerate(players_id):
|
self.players: list[Player]
|
||||||
player = Player(self, player_id, None, segments[i * 2])
|
|
||||||
self.players.append(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.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._updated_players: list[Player] = []
|
||||||
|
|
||||||
self.game_id: int = game_id
|
self.game_id: int = game_id
|
||||||
@ -103,7 +109,6 @@ class Game(AbstractRoom):
|
|||||||
|
|
||||||
self.broadcast("goal", {"player_id": goal_taker.user_id,
|
self.broadcast("goal", {"player_id": goal_taker.user_id,
|
||||||
"timestamp": timestamp})
|
"timestamp": timestamp})
|
||||||
|
|
||||||
if (len(goal_taker.score) >= config.GAME_MAX_SCORE):
|
if (len(goal_taker.score) >= config.GAME_MAX_SCORE):
|
||||||
connected_players: list[Player] = self.get_players_connected()
|
connected_players: list[Player] = self.get_players_connected()
|
||||||
if (len(connected_players) == 2):
|
if (len(connected_players) == 2):
|
||||||
@ -111,7 +116,6 @@ class Game(AbstractRoom):
|
|||||||
else:
|
else:
|
||||||
goal_taker.eliminate()
|
goal_taker.eliminate()
|
||||||
|
|
||||||
|
|
||||||
def get_player_by_user_id(self, user_id: int) -> Player:
|
def get_player_by_user_id(self, user_id: int) -> Player:
|
||||||
for player in self.players:
|
for player in self.players:
|
||||||
if (player.user_id == user_id):
|
if (player.user_id == user_id):
|
||||||
|
@ -29,9 +29,9 @@ class MatchMaking(WebsocketConsumer):
|
|||||||
waiting_room: WaitingRoom = normal.get(self.mode)
|
waiting_room: WaitingRoom = normal.get(self.mode)
|
||||||
waiting_room.append(Waiter(user.pk, self))
|
waiting_room.append(Waiter(user.pk, self))
|
||||||
|
|
||||||
if (self.mode < 2):
|
if (self.mode < 2 or self.mode > 4):
|
||||||
data: dict = {
|
data: dict = {
|
||||||
"detail": "The mode must be > 1.",
|
"detail": "The mode must be > 1 and < 4.",
|
||||||
}
|
}
|
||||||
self.send(json.dumps(data))
|
self.send(json.dumps(data))
|
||||||
self.disconnect(1000)
|
self.disconnect(1000)
|
||||||
|
Loading…
Reference in New Issue
Block a user