64 lines
1.9 KiB
Python
64 lines
1.9 KiB
Python
"""角色定义。"""
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from enum import Enum
|
|
|
|
|
|
class Role(str, Enum):
|
|
WEREWOLF = "werewolf"
|
|
VILLAGER = "villager"
|
|
SEER = "seer"
|
|
WITCH = "witch"
|
|
HUNTER = "hunter"
|
|
GUARD = "guard"
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class RoleInfo:
|
|
role: Role
|
|
name: str # 中文名
|
|
camp: str # "wolf" | "god" | "civilian"
|
|
emoji: str
|
|
description: str
|
|
|
|
|
|
ROLE_INFO: dict[Role, RoleInfo] = {
|
|
Role.WEREWOLF: RoleInfo(
|
|
Role.WEREWOLF, "狼人", "wolf", "🐺",
|
|
"每晚与同伴共同袭击一名玩家,白天隐藏身份,误导好人投票。",
|
|
),
|
|
Role.VILLAGER: RoleInfo(
|
|
Role.VILLAGER, "村民", "civilian", "👨🌾",
|
|
"没有主动技能,白天通过发言与投票找出狼人。",
|
|
),
|
|
Role.SEER: RoleInfo(
|
|
Role.SEER, "预言家", "god", "🔮",
|
|
"每晚查验一名玩家的阵营(好人 / 狼人),带领好人寻找狼人。",
|
|
),
|
|
Role.WITCH: RoleInfo(
|
|
Role.WITCH, "女巫", "god", "🧪",
|
|
"拥有一瓶解药和一瓶毒药。解药可救活当晚被袭击者,毒药可毒杀一名玩家,每夜只能用一瓶。首夜可自救。",
|
|
),
|
|
Role.HUNTER: RoleInfo(
|
|
Role.HUNTER, "猎人", "god", "🏹",
|
|
"被狼人袭击或被投票放逐时,可开枪带走一名玩家(被毒杀时无法开枪)。",
|
|
),
|
|
Role.GUARD: RoleInfo(
|
|
Role.GUARD, "守卫", "god", "🛡️",
|
|
"每晚守护一名玩家免受狼人袭击,不能连续两晚守护同一人。同守同救会死亡。",
|
|
),
|
|
}
|
|
|
|
WOLF_TEAM = {Role.WEREWOLF}
|
|
GOD_TEAM = {Role.SEER, Role.WITCH, Role.HUNTER, Role.GUARD}
|
|
CIVILIAN_TEAM = {Role.VILLAGER}
|
|
|
|
|
|
def role_camp(role: Role) -> str:
|
|
return ROLE_INFO[role].camp
|
|
|
|
|
|
def is_wolf(role: Role) -> bool:
|
|
return role == Role.WEREWOLF
|