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
热门日志
分类
- git(9)
- Mac(7)
- C(1)
- memcache(1)
- Python(32)
- Vim(8)
- sed(2)
- ansible(3)
- awk(4)
- shell(3)
- Django(4)
- ssdb(1)
- bat(4)
- svn(0)
- docker(1)
- Tornado(1)
- go(2)
- 架构(19)
- Vue(1)
- game(2)
- AI(1)
- Windows(8)
- Java(8)
- Mysql(38)
- Ajax(2)
- Jsp(1)
- Struts(8)
- Linux(73)
- JavaScript(39)
- Staruml(0)
- Mouth(1)
- Html(6)
- Php(102)
- Message(51)
- Lua(10)
- Compute(1)
- Redis(7)
- Nginx(12)
- Jquery(1)
- Apache(1)
- cocos2d-x(8)
- about(1)



