"""玩家实体:人类(持 WebSocket 连接)或 AI。""" from __future__ import annotations import secrets from fastapi import WebSocket from .roles import Role class Player: def __init__(self, seat: int, name: str, is_ai: bool = False) -> None: self.seat = seat self.name = name self.is_ai = is_ai self.token = secrets.token_hex(8) self.role: Role | None = None self.alive = True self.ws: WebSocket | None = None # AI 恒为 None self.speaking = False # 当前正在发言(仅用于 UI 高亮) self.persona: str = "" # AI 性格(LLM 提示词用) # ------------------------------------------------------------------ @property def connected(self) -> bool: return self.is_ai or self.ws is not None def bind_ws(self, ws: WebSocket) -> None: self.ws = ws def unbind_ws(self, ws: WebSocket) -> None: if self.ws is ws: self.ws = None def reset_for_new_game(self, role: Role) -> None: self.role = role self.alive = True self.speaking = False