Initial commit: 网页联机狼人杀(FastAPI+WebSocket 后端 / React+TS+Sass 前端)
This commit is contained in:
commit
7f5ea6bee8
55 files changed
+6999
No files matched your search
@@ -0,0 +1,63 @@
|
||||
"""角色定义。"""
|
||||
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
|
||||
Reference in new issue
Block a user