Advertisement
Graveyboi

Snake ComputerCraft

Feb 25th, 2020
1,041
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.89 KB | None | 0 0
  1. local sx, sy = term.getSize()
  2. local snakebody = {{5, 5}, {6, 5}, {7, 5}}
  3. local snakehead = {snakebody[table.maxn(snakebody)][1], snakebody[table.maxn(snakebody)][2]}
  4. local snakeface = "right"
  5. local fed = false
  6. local food = {10, 14}
  7.  
  8. local function tablecheck(tab, var)
  9.     check = false
  10.  
  11.     for i, v in ipairs(tab) do
  12.         if var == v then
  13.             check = true
  14.         end
  15.     end
  16.  
  17.     return check
  18. end
  19.  
  20. local function tabletablecheck(tab, var)
  21.     check = false
  22.  
  23.     for i, v in ipairs(tab) do
  24.         for i, v in ipairs(tab[i]) do
  25.             if var == v then
  26.                 check = true
  27.             end
  28.         end
  29.     end
  30.  
  31.     return check
  32. end
  33.  
  34. local function poscheck(pos1, pos2)
  35.     check = false
  36.  
  37.     if tabletablecheck(pos1, pos2[1]) and tabletablecheck(pos1, pos2[2]) then
  38.         check = true
  39.     end
  40.  
  41.     return check
  42. end
  43.  
  44. local function snakeshow()
  45.     term.setBackgroundColor(colors.white)
  46.     term.clear()
  47.     term.setBackgroundColor(colors.black)
  48.  
  49.     for a = 1, #snakebody do
  50.         term.setCursorPos(snakebody[a][1], snakebody[a][2])
  51.         term.blit(" ", "d", "d")
  52.     end
  53.  
  54.     term.setCursorPos(food[1], food[2])
  55.     term.blit(" ", "e", "e")
  56. end
  57.  
  58. local function snakefeed()
  59.     fed = true
  60.  
  61.     local cease = false
  62.  
  63.     while cease == false do
  64.         food = {math.random(1, sx), math.random(1, sy)}
  65.  
  66.         if not poscheck(snakebody, food) then
  67.             cease = true
  68.         end
  69.     end
  70. end
  71.  
  72. local function snakemove()
  73.     if fed == true then
  74.         if snakeface == "up" then
  75.             table.insert(snakebody, {snakehead[1], snakehead[2] - 1})
  76.         elseif snakeface == "down" then
  77.             table.insert(snakebody, {snakehead[1], snakehead[2] + 1})
  78.         elseif snakeface == "right" then
  79.             table.insert(snakebody, {snakehead[1] + 1, snakehead[2]})
  80.         elseif snakeface == "left" then
  81.             table.insert(snakebody, {snakehead[1] - 1, snakehead[2]})
  82.         end
  83.  
  84.         fed = false
  85.     elseif fed == false then
  86.         if snakeface == "up" then
  87.             table.insert(snakebody, {snakehead[1], snakehead[2] - 1})
  88.             table.remove(snakebody, 1)
  89.         elseif snakeface == "down" then
  90.             table.insert(snakebody, {snakehead[1], snakehead[2] + 1})
  91.             table.remove(snakebody, 1)
  92.         elseif snakeface == "right" then
  93.             table.insert(snakebody, {snakehead[1] + 1, snakehead[2]})
  94.             table.remove(snakebody, 1)
  95.         elseif snakeface == "left" then
  96.             table.insert(snakebody, {snakehead[1] - 1, snakehead[2]})
  97.             table.remove(snakebody, 1)
  98.         end
  99.     end
  100.  
  101.     snakehead = {snakebody[table.maxn(snakebody)][1], snakebody[table.maxn(snakebody)][2]}
  102. end
  103.  
  104. local function snakelive()
  105.     local check = true
  106.  
  107.     for a = 1, #snakebody - 1 do
  108.         if snakehead[1] == snakebody[a][1] and snakehead[2] == snakebody[a][2] then
  109.             check = false
  110.         end
  111.     end
  112.  
  113.     if snakehead[1] < 1 or snakehead[1] > sx or snakehead[2] < 1 or snakehead[2] > sy then
  114.         check = false
  115.     end
  116.  
  117.     return check
  118. end
  119.  
  120. local function snaketime()
  121.     local timer = os.startTimer(0.14)
  122.  
  123.     local face = snakeface
  124.  
  125.     while true do
  126.         local event, par1 = os.pullEvent()
  127.  
  128.         if event == "timer" and par1 == timer then
  129.             if face == "up" and snakeface ~= "down" then
  130.                 snakeface = face
  131.             elseif face == "down" and snakeface ~= "up" then
  132.                 snakeface = face
  133.             elseif face == "right" and snakeface ~= "left" then
  134.                 snakeface = face
  135.             elseif face == "left" and snakeface ~= "right" then
  136.                 snakeface = face
  137.             end
  138.  
  139.             snakemove()
  140.  
  141.             break
  142.         elseif event == "key" and par1 == keys.up and face ~= "down" then
  143.             face = "up"
  144.         elseif event == "key" and par1 == keys.down and face ~= "up" then
  145.             face = "down"
  146.         elseif event == "key" and par1 == keys.right and face ~= "left" then
  147.             face = "right"
  148.         elseif event == "key" and par1 == keys.left and face ~= "right" then
  149.             face = "left"
  150.         end
  151.     end
  152. end
  153.  
  154. local function snakegame()
  155.     while snakelive() == true do
  156.         snakeshow()
  157.         snaketime()
  158.  
  159.         if snakehead[1] == food[1] and snakehead[2] == food[2] then
  160.             snakefeed()
  161.         end
  162.     end
  163.  
  164.     term.clear()
  165.     term.setCursorPos(1, 1)
  166.  
  167.     print("Score : "..#snakebody - 3)
  168.  
  169.     sleep(1)
  170. end
  171.  
  172. snakegame()
Advertisement
Comments
Add Comment
Please, Sign In to add comment
Advertisement