Advertisement
Guest User

Snowman

a guest
Dec 11th, 2015
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.89 KB | None | 0 0
  1. local component = require("component")
  2. local hologram = component.hologram
  3. local c1 = 20
  4. local MAX_N = 250 -- задаем максимальное значение выполнения цикла отрисовки снежинок
  5. local n = 0 --счетчик
  6. --моделируем Снеговика
  7. local tSnowman = {10,10,11,11,11,12,12,12,12,11,11,11,10,9,8,7,6,7,8,8,9,9,9,9,9,8,8,7,6,7,6,6,6,6,6,6}
  8.  
  9.  
  10. --палитра цветов
  11. hologram.setPaletteColor(1, 0xFFFFFF)--белый
  12. hologram.setPaletteColor(2, 0x8B0000)--бардовый
  13. hologram.setPaletteColor(3, 0xFFA500)--оранжевый
  14.  
  15. --цикл рисования круга так же взаимствован у Doob
  16. local function circle(x0, y, z0, R, i)
  17.   local x = R
  18.   local z = 0
  19.   local err = -R
  20.   while z <= x do
  21.     hologram.set(x + x0, y, z+z0, i)
  22.     hologram.set(z + x0, y, x + z0, i)
  23.     hologram.set(-x + x0, y, z + z0, i)
  24.     hologram.set(-z + x0, y, x + z0, i)
  25.     hologram.set(-x + x0, y, -z + z0, i)
  26.     hologram.set(-z + x0, y, -x + z0, i)
  27.     hologram.set(x + x0, y, -z + z0, i)
  28.     hologram.set(z + x0, y, -x + z0, i)
  29.     z = z+1
  30.     if err <= 0 then
  31.       err = err + (2 * z + 1)
  32.     else
  33.       x = x - 1
  34.       err = err + (2 * (z - x) + 1)
  35.     end
  36.   end
  37. end
  38. --рисуем пуговицы они же глаза
  39. local function stud(x, y0, z0, i)
  40.   for y = 0, 1 do
  41.     for z = 0, 1 do
  42.       hologram.set(x, y0-y, z0-z, i)
  43.     end
  44.   end
  45. end
  46. -- рисуем снеговика
  47. local function snowman()
  48.   for i = 1, 30 do
  49.     circle(c1,i,c1, tSnowman[i], 1)--отрисовываем основу снеговика
  50.   end
  51.   for i = 30, #tSnowman do
  52.     circle(c1,i,c1, tSnowman[i], 2)--рисуем шапку
  53.   end
  54.   --рисуем глаза
  55.   stud(29, 23, 23, 3)
  56.   stud(29, 23, 17, 3)
  57.   --рисуем морковку
  58.   for x = 1, 6  do
  59.     for y = 1, 2 do
  60.       for z = 1, 2 do
  61.         hologram.set(27+x, 18+z, 18+y, 3)
  62.       end
  63.     end
  64.   end
  65.   -- правая рука
  66.   for x = 1, 7 do
  67.     for y = 1, 2 do
  68.       hologram.set(20+y, 10+x, 10-x, 3)
  69.     end
  70.   end
  71.   -- левая рука
  72.   for x = 1, 7 do
  73.     for y = 1, 2 do
  74.       hologram.set(20-y, 10+x, 31+x, 3)
  75.     end
  76.   end
  77.   --рисуем пуговицы
  78.   stud(30, 14, 20, 2)
  79.   stud(32, 10, 20, 2)
  80.   stud(32, 6, 20, 2)
  81.  
  82. end
  83.  
  84. local tSnow = {}
  85.  
  86. local function gen_snow() -- генерируем снежинку
  87.   local x, y, z = math.random(1, 46), 32, math.random(1, 46)
  88.   table.insert(tSnow,{x=x,y=y,z=z})
  89.   hologram.set(x, y, z, 1)
  90. end
  91.  
  92. local function falling_snow() -- сдвигаем снежинки вниз
  93.   local i=1
  94.   while i<=#tSnow do
  95.     if tSnow[i].y>1 then
  96.   local x,y,z=tSnow[i].x+math.random(-1, 1), tSnow[i].y-1, tSnow[i].z+math.random(-1, 1)
  97.   if x<1 then x=1 end
  98.   if x>46 then x=46 end
  99.   if z<1 then z=1 end
  100.   if z>46 then z=46 end
  101.   c=hologram.get(x, y, z)
  102.   if c==0 or c==1 then
  103.           hologram.set(tSnow[i].x, tSnow[i].y, tSnow[i].z, 0)
  104.     tSnow[i].x, tSnow[i].y, tSnow[i].z=x,y,z
  105.           hologram.set(x, y, z, 1)
  106.           i=i+1
  107.         else
  108.     table.remove(tSnow,i)
  109.         end  
  110.      else
  111.   table.remove(tSnow,i)
  112.      end
  113.      os.sleep(0)
  114.   end
  115. end
  116.  
  117.  
  118. hologram.clear()
  119.  
  120. function setHologram()
  121. print("Запускаю отрисовку...")
  122. snowman()
  123. t = 0 --снежинки бьют дыры в белом снеговике, а отрисовывать его  каждой анимацией
  124.       --глупо, поэтому создадим счетчик и каждые 20 тактов будем его перерисовывать
  125. while n<MAX_N do
  126.   gen_snow()
  127.   falling_snow()
  128.   t = t + 1
  129.   if t == 20 then
  130.     t = 0
  131.     snowman()
  132.   end
  133.   n = n + 1
  134. end
  135. snowman()
  136. print("Цикл завершен!")
  137.  
  138. if n == MAX_N then
  139.   print("Ухожу в сон")
  140.   os.sleep(360)--отправляем анимацию в сон на час
  141.   n = 0
  142.   tSnow = {} --обнуляем снег
  143.   print("Просыпаюсь")
  144.   setHologram()
  145. end
  146. print("Прервано")
  147. end
  148.  
  149. setHologram()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement