Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- thread = require("thread")
- component = require("component")
- gpu = component.gpu
- term = require("term")
- side = 40
- background = 0x000000
- foreground = 0x00ff00
- pixelwidth = 2
- pixelheight = 1
- function deepCopy(t)
- local _t = {}
- for k, v in pairs(t) do
- if type(v) == "table" then
- v = deepCopy(v)
- end
- _t[k] = v
- end
- return _t
- end
- function drawPixel(x, y, size)
- gpu.fill(1 + (x-1) * pixelwidth, 1 + (y-1) * pixelheight, pixelwidth * size, pixelheight * size, " ")
- end
- function drawGrid(grid)
- for y = 1, side, 1 do
- for x = 1, side, 1 do
- if grid[y][x] == 1 then
- drawPixel(x, y, 1)
- end
- end
- end
- end
- neighborOffsets = {
- {-1, -1},{0, -1},{1, -1},
- {-1, 0}, {1, 0},
- {-1, 1}, {0, 1}, {1, 1}}
- function neighbors(grid, x, y)
- sum = 0
- for i, v in ipairs(neighborOffsets) do
- _x = x + v[1]
- _y = y + v[2]
- if (_x >= 1 and _y >= 1 and _x <= side and _y <= side) then
- sum = sum + grid[_y][_x];
- end
- end
- return sum
- end
- function generation(grid)
- local _grid = deepCopy(grid)
- for y = 1, side, 1 do
- for x = 1, side, 1 do
- n = neighbors(_grid, x, y)
- if (n == 2 and _grid[y][x] == 1) then
- grid[y][x] = 1
- elseif n == 3 then
- grid[y][x] = 1
- else
- grid[y][x] = 0
- end
- end
- end
- end
- function init(param)
- assert(param == "rand" or param == "glider" or param == "pulsar")
- term.clear()
- local grid = {}
- math.randomseed(os.time())
- for y = 1, side, 1 do
- grid[y] = {}
- for x = 1, side, 1 do
- if param == "rand" then
- grid[y][x] = math.random(0, 1)
- else
- grid[y][x] = 0
- end
- end
- end
- if param == "glider" then
- grid[2][1] = 1
- grid[1][3] = 1
- grid[2][3] = 1
- grid[3][2] = 1
- grid[3][3] = 1
- elseif param == "pulsar" then
- grid[2][4] = 1
- grid[2][5] = 1
- grid[2][6] = 1
- grid[2][10] = 1
- grid[2][11] = 1
- grid[2][12] = 1
- grid[4][2] = 1
- grid[4][7] = 1
- grid[4][9] = 1
- grid[4][14] = 1
- grid[5][2] = 1
- grid[5][7] = 1
- grid[5][9] = 1
- grid[5][14] = 1
- grid[6][2] = 1
- grid[6][7] = 1
- grid[6][9] = 1
- grid[6][14] = 1
- grid[7][4] = 1
- grid[7][5] = 1
- grid[7][6] = 1
- grid[7][10] = 1
- grid[7][11] = 1
- grid[7][12] = 1
- grid[9][4] = 1
- grid[9][5] = 1
- grid[9][6] = 1
- grid[9][10] = 1
- grid[9][11] = 1
- grid[9][12] = 1
- grid[10][2] = 1
- grid[10][7] = 1
- grid[10][9] = 1
- grid[10][14] = 1
- grid[11][2] = 1
- grid[11][7] = 1
- grid[11][9] = 1
- grid[11][14] = 1
- grid[12][2] = 1
- grid[12][7] = 1
- grid[12][9] = 1
- grid[12][14] = 1
- grid[14][4] = 1
- grid[14][5] = 1
- grid[14][6] = 1
- grid[14][10] = 1
- grid[14][11] = 1
- grid[14][12] = 1
- end
- return grid
- end
- function run(grid)
- while true do
- gpu.setBackground(background)
- term.clear()
- gpu.setBackground(foreground)
- drawGrid(grid)
- term.setCursor(1, 50)
- os.sleep(1)
- generation(grid)
- end
- end
- print("Choose rand/glider/pulsar:")
- local grid = init(string.gsub(term.read(), "\n", ""))
- local t = thread.create(run, grid)
- input = term.read()
- t:kill()
- gpu.setBackground(background)
- term.clear()
Add Comment
Please, Sign In to add comment