Lua文字RPG战斗while循环死循环 怪物HP无限递减问题求助
Lua文字RPG战斗死循环修复
你碰到的无限递减怪物HP、战斗无法结束的问题是逻辑写法错误导致的,不需要重写全部代码,小改即可:
核心bug:循环条件逻辑运算符用错
原循环判断写的是while monster.hp > 0 or player.hp > 0 do,or的逻辑是只要两个条件满足任意一个,循环就持续运行。也就是说哪怕怪物HP已经被扣到0以下,只要玩家还活着,循环就不会停——这时候因为怪物已经死亡,不会触发怪物攻击玩家的分支,代码就会一轮轮持续给怪物扣血、打印怪物HP,进入死循环。
正确的战斗继续条件应该是玩家和怪物同时存活,把or换成and即可:while monster.hp > 0 and player.hp > 0 do。只要任意一方HP降到0及以下,循环立刻终止。
顺手修复的小显示问题
原代码打印玩家血量的语句print(player.un .. "Health: " .. player.hp)里,玩家名字和后面的"Health"之间缺空格,实际运行会出现类似Player1Health: 18的拼接错误,补个空格就行。
修复后的完整战斗代码段
elseif command == "attack Frog" then if room == "0001" then monster.hp = 5 monster.dmg = 2 -- 修正循环条件:双方均存活才继续战斗 while monster.hp > 0 and player.hp > 0 do monster.hp = monster.hp - player.dm print("Monster Health: " .. monster.hp) if monster.hp > 0 then player.hp = player.hp - monster.dmg -- 补全名字后的空格 print(player.un .. " Health: " .. player.hp) end end if monster.hp < 1 then print("Victory!\r\n+10XP +2Gold") player.xp = player.xp + 10 player.gd = player.gd + 2 else print("YOU DIED!!!") i = 0 end end end
改完之后逻辑完全匹配原本的设计:玩家先手攻击,怪物存活则反击,任意一方死亡立刻结束战斗,进入胜利/死亡结算,不会再出现死循环。
内容的提问来源于stack exchange,提问作者Milán Székely
相关产品推荐
相关产品推荐

