Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local y = 135
- local minx, maxx, minz, maxz = 2514, 2544, -1488, -1518
- local w, h = maxx - minx, maxz - minz
- local dead, alive = {"minecraft:concrete", 3}, {"minecraft:concrete", 0}
- local function make_board()
- local board = {}
- for x = 0, w do
- board[x] = {}
- for z = 0, h do
- local pick = false
- if math.random() < 0.5 then pick = true end
- board[x][z] = pick
- end
- end
- return board
- end
- local function wrap(n, max)
- return n % max
- end
- local function get_neighbours(board, x, y, w, h)
- local total = 0
- for dx = -1, 1 do
- for dy = -1, 1 do
- if not (dx == 0 and dy == 0) then
- local thing = 0
- if board[wrap(x + dx, w)][wrap(y + dy, h)] then thing = 1 end
- total = total + thing
- end
- end
- end
- return total
- end
- local function setblock(x, y, z, state)
- local b
- if state then b = alive else b = dead end
- commands.execAsync(string.format("setblock %d %d %d %s %d", x, y, z, b[1], b[2]))
- end
- local function update(board, new_board)
- for x = 0, w do
- for y = 0, h do
- local alive_now = board[x][y]
- local alive_next
- local neighbours = get_neighbours(board, x, y, w, h)
- if alive_now then
- alive_next = neighbours == 2 or neighbours == 3
- else
- alive_next = neighbours == 3
- end
- new_board[x][y] = alive_next
- end
- end
- return new_board
- end
- local function draw(board)
- for x = 0, w do
- for z = 0, h do
- setblock(x + minx, y, z + minz, board[x][z])
- end
- end
- end
- local b1, b2 = make_board(), make_board()
- local gens = 0
- while true do
- draw(b1)
- update(b1, b2)
- b1, b2 = b2, b1
- gens = gens + 1
- if gens % 100 == 0 then b1 = make_board() end
- sleep(1)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement