function throwDices(dices, sides, plus) local dmgs = {} local lch = 1 / sides for dmg = 1, sides do dmgs[dmg+plus] = lch end for side = 1, dices-1 do local nextDmgs = {} for dmg, chance in pairs(dmgs) do for nDmg = 1, sides do local tDmg = dmg+nDmg nextDmgs[tDmg] = (nextDmgs[tDmg] or 0) + chance*lch end end dmgs = nextDmgs end return dmgs end --for i, v in pairs(throwDices(2, 4, 0)) do --print( i, v) --end function extendStep(beforeStep, dmgs, stepN, finishVars) local results = {} local newHp local isFinish = true for hp, chance in pairs(beforeStep) do for dmg, dChance in pairs(dmgs) do newHp = math.max(0, hp - dmg) if newHp == 0 then finishVars[stepN] = (finishVars[stepN] or 0) + chance*dChance else isFinish = false results[newHp] = (results[newHp] or 0) + chance*dChance end end end return results, isFinish end function battle(startHp, dmgDistribution, fChanceFormat) fChanceFormat = fChanceFormat or function(chance) return chance end local finishVars = {} local current = {[startHp]=1} local i = 0 local isFinish = false while isFinish == false do i = i + 1 current, isFinish = extendStep(current, dmgDistribution, i, finishVars) end local averageStrikes = 0 print() print("strike#", "chance to die") for stepN, chance in pairs(finishVars) do averageStrikes = averageStrikes + stepN * chance print(stepN, fChanceFormat(chance)) end print() print("average strikes", averageStrikes) end print("Start battle 18 hp vs 2d6+1 dmg") battle(18, throwDices(2, 6, 1)) -- hp = 10, damage = 2d6+1 print("/end battle") print("-----------") print() print("Start battle 18 hp vs 2d6+1 dmg (format with %)") battle(18, throwDices(2, 6, 1), function(chance) return chance*100 .. "%" end) -- hp = 10, damage = 2d6+1 print("/end battle") print("-----------") print() print("Other examples. hp=10, dmg 2-3, and 20% chance x3 damage") battle(10, {[2]=0.4, [3]=0.4, [6]=0.1, [9]=0.1}) print("program running time", os.clock())
Write, Run & Share Lua code online using OneCompiler's Lua online compiler for free. It's one of the robust, feature-rich online compilers for Lua language, running the latest Lua version 5.3. Getting started with the OneCompiler's Lua editor is easy and fast. The editor shows sample boilerplate code when you choose language as Lua and start coding.
OneCompiler's Lua online editor supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample Lua program which takes name as input and prints hello message with your name.
name = io.read("*a")
print ("Hello ", name)
Lua is a light weight embeddable scripting language which is built on top of C. It is used in almost all kind of applications like games, web applications, mobile applications, image processing etc. It's a very powerful, fast, easy to learn, open-source scripting language.
-- global variables
a = 10
-- local variables
local x = 30
Value Type | Description |
---|---|
number | Represents numbers |
string | Represents text |
nil | Differentiates values whether it has data or not |
boolean | Value can be either true or false |
function | Represents a sub-routine |
userdata | Represents arbitary C data |
thread | Represents independent threads of execution. |
table | Can hold any value except nil |
While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.
while(condition)
do
--code
end
Repeat-Until is also used to iterate a set of statements based on a condition. It is very similar to Do-While, it is mostly used when you need to execute the statements atleast once.
repeat
--code
until( condition )
For loop is used to iterate a set of statements based on a condition.
for init,max/min value, increment
do
--code
end
Function is a sub-routine which contains set of statements. Usually functions are written when multiple calls are required to same set of statements which increase re-usuability and modularity.
optional_function_scope function function_name( argument1, argument2, argument3........, argumentn)
--code
return params with comma seperated
end