41 lines
1.0 KiB
Python
41 lines
1.0 KiB
Python
"""板子(角色配置)预设与校验。"""
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass, field
|
|
|
|
from .roles import Role
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class Board:
|
|
key: str
|
|
name: str
|
|
roles: list[Role] = field(default_factory=list)
|
|
|
|
@property
|
|
def seat_count(self) -> int:
|
|
return len(self.roles)
|
|
|
|
|
|
BOARDS: dict[str, Board] = {
|
|
"classic12": Board(
|
|
"classic12", "经典12人局(4狼 4民 预女猎守)",
|
|
[Role.WEREWOLF] * 4 + [Role.VILLAGER] * 4
|
|
+ [Role.SEER, Role.WITCH, Role.HUNTER, Role.GUARD],
|
|
),
|
|
"standard10": Board(
|
|
"standard10", "标准10人局(3狼 3民 预女猎守)",
|
|
[Role.WEREWOLF] * 3 + [Role.VILLAGER] * 3
|
|
+ [Role.SEER, Role.WITCH, Role.HUNTER, Role.GUARD],
|
|
),
|
|
"quick9": Board(
|
|
"quick9", "快节奏9人局(3狼 3民 预女猎)",
|
|
[Role.WEREWOLF] * 3 + [Role.VILLAGER] * 3
|
|
+ [Role.SEER, Role.WITCH, Role.HUNTER],
|
|
),
|
|
}
|
|
|
|
|
|
def get_board(key: str) -> Board:
|
|
return BOARDS.get(key, BOARDS["classic12"])
|