-- 定义战斗角色类 Fighter = { name = "", -- 角色名 level = 1, -- 等级 hab = 1, -- 悟性 str = 1, -- 力量 hea = 1, -- 体质 dex = 1, -- 敏捷 ten = 1, -- 根骨 max_hp = 0, -- 最大血量 max_ep = 0, -- 最大气力 max_mp = 0, -- 最大法力 cur_hp = 0, -- 当前血量 cur_ep = 0, -- 当前气力 cur_mp = 0 -- 当前法力 }

-- 创建战斗角色对象 function CreateFighter(name, level, hab, str, hea, dex, ten) local fighter = {} setmetatable(fighter, {__index = Fighter}) fighter.name = name fighter.level = level fighter.hab = hab fighter.str = str fighter.hea = hea fighter.dex = dex fighter.ten = ten fighter.max_hp = CalcCharBasicMaxHP(level, hab, str, hea, dex, ten) fighter.max_ep = CalcCharBasicMaxEP(level, hab, str, hea, dex, ten) fighter.max_mp = CalcCharBasicMaxMP(level, hab, str, hea, dex, ten) fighter.cur_hp = fighter.max_hp fighter.cur_ep = fighter.max_ep fighter.cur_mp = fighter.max_mp return fighter end

-- 定义战斗类 Battle = { fighters = {}, -- 参战角色列表 turn = 1 -- 当前回合数 }

-- 添加参战角色 function Battle:AddFighter(fighter) table.insert(self.fighters, fighter) end

-- 移除参战角色 function Battle:RemoveFighter(fighter) for i, v in ipairs(self.fighters) do if v == fighter then table.remove(self.fighters, i) break end end end

-- 获取当前回合数 function Battle:GetTurn() return self.turn end

-- 开始战斗 function Battle:Start() self.turn = 1 while true do -- 判断是否有一方全部死亡 local is_all_dead = true for i, v in ipairs(self.fighters) do if v.cur_hp > 0 then is_all_dead = false break end end if is_all_dead then break end -- 输出当前回合数 print("第" .. self.turn .. "回合:") -- 每个角色依次行动 for i, v in ipairs(self.fighters) do if v.cur_hp > 0 then -- 执行角色行动 self:DoAction(v) end end -- 回合数加1 self.turn = self.turn + 1 end -- 输出战斗结果 print("战斗结束,胜利方:") for i, v in ipairs(self.fighters) do if v.cur_hp > 0 then print(v.name) end end end

-- 执行角色行动 function Battle:DoAction(fighter) -- TODO: 根据角色的策略选择行动方式 -- 这里简单地随机选择攻击或防御 local action = math.random(1, 2) if action == 1 then -- 攻击 local target = self:ChooseTarget(fighter) if target then self:Attack(fighter, target) end else -- 防御 self:Defend(fighter) end end

-- 选择攻击目标 function Battle:ChooseTarget(attacker) -- TODO: 根据攻击者的策略选择目标 -- 这里简单地随机选择一个敌人作为目标 local targets = {} for i, v in ipairs(self.fighters) do if v.cur_hp > 0 and v ~= attacker then table.insert(targets, v) end end if #targets > 0 then local index = math.random(1, #targets) return targets[index] end end

-- 攻击 function Battle:Attack(attacker, target) -- 计算攻击伤害 local damage = math.random(1, attacker.str) -- 减去目标防御力 damage = damage - math.floor(target.dex / 2) if damage < 1 then damage = 1 end -- 扣除目标血量 target.cur_hp = target.cur_hp - damage print(attacker.name .. "对" .. target.name .. "造成了" .. damage .. "点伤害") if target.cur_hp <= 0 then print(target.name .. "死亡") end end

-- 防御 function Battle:Defend(fighter) -- TODO: 根据角色的策略选择防御方式 -- 这里简单地增加角色的防御力 fighter.dex = fighter.dex + 1 print(fighter.name .. "进入防御状态,防御力增加1") end

-- 测试代码 local fighter1 = CreateFighter("张三", 1, 1, 2, 3, 4, 5) local fighter2 = CreateFighter("李四", 1, 1, 2, 3, 4, 5) local fighter3 = CreateFighter("王五", 1, 1, 2, 3, 4, 5) local battle = Battle battle:AddFighter(fighter1) battle:AddFighter(fighter2) battle:AddFighter(fighter3) battle:Start()

按照下面公式写一份战斗代码给我-- 最大血基础值function CalcCharBasicMaxHPLvl HAB STR HEA DEX TEN	--等级 5 + 体质 5 + 145	return Lvl 5 + HAB 5 + 145;end-- 最大气力基础值function CalcCharBasicMaxEPLvl HAB STR HEA DEX TEN	return Lvl

原文地址: https://www.cveoy.top/t/topic/b0Iv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录