Darkar25

DanceFloor

Aug 21st, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.12 KB | None | 0 0
  1. -- загружаем библиотеки и получаем прокси видеокарты
  2. local component = require("component")
  3. local event = require("event")
  4. local gpu = component.gpu
  5.  
  6. -- константы — размер экрана
  7. WIDTH = 80
  8. HEIGHT = 60
  9.  
  10. --============================  Ф У Н К Ц И И  ==============================--
  11. -- отрисовка кругов
  12. function draw()
  13.     -- очищаем экран
  14.     gpu.setBackground(0x000000)
  15.     gpu.fill(1, 1, WIDTH*2, HEIGHT, " ")
  16.    
  17.     -- рисуем все круги
  18.     for i=#circles, 1, -1 do
  19.         local x = circles[i][1]+1
  20.         local y = circles[i][2]-circles[i][4]+2
  21.         gpu.setBackground(circles[i][3])
  22.        
  23.         for c=1, (circles[i][4]-1)*4 do
  24.             -- рисуется один "пиксель" круга
  25.             if x>0 and x<=(WIDTH*2) then
  26.                 if y>0 and y<=HEIGHT then
  27.                     gpu.set((x-1)*2+1, y, "  ")
  28.                 end
  29.             end
  30.             -- следующий "пиксель" круга
  31.             if x>circles[i][1] then
  32.                 if y<circles[i][2] then
  33.                     x = x+1
  34.                 else
  35.                     x = x-1
  36.                 end
  37.                 y = y+1
  38.             else
  39.                 if y>circles[i][2] then
  40.                     x = x-1
  41.                 else
  42.                     x = x+1
  43.                 end
  44.                 y = y-1
  45.             end
  46.         end
  47.         -- обновление (круги увеличиваются в диаметре, если диаметр
  48.         -- становится больше 8, круг удаляется)
  49.         circles[i][4] = circles[i][4] + 1
  50.         if circles[i][4] > WIDTH then table.remove(circles, i) end
  51.     end
  52. end
  53.  
  54. -- функция, которая конвертирует цвет в формате RGB в соответствующее
  55. -- ему шестнадцатеричное значение
  56. function rgb2hex(r, g, b)
  57.     return r*65536+g*256+b
  58. end
  59. --===========================================================================--
  60.  
  61. -- устанавливаем разрешение "танцпола"
  62. gpu.setResolution(WIDTH*2, HEIGHT)
  63. gpu.fill(1, 1, 16, 6, " ")
  64.  
  65. -- таблица в которой будут храниться круги
  66. circles = {}
  67.  
  68. -- главный цикл
  69. while true do
  70.     -- обработка сигналов
  71.     _, _, code, _, _ = event.pull(0.01, "key_down")
  72.     _, _, x, y = event.pull(0.03, "walk")
  73.    
  74.     -- если получен сигнал walk создаем новый круг
  75.     if x ~= nil then
  76.         table.insert(circles, {x, y, rgb2hex(math.random(255), math.random(255), math.random(255)), 1})
  77.     end
  78.    
  79.     -- отрисовываем кадр
  80.     draw()
  81.    
  82.     -- выход из программы, если была нажата кнопка Q
  83.     if code == 113 then break end
  84. end
  85.  
  86. -- возвращаем монитор к нормальному состоянию =)
  87. gpu.setBackground(0x000000)
  88. gpu.fill(1, 1, WIDTH*2, HEIGHT, " ")
  89. gpu.setResolution(gpu.maxResolution())
Add Comment
Please, Sign In to add comment