Adding small game of life example in Lua.
[langlearn/.git] / game_of_life / Lua / MaximumGeeker / life.lua
1
2 math.randomseed( os.time() )
3 math.random()
4 math.random()
5 math.random()
6
7 local w, h = 12, 12
8
9 local xmt = { __index = function() return 0 end }
10 local x = setmetatable({}, xmt)
11 local mt = { __index = function() return x end }
12 local g1, g2 = setmetatable({}, mt), setmetatable({}, mt)
13
14 for i = 1, h do
15   g1[i], g2[i]= setmetatable({}, xmt), setmetatable({}, xmt)
16   for j = 1, w do
17     g1[i][j], g2[i][j] = math.random() > 0.5 and 1 or 0, 0
18   end
19 end
20
21 for _ = 1, 100 do
22
23   for i = 1, h do
24     for j = 1, w do
25       local b = g1[i][j]
26
27       local c =
28         g1[i-1][j-1] + g1[i-1][j] + g1[i-1][j+1] +
29         g1[ i ][j-1] +      0     + g1[ i ][j+1] +
30         g1[i+1][j-1] + g1[i+1][j] + g1[i+1][j+1]
31
32       if b == 1 then
33         if c >= 2 and c <= 3 then
34           g2[i][j] = 1
35         else
36           g2[i][j] = 0
37         end
38       else
39         if c == 3 then
40           g2[i][j] = 1
41         else
42           g2[i][j] = 0
43         end
44       end
45
46     end
47   end
48
49   g1, g2 = g2, g1
50
51   for i = 1, h do
52     for j = 1, w do
53       io.write(g1[i][j] == 1 and 'X' or ' ')
54     end
55     print()
56   end
57   print(string.rep('-', w+2))
58   io.read()
59
60 end
61