lua 随机战斗游戏
--战斗结果 fight_result = false; --创建一个空的玩家表 players = {} --[[ hp 气血 mp 蓝 atk 攻击 def 防御 spd 速度 luk 运气 mg 魔法 end]] ----初始化玩家数据 function create_player() for num=1,2,1 do -- 创建两个玩家 local tmp = {name="newplayer",hp=0,mp=0,atk=0,def=0,spd=0,luk=0,mg=0} randomseed(); tmp.hp = math.random(400,1000); tmp.mp = math.random(1,100); tmp.atk = math.random(1,100); tmp.atk = math.random(1,100); tmp.spd = math.random(1,100); tmp.luk = math.random(1,100); tmp.mg = math.random(1,100); table.insert(players,tmp); end end --随机种子 function randomseed() math.randomseed(os.time()); end ---攻击造成的伤害 ----from 来自谁的攻击 ----to 攻击谁 function attack(from,to) if(to.def>from.atk+8) then return math.random(50,200); else return from.atk-to.def+math.random(0,8); end end --闪避 function evasion(spec) assert(type(spec) == 'number'); -- 判断数据类型 local s = math.random(0,100); local a = 30; for x=1,spec,1 do a = a + 2 if s == a then return 0 end end return 1; end --暴击 function crit(spec) assert(type(spec) == 'number'); -- 判断数据类型 local s = math.random(0,100); local a = 30; for x=1,spec,1 do a =a + 2 if s == a then return 2 end end return 1; end -- 魔法 magic function magic(spec) assert(type(spec) == 'number'); -- 判断数据类型 local s = math.random(0,100); local a = 30; for x=1,spec,1 do a = a + 2 if s == a then return 0 end end return 1; end --谁先动手 function first() if players[1] == nil or players[2] == nil then return false end; -- 判断速度 if players[1].spd == players[2].spd then return math.random(0,1) elseif players[1].spd > players[2].spd then return true; else return 3; end end --战斗 function fight(player1,player2) local string_message; --提示消息 local c_result = crit(player1.luk); --暴击 local e_result = evasion(player2.spd); --闪避 local damage = attack(player1,player2)*c_result*e_result; --造成伤害 player2.hp = player2.hp - damage; -- 气血减少 --判断被攻击方是否躲避成功 if e_result == 0 then -- 被攻击者使用魔法对自己发起战斗者造成伤害 local m_result = magic(player2.mg); local mg_damage = math.random(1,10)*m_result; player1.mg = player1.mg - mg_damage; if player1.mg < 0 then player1.mg = 0; end if m_result == 1 then string_message = string.format("\n【%s】成功躲避了一次来自【%s】的攻击,并通过自身魔法保护 对【%s】造成【-%d】魔法损耗",player2.name,player1.name,player1.name,mg_damage); else string_message = string.format("\n【%s】成功躲避了一次来自【%s】的攻击",player2.name,player1.name); end --随时生成躲避事件 local ihide = math.random(1,2); if ihide == 1 then print(string_message); elseif ihide == 2 then print(string_message); end end --暴击结果处理 if c_result == 2 then local iresult = math.random(1,2); if iresult==1 then print(string.format("\n【%s】请来了孙悟空,把【%s】吓得神经衰弱,【%s】受到了【-%d】点伤 害",player1.name,player2.name,player2.name,damage)) else print(string.format("\n【%s】请来了观音,把【%s】吓得屁股尿流,【%s】受到了【-%d】点伤害", player1.name,player2.name,player2.name,damage)) end else if player2.hp < 0 then print(string.format("\n战斗结束,【%s】被击败了\n",player2.name)) fight_result=true end end end --战斗结果 function show(player1,player2,itype) if itype == 0 then print("战斗前"); else print("战斗后"); end if player1==nil or player2==nil then return end print(string.format("%s--血:【%d】 攻:【%d】 防:【%d】 速:【%d】 运:【%d】 魔法: 【%d】 \n", player1.name, player1.hp,player1.atk,player1.def,player1.spd,player1.luk,player1.mg)) print(string.format("%s--血:【%d】 攻:【%d】 防:【%d】 速:【%d】 运:【%d】 魔法: 【%d】 \n", player2.name, player2.hp,player2.atk,player2.def,player2.spd,player2.luk,player2.mg)) end --战斗开始 function start_game() -- 临时变量,保存状态 local state =0; print("请输入玩家1姓名,并回车结束"); local name1 = io.read("*line"); print("请输入玩家2姓名,并回车结束"); local name2 = io.read("*line"); if name1 == nil or name2 == nil then return 0; else print(string.format("\n 【 %s 】 和 【 %s 】将要开启一场生死战斗,Ready go",name1,name2)); end create_player(); -- 初始化玩家数据 players[1].name = name1; players[2].name = name2; local f = first(); -- 判断谁发起战斗 if f == 1 or false then -- 如果发起战斗失败或者同时发起战斗,则需要重新初始化数据 players[1].name = name1; players[2].name = name2; end --战斗前数据 show(players[1],players[2],0); while fight_result == false do --luaSlp(); if state == 0 then fight(players[1],players[2]); state = 1; else fight(players[1],players[2]); state = 0; end end --战斗后数据 show(players[1],players[2],1); end start_game();
将以上代码保存为random.lua
热门日志
分类
- Django(4)
- ssdb(1)
- Mac(7)
- C(1)
- memcache(1)
- Python(32)
- Vim(8)
- sed(2)
- ansible(3)
- awk(4)
- shell(3)
- about(1)
- git(9)
- bat(4)
- svn(0)
- docker(1)
- Tornado(1)
- go(2)
- 架构(18)
- Vue(1)
- game(2)
- Html(6)
- Java(8)
- Mysql(37)
- Ajax(2)
- Jsp(1)
- Struts(8)
- Linux(72)
- JavaScript(39)
- Staruml(0)
- Mouth(1)
- Php(102)
- Windows(8)
- Message(48)
- Lua(10)
- Compute(1)
- Redis(7)
- Nginx(12)
- Jquery(1)
- Apache(1)
- cocos2d-x(8)