Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local a=http.get"https://pastebin.com/raw/ujchRSnU"local b=fs.open("blittle","w")b.write(a.readAll())a.close()b.close()
- os.loadAPI "blittle" -- evil but necessary
- local function make_board(w, h)
- 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
- board.width = w
- board.height = h
- 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 update(board, new_board)
- for x = 0, board.width do
- for y = 0, board.height do
- local alive_now = board[x][y]
- local alive_next
- local neighbours = get_neighbours(board, x, y, board.width, board.height)
- 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 blterm = blittle.createWindow(term.current(), 1, 1, raww, rawh, false)
- local function draw(board)
- blterm.setVisible(false)
- for x = 0, board.height do
- blterm.setCursorPos(1, x)
- local cols = ""
- for z = 0, board.width do
- local color = colors.black
- if board[z][x] then cols = cols .. "0"
- else cols = cols .. "f" end
- end
- blterm.blit(nil, nil, cols)
- end
- blterm.setVisible(true)
- end
- local w, h = blterm.getSize()
- local b1, b2 = make_board(w, h), make_board(w, h)
- 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(w, h) end
- sleep(0.1)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement