diff --git a/Dockerfile b/Dockerfile index d284401..de36a4e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,4 +23,4 @@ EXPOSE 5000 # Définir PYTHONPATH pour que les imports relatifs fonctionnent ENV PYTHONPATH=/app:$PYTHONPATH -CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:5000", "api:app"] +CMD ["gunicorn", "-w", "1", "-b", "0.0.0.0:5000", "api:app"] diff --git a/backend/src/api.py b/backend/src/api.py index 8e19376..074c055 100644 --- a/backend/src/api.py +++ b/backend/src/api.py @@ -128,6 +128,7 @@ def start_game(): def game_state(): global current_game with game_lock: + print(f"[API] /api/game/state called. current_game is {'None' if current_game is None else 'OK'}") if current_game is None: return jsonify({'error': 'Aucune partie en cours'}), 400 return jsonify({'state': current_game.get_state()}) @@ -186,5 +187,15 @@ def game_get_actions(player_id): actions = current_game.get_possible_actions(player_id) return jsonify({'actions': actions}) +@app.route('/api/play_draw', methods=['POST']) +def play_draw_api(): + global current_game + with game_lock: + print('[API] /api/play_draw called') + if current_game is None: + return jsonify({'error': 'Aucune partie en cours'}), 400 + current_game.play_draw() + return jsonify({'state': current_game.get_state()}) + if __name__ == '__main__': app.run(debug=True, port=5000) diff --git a/backend/src/game/game.py b/backend/src/game/game.py index b451b70..524987f 100644 --- a/backend/src/game/game.py +++ b/backend/src/game/game.py @@ -61,10 +61,13 @@ class Game: self.hidden_discards_bots = [[] for _ in range(3)] def play_draw(self): - if self.turn == 0: - self.hand_player.draw(self.wall.draw()) - self.has_draw = True - print(f"player {self.turn} has draw") + print(f"[Game] play_draw called: has_draw={self.has_draw}, turn={self.turn}") + if not self.has_draw: + if self.turn == 0: + tile = self.wall.draw() + self.hand_player.draw_tile(tile) + self.has_draw = True + print(f"Change has_draw to {self.has_draw}") def draw_tile(self, hand: Hand): tile = self.wall.draw() @@ -81,14 +84,13 @@ class Game: def get_state(self): """Retourne l'état actuel de la partie (joueurs, scores, main, etc.).""" hand_tiles = list(getattr(self.hand_player, 'tiles', [])) - if getattr(self.hand_player, 'draw', None) is not None: - hand_tiles = hand_tiles + [self.hand_player.draw] return { 'scores': list(self.scores), 'winds': list(self.winds), 'turn': int(self.turn), 'riichi': list(self.riichi), 'repeat': int(self.repeat), + 'has_draw': bool(self.has_draw), 'end': bool(self.end), 'hand_player': [ { @@ -98,7 +100,16 @@ class Game: 'svg': tile.get_img() } for tile in hand_tiles - ] + ], + 'draw': ( + { + 'id': self.hand_player.draw.id, + 'family': str(self.hand_player.draw.family), + 'value': str(self.hand_player.draw.value), + 'svg': self.hand_player.draw.get_img() + } + if self.hand_player.draw is not None else None + ) } def declare_riichi(self, player_id): diff --git a/frontend/pages/riichi/chap5.html b/frontend/pages/riichi/chap5.html index 373aace..bb3b2b7 100644 --- a/frontend/pages/riichi/chap5.html +++ b/frontend/pages/riichi/chap5.html @@ -135,6 +135,46 @@