SHARE
TWEET

Cellular Automata

Sheepolution Mar 22nd, 2019 81 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. math.randomseed(os.time())
  2. function love.load()
  3.     board = {}
  4.  
  5.     for i=1,55 do
  6.         board[i] = {}
  7.         for j=1,77 do
  8.             if math.random() > .5 then
  9.                 board[i][j] = 0
  10.             elseif math.random() > .8 then
  11.                 board[i][j] = 1
  12.             elseif math.random() > .8 then
  13.                 board[i][j] = 2
  14.             elseif math.random() > .8 then
  15.                 board[i][j] = 3
  16.             else
  17.                 board[i][j] = 4
  18.             end
  19.         end
  20.     end
  21.  
  22.     timer = 0
  23.     stage1 = ""
  24.     stage2 = ""
  25. end
  26.  
  27. function love.update(dt)
  28.     if pause then return end
  29.     timer = timer + dt
  30.     -- if timer > .1 then
  31.         -- timer = 0
  32.         nextStage()
  33.     -- end
  34. end
  35.  
  36.  
  37. function love.draw()
  38.     for i,v in ipairs(board) do
  39.         for j,w in ipairs(v) do
  40.             if w == 0 then
  41.                 love.graphics.setColor(1, 1, 1, .3)
  42.             else
  43.                 love.graphics.setColor(1/w, 1/w*3, 1/w*5, 1)
  44.             end
  45.                 love.graphics.print(w, j * 10, i * 10)
  46.         end
  47.     end
  48. end
  49.  
  50.  
  51. function love.keypressed(key)
  52.     if key == "space" then
  53.         pause = false
  54.         nextStage()
  55.     end
  56.  
  57.     if key == "r" then
  58.         love.load()
  59.     end
  60. end
  61.  
  62. dirs = {
  63.               {0, -1},
  64.     {-1,  0},          {1,  0},
  65.               {0,  1}
  66. }
  67.  
  68.  
  69. function nextStage()
  70.     local oldstage = stage2
  71.     stage2 = stage1
  72.  
  73.     local newBoard = {}
  74.     for i=1,#board do
  75.         newBoard[i] = {}
  76.         for j=1,#board[1] do
  77.             newBoard[i][j] = 0
  78.         end
  79.     end
  80.  
  81.     for i,v in ipairs(board) do
  82.         for j,w in ipairs(v) do
  83.             local nbr = 0
  84.             for k,d in ipairs(dirs) do
  85.                 if board[i + d[2]] and board[i + d[2]][j + d[1]] then
  86.                     -- print("board " .. d[2] .. ", " .. d[1], board[d[2]][d[1]])
  87.                     local n = board[i + d[2]][j + d[1]]
  88.                     if n == 0 then
  89.                         nbr = nbr - 1
  90.                     else
  91.                         nbr = nbr + n
  92.                     end
  93.                 else
  94.                     nbr = nbr - 1
  95.                 end
  96.             end
  97.             if w + nbr > 4 then newBoard[i][j] = 0
  98.             elseif w + nbr < 0 then newBoard[i][j] = 0
  99.             else newBoard[i][j] = w + nbr end
  100.         end
  101.     end
  102.  
  103.     stage1 = ""
  104.  
  105.     for i,v in ipairs(board) do
  106.         for j,w in ipairs(v) do
  107.             stage1 = stage1 .. w
  108.         end
  109.     end
  110.  
  111.     if stage1 == oldstage then
  112.         love.load()
  113.         return
  114.     end
  115.  
  116.     board = newBoard
  117. end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top