feat(logic): 添加战斗逻辑和玩家操作处理
- 新增 battleLoop 方法实现战斗循环逻辑 - 定义 Action 结构体表示玩家操作 - 实现玩家输入处理、战斗计算和战斗结束检查等逻辑 - 添加模拟玩家操作和战斗结果输出
This commit is contained in:
@@ -3,6 +3,8 @@ package service
|
||||
import (
|
||||
"blazing/logic/service/fight/info"
|
||||
"blazing/modules/blazing/model"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/jinzhu/copier"
|
||||
)
|
||||
@@ -80,9 +82,91 @@ func (f *FightC) NewFight(i *info.NoteReadyToFightInfo, plays PlayerI) {
|
||||
//这时候应该建立一个虚拟的player
|
||||
|
||||
}
|
||||
|
||||
for { //战斗回合循环
|
||||
|
||||
}
|
||||
f.battleLoop()
|
||||
|
||||
}
|
||||
|
||||
// 定义操作类型,存储玩家的操作信息(如技能选择、目标等)
|
||||
type Action struct {
|
||||
PlayerID int // 玩家ID:1或2
|
||||
SkillID int // 使用的技能ID
|
||||
TargetID int // 目标ID
|
||||
}
|
||||
|
||||
func (f *FightC) battleLoop() {
|
||||
for { // 战斗回合循环
|
||||
// 每个回合重置:创建两个通道接收双方操作
|
||||
p1ActionChan := make(chan Action) // 玩家1的操作通道
|
||||
p2ActionChan := make(chan Action) // 玩家2的操作通道
|
||||
|
||||
// 启动goroutine处理双方输入(实际项目中这里会绑定用户输入逻辑)
|
||||
go handlePlayerInput(1, p1ActionChan)
|
||||
go handlePlayerInput(2, p2ActionChan)
|
||||
|
||||
// 等待双方操作或超时
|
||||
var p1Action, p2Action Action
|
||||
var p1Done, p2Done bool
|
||||
timeout := time.After(60 * time.Second) // 60秒超时
|
||||
|
||||
// 循环等待双方都完成操作
|
||||
for !(p1Done && p2Done) {
|
||||
select {
|
||||
case action := <-p1ActionChan:
|
||||
p1Action = action
|
||||
p1Done = true
|
||||
fmt.Printf("玩家%d已选择技能%d\n", action.PlayerID, action.SkillID)
|
||||
case action := <-p2ActionChan:
|
||||
p2Action = action
|
||||
p2Done = true
|
||||
fmt.Printf("玩家%d已选择技能%d\n", action.PlayerID, action.SkillID)
|
||||
case <-timeout:
|
||||
// 超时处理:未操作的视为放弃
|
||||
fmt.Println("操作超时,未操作方视为放弃本回合")
|
||||
// 根据超时情况补充未完成的操作(如空操作)
|
||||
if !p1Done {
|
||||
p1Action = Action{PlayerID: 1, SkillID: 0} // 0表示放弃
|
||||
}
|
||||
if !p2Done {
|
||||
p2Action = Action{PlayerID: 2, SkillID: 0}
|
||||
}
|
||||
p1Done = true
|
||||
p2Done = true
|
||||
}
|
||||
}
|
||||
|
||||
// 双方都已操作,执行战斗计算
|
||||
fmt.Println("双方操作完成,开始计算本回合结果...")
|
||||
calculateBattleResult(p1Action, p2Action)
|
||||
|
||||
// 检查战斗是否结束(如一方血量为0)
|
||||
if isBattleEnd() {
|
||||
fmt.Println("战斗结束")
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 模拟处理玩家输入(实际中会绑定UI或网络输入)
|
||||
func handlePlayerInput(playerID int, actionChan chan<- Action) {
|
||||
// 这里只是示例:实际中会等待用户输入(如点击技能按钮)
|
||||
// 假设玩家1选择技能1,目标是玩家2;玩家2选择技能2,目标是玩家1
|
||||
time.Sleep(time.Second * 2) // 模拟思考时间
|
||||
if playerID == 1 {
|
||||
actionChan <- Action{PlayerID: 1, SkillID: 1, TargetID: 2}
|
||||
} else {
|
||||
actionChan <- Action{PlayerID: 2, SkillID: 2, TargetID: 1}
|
||||
}
|
||||
}
|
||||
|
||||
// 战斗计算逻辑(示例)
|
||||
func calculateBattleResult(p1, p2 Action) {
|
||||
// 实际项目中会根据技能ID计算伤害、 buff等
|
||||
fmt.Printf("玩家1使用技能%d攻击玩家%d,玩家2使用技能%d攻击玩家%d\n",
|
||||
p1.SkillID, p1.TargetID, p2.SkillID, p2.TargetID)
|
||||
}
|
||||
|
||||
// 检查战斗是否结束(示例)
|
||||
func isBattleEnd() bool {
|
||||
// 实际中会判断双方血量等条件
|
||||
return false // 暂时返回false,持续战斗
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user