local cellSize = 10 local rows = 60 local cols = 80 local grid = {} local nextGrid = {} local aliveColor = {0.2, 0.6, 1} local deadColor = {0, 0, 0} function initGrid() for y = 1, rows do grid[y] = {} nextGrid[y] = {} for x = 1, cols do grid[y][x] = math.random(0,1) nextGrid[y][x] = 0 end end end function countNeighbors(x, y) local count = 0 for dy = -1,1 do for dx = -1,1 do if not (dx == 0 and dy == 0) then local nx = ((x+dx-1) % cols) + 1 local ny = ((y+dy-1) % rows) + 1 count = count + grid[ny][nx] end end end return count end function updateGrid() for y = 1, rows do for x = 1, cols do local alive = grid[y][x] local neighbors = countNeighbors(x, y) if alive == 1 then nextGrid[y][x] = (neighbors == 2 or neighbors == 3) and 1 or 0 else nextGrid[y][x] = (neighbors == 3) and 1 or 0 end end end for y = rows-1,1,-1 do for x = 1, cols do if nextGrid[y][x] == 1 and nextGrid[y+1][x] == 0 then nextGrid[y+1][x] = 1 nextGrid[y][x] = 0 end end end local temp = grid grid = nextGrid nextGrid = temp end function love.load() love.window.setMode(cols*cellSize, rows*cellSize) initGrid() end function love.update(dt) updateGrid() end function love.draw() for y = 1, rows do for x = 1, cols do if grid[y][x] == 1 then love.graphics.setColor(aliveColor) else love.graphics.setColor(deadColor) end love.graphics.rectangle("fill", (x-1)*cellSize, (y-1)*cellSize, cellSize, cellSize) end end end