增加了一些功能
This commit is contained in:
@@ -29,9 +29,14 @@ type Engine struct {
|
||||
SelectedCard *Card
|
||||
SelectedBy string
|
||||
Effect *EffectState
|
||||
ChaosMode bool
|
||||
ActionLogs []string
|
||||
rng *rand.Rand
|
||||
}
|
||||
|
||||
func (e *Engine) log(msg string) { e.ActionLogs = append(e.ActionLogs, msg) }
|
||||
func (e *Engine) FlushLogs() []string { l := e.ActionLogs; e.ActionLogs = nil; return l }
|
||||
|
||||
func NewEngine(playerIDs []string, nicknames []string, botFlags []bool, playerCount int) *Engine {
|
||||
e := &Engine{
|
||||
Phase: "dealing",
|
||||
@@ -152,6 +157,7 @@ func (e *Engine) doSkill(p *PlayerState) error {
|
||||
card := e.SelectedCard
|
||||
e.removeFromHand(p, card.UID)
|
||||
p.SkillZone = append(p.SkillZone, card)
|
||||
e.log(p.Nickname + " 使用了特技「" + card.Name + "」")
|
||||
e.SelectedCard = nil
|
||||
e.SelectedBy = ""
|
||||
|
||||
@@ -167,6 +173,7 @@ func (e *Engine) doHarmony(p *PlayerState) error {
|
||||
card := e.SelectedCard
|
||||
e.removeFromHand(p, card.UID)
|
||||
e.HarmonyZone = append(e.HarmonyZone, card)
|
||||
e.log(p.Nickname + " 将一张牌放入了调和区")
|
||||
e.SelectedCard = nil
|
||||
e.SelectedBy = ""
|
||||
e.finishTurn(p)
|
||||
@@ -184,6 +191,7 @@ func (e *Engine) doChallenge(p *PlayerState, targetID string) error {
|
||||
card := e.SelectedCard
|
||||
e.removeFromHand(p, card.UID)
|
||||
target.ChallengeZone = append(target.ChallengeZone, card)
|
||||
e.log(p.Nickname + " 质疑了 " + target.Nickname)
|
||||
e.SelectedCard = nil
|
||||
e.SelectedBy = ""
|
||||
e.finishTurn(p)
|
||||
@@ -193,6 +201,7 @@ func (e *Engine) doChallenge(p *PlayerState, targetID string) error {
|
||||
func (e *Engine) finishTurn(p *PlayerState) {
|
||||
if len(p.Hand) <= 1 {
|
||||
p.IsExited = true
|
||||
e.log(p.Nickname + " 暂时退出了游戏")
|
||||
}
|
||||
if e.allExited() {
|
||||
e.Phase = "all_exited"
|
||||
@@ -237,6 +246,16 @@ func (e *Engine) IsEffectResolving() bool {
|
||||
return e.Effect != nil && e.Effect.Active
|
||||
}
|
||||
|
||||
func (e *Engine) IsHandTargetable(p *PlayerState) bool {
|
||||
if len(p.Hand) == 0 {
|
||||
return false
|
||||
}
|
||||
if e.ChaosMode {
|
||||
return true
|
||||
}
|
||||
return !p.IsExited
|
||||
}
|
||||
|
||||
func (e *Engine) EffectNeedsResponseFrom(playerID string) bool {
|
||||
if !e.IsEffectResolving() {
|
||||
return false
|
||||
|
||||
Reference in New Issue
Block a user