1NUMRANGE = 100
2MAXROUND = 5
3math.randomseed(os.time())
4
5function start(key, value)
6   value = tonumber(value)
7   if not value or value <= 0 then
8      return "error: invalid value"
9   end
10   if not _putkeep(key .. ":r", 1) then
11      return "error: already started"
12   end
13   local num = math.random(NUMRANGE)
14   _put(key .. ":m", value)
15   _put(key .. ":n", num)
16   return "Welcome, " .. key .. ".\n" ..
17      "The current number is " .. num .. ".\n" ..
18      "Your money is " .. value .. ".\n" ..
19      "Round 1 Bet!\n"
20end
21
22function high(key, value)
23   return do_bet(key, value, true)
24end
25
26function low(key, value)
27   return do_bet(key, value, false)
28end
29
30function over(key, value)
31   if _vsiz(key .. ":r") < 0 then
32      return "error: not started"
33   end
34   _out(key .. ":r")
35   _out(key .. ":m")
36   _out(key .. ":n")
37   return "Good Bye!"
38end
39
40function do_bet(key, value, ishigh)
41   value = tonumber(value)
42   if not value or value <= 0 then
43      return "error: invalid value"
44   end
45   local round = tonumber(_get(key .. ":r"))
46   if not round then
47      return "error: not started"
48   end
49   local money = tonumber(_get(key .. ":m"))
50   if round > MAXROUND or money < 1 then
51      return "error: already finished"
52   end
53   if value > money then
54      value = money
55   end
56   local num = tonumber(_get(key .. ":n"))
57   local newnum = math.random(NUMRANGE)
58   local cmp = "even"
59   local res = "lost"
60   if newnum > num then
61      cmp = "high"
62      if ishigh then
63         res = "won"
64      end
65   elseif newnum < num then
66      cmp = "low"
67      if not ishigh then
68         res = "won"
69      end
70   end
71   round = round + 1
72   if res == "won" then
73      money = money + value
74   else
75      money = money - value
76   end
77   _put(key .. ":r", round)
78   _put(key .. ":m", money)
79   _put(key .. ":n", newnum)
80   local call = "Round " .. round .. " Bet!\n"
81   if round > MAXROUND or money < 1 then
82      call = "Game Over!\n"
83   end
84   return "The currnet number is " .. newnum .. ".\n" ..
85      newnum .. ":" .. num .. " (" .. cmp .. ") ... You " .. res .. "!\n" ..
86      "Your money is " .. money .. ".\n" ..
87      call
88end
89