Documentation
¶
Index ¶
- Variables
- func GetErrorCode(err error) pb.ErrorCode
- func IsErrorCode(err error, code pb.ErrorCode) bool
- type DayResolver
- type Effect
- type Engine
- func (e *Engine) AddPlayer(id string, role pb.RoleType, camp pb.Camp)
- func (e *Engine) EndPhase() ([]*Effect, error)
- func (e *Engine) EndSubStep() ([]*Effect, error)
- func (e *Engine) GetAllowedSkills(playerID string) []pb.SkillType
- func (e *Engine) GetCurrentPhase() pb.PhaseType
- func (e *Engine) GetCurrentRound() int
- func (e *Engine) GetCurrentSubStep() int
- func (e *Engine) GetNightKillTarget() string
- func (e *Engine) GetState() *State
- func (e *Engine) GetWolfTeammates(playerID string) []string
- func (e *Engine) IsGameOver() bool
- func (e *Engine) OnEvent(handler EventHandler)
- func (e *Engine) Start() error
- func (e *Engine) StartSubStepMode() error
- func (e *Engine) SubmitSkillUse(use *SkillUse) error
- type EventHandler
- type GameConfig
- type GameError
- type GuardResolver
- type NightResolver
- type Phase
- func (p *Phase) GetAllowedSkills(phase pb.PhaseType, role pb.RoleType) []pb.SkillType
- func (p *Phase) GetAllowedSkillsForSubStep(phase pb.PhaseType, subStep int, role pb.RoleType) []pb.SkillType
- func (p *Phase) GetCurrentStepRole(phase pb.PhaseType, subStep int) pb.RoleType
- func (p *Phase) GetPhaseConfig(phase pb.PhaseType) *PhaseConfig
- func (p *Phase) GetRequiredRoles(phase pb.PhaseType) []pb.RoleType
- func (p *Phase) GetResolver(phase pb.PhaseType) Resolver
- func (p *Phase) NextPhase(current pb.PhaseType) pb.PhaseType
- func (p *Phase) NextSubPhase(current pb.PhaseType) pb.PhaseType
- func (p *Phase) ValidateSkillUse(use *SkillUse, state *State) error
- func (p *Phase) ValidateSkillUseForSubStep(use *SkillUse, state *State) error
- type PhaseConfig
- type PhaseStep
- type PlayerState
- type Resolver
- type SeerResolver
- type SkillUse
- type State
- func (s *State) AddPlayer(id string, role pb.RoleType, camp pb.Camp)
- func (s *State) ApplyEffect(effect *Effect)
- func (s *State) CheckVictory() (bool, pb.Camp)
- func (s *State) GetAlivePlayers() []*PlayerState
- func (s *State) GetAlivePlayersByCamp(camp pb.Camp) []*PlayerState
- func (s *State) GetAlivePlayersByRole(role pb.RoleType) []*PlayerState
- func (s *State) GetPlayer(id string) (*PlayerState, bool)
- func (s *State) GetWolfTeammates(playerID string) []string
- func (s *State) NextPhase(phase pb.PhaseType)
- func (s *State) ResetRoundState()
- type VoteResolver
- type WitchResolver
- type WolfResolver
Constants ¶
This section is empty.
Variables ¶
var ( ErrPlayerNotFound = &GameError{Code: pb.ErrorCode_ERROR_CODE_PLAYER_NOT_FOUND, Message: "player not found"} ErrPlayerDead = &GameError{Code: pb.ErrorCode_ERROR_CODE_PLAYER_DEAD, Message: "player is dead"} ErrTargetNotFound = &GameError{Code: pb.ErrorCode_ERROR_CODE_TARGET_NOT_FOUND, Message: "target not found"} ErrTargetDead = &GameError{Code: pb.ErrorCode_ERROR_CODE_TARGET_DEAD, Message: "target is dead"} ErrSkillNotAllowed = &GameError{Code: pb.ErrorCode_ERROR_CODE_SKILL_NOT_ALLOWED, Message: "skill not allowed in this phase"} ErrGameNotStarted = &GameError{Code: pb.ErrorCode_ERROR_CODE_GAME_NOT_STARTED, Message: "game not started"} ErrGameEnded = &GameError{Code: pb.ErrorCode_ERROR_CODE_GAME_ENDED, Message: "game has ended"} ErrInvalidPhase = &GameError{Code: pb.ErrorCode_ERROR_CODE_INVALID_PHASE, Message: "invalid phase"} )
预定义错误
Functions ¶
Types ¶
type DayResolver ¶ added in v1.0.0
type DayResolver struct{}
DayResolver 白天阶段解析器(主要处理发言,无状态变化)
func (*DayResolver) Resolve ¶ added in v1.0.0
func (r *DayResolver) Resolve(uses []*SkillUse, state *State, config *GameConfig) []*Effect
Resolve 解析白天行动(发言不产生状态变化)
type Effect ¶ added in v1.0.0
type Effect struct {
Type pb.EventType
SourceID string // 效果来源(玩家ID)
TargetID string // 效果目标(玩家ID)
Data map[string]interface{} // 附加数据
Canceled bool // 是否被取消(如被保护)
Reason string // 取消原因
}
Effect 效果 - 状态变更的描述
type Engine ¶
type Engine struct {
// contains filtered or unexported fields
}
Engine 游戏引擎(轻量状态机)
func (*Engine) EndSubStep ¶ added in v1.0.0
EndSubStep 结束当前子阶段(子步骤模式) 返回当前子阶段产生的效果
func (*Engine) GetAllowedSkills ¶ added in v1.0.0
GetAllowedSkills 获取玩家当前可用的技能
func (*Engine) GetCurrentPhase ¶ added in v1.0.0
GetCurrentPhase 获取当前阶段
func (*Engine) GetCurrentRound ¶ added in v1.0.0
GetCurrentRound 获取当前回合
func (*Engine) GetCurrentSubStep ¶ added in v1.0.0
GetCurrentSubStep 获取当前子步骤
func (*Engine) GetNightKillTarget ¶ added in v1.0.0
GetNightKillTarget 获取当晚被狼人击杀的目标(女巫可查询)
func (*Engine) GetWolfTeammates ¶ added in v1.0.0
GetWolfTeammates 获取狼人队友
func (*Engine) OnEvent ¶ added in v1.0.0
func (e *Engine) OnEvent(handler EventHandler)
OnEvent 注册事件处理器
func (*Engine) StartSubStepMode ¶ added in v1.0.0
StartSubStepMode 启动子步骤模式(从 START 进入第一个子阶段)
func (*Engine) SubmitSkillUse ¶ added in v1.0.0
SubmitSkillUse 提交技能使用
type GameConfig ¶ added in v1.0.0
type GameConfig struct {
// 规则变体
WitchCanSaveSelf bool // 女巫能否自救
GuardCanProtectSelf bool // 守卫能否自守
GuardCanRepeat bool // 守卫能否连续守同一人
SameGuardKillIsEmpty bool // 同守同杀是否空刀
// 阶段配置
Phases map[pb.PhaseType]*PhaseConfig
// 超时配置
DefaultTimeout time.Duration
}
GameConfig 游戏配置
func DefaultGameConfig ¶ added in v1.0.0
func DefaultGameConfig() *GameConfig
DefaultGameConfig 默认游戏配置
func SubStepGameConfig ¶ added in v1.0.0
func SubStepGameConfig() *GameConfig
SubStepGameConfig 子步骤模式的游戏配置
type GameError ¶ added in v1.0.0
GameError 游戏错误(实现 error 接口)
func NewGameError ¶ added in v1.0.0
NewGameError 创建游戏错误
type GuardResolver ¶ added in v1.0.0
type GuardResolver struct{}
GuardResolver 守卫阶段解析器
func NewGuardResolver ¶ added in v1.0.0
func NewGuardResolver() *GuardResolver
func (*GuardResolver) Resolve ¶ added in v1.0.0
func (r *GuardResolver) Resolve(uses []*SkillUse, state *State, config *GameConfig) []*Effect
type NightResolver ¶ added in v1.0.0
type NightResolver struct{}
NightResolver 夜晚冲突解析器
func NewNightResolver ¶ added in v1.0.0
func NewNightResolver() *NightResolver
NewNightResolver 创建夜晚解析器
func (*NightResolver) Resolve ¶ added in v1.0.0
func (r *NightResolver) Resolve(uses []*SkillUse, state *State, config *GameConfig) []*Effect
Resolve 解析夜晚技能冲突 规则优先级:
- 守卫保护
- 狼人击杀
- 女巫解药(救人)
- 女巫毒药(毒人)
- 预言家查验(不产生状态变化)
type Phase ¶ added in v1.0.0
type Phase struct {
// contains filtered or unexported fields
}
Phase 阶段管理器
func (*Phase) GetAllowedSkills ¶ added in v1.0.0
GetAllowedSkills 获取指定角色在当前阶段允许的技能
func (*Phase) GetAllowedSkillsForSubStep ¶ added in v1.0.0
func (p *Phase) GetAllowedSkillsForSubStep(phase pb.PhaseType, subStep int, role pb.RoleType) []pb.SkillType
GetAllowedSkillsForSubStep 获取指定角色在当前子步骤允许的技能
func (*Phase) GetCurrentStepRole ¶ added in v1.0.0
GetCurrentStepRole 获取当前子步骤需要行动的角色
func (*Phase) GetPhaseConfig ¶ added in v1.0.0
func (p *Phase) GetPhaseConfig(phase pb.PhaseType) *PhaseConfig
GetPhaseConfig 获取阶段配置
func (*Phase) GetRequiredRoles ¶ added in v1.0.0
GetRequiredRoles 获取当前阶段需要行动的角色
func (*Phase) GetResolver ¶ added in v1.0.0
GetResolver 获取阶段解析器
func (*Phase) NextSubPhase ¶ added in v1.0.0
NextSubPhase 计算下一子阶段(子步骤模式)
func (*Phase) ValidateSkillUse ¶ added in v1.0.0
ValidateSkillUse 验证技能使用是否合法(批量模式,检查整个阶段)
type PhaseConfig ¶ added in v1.0.0
type PhaseConfig struct {
Type pb.PhaseType // 阶段类型
Steps []PhaseStep // 步骤列表
Timeout time.Duration // 超时时间
}
PhaseConfig 阶段配置
func StandardDayPhase ¶ added in v1.0.0
func StandardDayPhase() *PhaseConfig
StandardDayPhase 标准白天阶段配置
func StandardNightPhase ¶ added in v1.0.0
func StandardNightPhase() *PhaseConfig
StandardNightPhase 标准夜晚阶段配置
func StandardVotePhase ¶ added in v1.0.0
func StandardVotePhase() *PhaseConfig
StandardVotePhase 标准投票阶段配置
type PhaseStep ¶ added in v1.0.0
type PhaseStep struct {
Role pb.RoleType // 哪个角色
Skill pb.SkillType // 使用什么技能
Order int // 执行顺序
Required bool // 是否必须行动
Multiple bool // 是否允许多个玩家(如多狼)
}
PhaseStep 阶段步骤
type PlayerState ¶
type PlayerState struct {
ID string
Role pb.RoleType
Camp pb.Camp
Alive bool
Protected bool // 本回合是否被保护
}
PlayerState 玩家状态
type Resolver ¶ added in v1.0.0
type Resolver interface {
Resolve(uses []*SkillUse, state *State, config *GameConfig) []*Effect
}
Resolver 冲突解析器接口
type SeerResolver ¶ added in v1.0.0
type SeerResolver struct{}
SeerResolver 预言家阶段解析器
func NewSeerResolver ¶ added in v1.0.0
func NewSeerResolver() *SeerResolver
func (*SeerResolver) Resolve ¶ added in v1.0.0
func (r *SeerResolver) Resolve(uses []*SkillUse, state *State, config *GameConfig) []*Effect
type SkillUse ¶ added in v1.0.0
type SkillUse struct {
PlayerID string
Skill pb.SkillType
TargetID string
Phase pb.PhaseType
Round int
}
SkillUse 技能使用记录
type State ¶ added in v1.0.0
type State struct {
Phase pb.PhaseType // 当前阶段
SubStep int // 当前子步骤(夜晚阶段使用)
Round int // 当前回合
Players map[string]*PlayerState // 玩家状态
// 夜晚临时状态(子步骤间共享)
NightKillTarget string // 狼人击杀目标(女巫可查询)
// contains filtered or unexported fields
}
State 游戏状态
func (*State) ApplyEffect ¶ added in v1.0.0
ApplyEffect 应用效果
func (*State) CheckVictory ¶ added in v1.0.0
CheckVictory 检查胜利条件
func (*State) GetAlivePlayers ¶ added in v1.0.0
func (s *State) GetAlivePlayers() []*PlayerState
GetAlivePlayers 获取存活玩家
func (*State) GetAlivePlayersByCamp ¶ added in v1.0.0
func (s *State) GetAlivePlayersByCamp(camp pb.Camp) []*PlayerState
GetAlivePlayersByCamp 获取指定阵营的存活玩家
func (*State) GetAlivePlayersByRole ¶ added in v1.0.0
func (s *State) GetAlivePlayersByRole(role pb.RoleType) []*PlayerState
GetAlivePlayersByRole 获取指定角色的存活玩家
func (*State) GetPlayer ¶ added in v1.0.0
func (s *State) GetPlayer(id string) (*PlayerState, bool)
GetPlayer 获取玩家
func (*State) GetWolfTeammates ¶ added in v1.0.0
GetWolfTeammates 获取狼人队友(不包括自己)
func (*State) ResetRoundState ¶ added in v1.0.0
func (s *State) ResetRoundState()
ResetRoundState 重置回合状态(每回合开始时调用)
type VoteResolver ¶ added in v1.0.0
type VoteResolver struct{}
VoteResolver 投票阶段解析器
func (*VoteResolver) Resolve ¶ added in v1.0.0
func (r *VoteResolver) Resolve(uses []*SkillUse, state *State, config *GameConfig) []*Effect
Resolve 解析投票结果
type WitchResolver ¶ added in v1.0.0
type WitchResolver struct{}
WitchResolver 女巫阶段解析器
func NewWitchResolver ¶ added in v1.0.0
func NewWitchResolver() *WitchResolver
func (*WitchResolver) Resolve ¶ added in v1.0.0
func (r *WitchResolver) Resolve(uses []*SkillUse, state *State, config *GameConfig) []*Effect
type WolfResolver ¶ added in v1.0.0
type WolfResolver struct{}
WolfResolver 狼人阶段解析器
func NewWolfResolver ¶ added in v1.0.0
func NewWolfResolver() *WolfResolver
func (*WolfResolver) Resolve ¶ added in v1.0.0
func (r *WolfResolver) Resolve(uses []*SkillUse, state *State, config *GameConfig) []*Effect