增加了一些功能

This commit is contained in:
2026-06-19 23:08:26 +08:00
parent 6dd576158c
commit aedc199777
9 changed files with 502 additions and 10 deletions
+19
View File
@@ -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