Matdupy

meteor_star

Aug 6th, 2021 (edited)
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.14 KB | None | 0 0
  1. print('Choose mode (debug, prod) : ')
  2. choice = read()
  3.  
  4. if choice == "debug" then
  5.     screen = peripheral.wrap("left")
  6.     debug = peripheral.wrap("bottom")
  7. else
  8.     screen = peripheral.wrap("monitor_0")
  9.     debug = peripheral.wrap("monitor_1")
  10. end
  11. width, height = screen.getSize()
  12. symbols = {"x", "+", "*"}
  13. max_star = 5
  14.  
  15. tail_borne = {min=2, max=8}
  16.  
  17. function draw_tail(base_pos, dir, tail_length)
  18.     local tail_char = ""
  19.     local side = 0
  20.     if dir == "W" then
  21.         tail_char = "/"
  22.         side = 1
  23.     else
  24.         tail_char = "\\"
  25.         side = -1
  26.     end
  27.     for l=1,tail_length,1 do
  28.         local m_x = base_pos.x + (side * l)
  29.         local m_y = base_pos.y - (1 * l)
  30.         screen.setCursorPos(m_x, m_y)
  31.         screen.write(tail_char)
  32.     end
  33. end
  34.  
  35. borne = {min=-4, max=width+4}
  36. borne.middle = borne.max / 2
  37.  
  38. function generate_meteor(speed)
  39.     x_pos = math.random(borne.min, borne.max)
  40.     n_dir = ""
  41.     if x_pos < borne.middle  then n_dir="E" else n_dir="W" end
  42.     meteor = {
  43.         pos={x=x_pos,y=-3},
  44.         speed=speed,
  45.         direction=n_dir,
  46.         tail_length=math.random(tail_borne.min, tail_borne.max)    
  47.     }
  48.     debug.setCursorPos(1,1)
  49.     debug.write(meteor.direction)
  50.     debug.setCursorPos(1,2)
  51.     debug.write("X : "..meteor.pos.x.."/ Y : "..meteor.pos.y)
  52.     return meteor
  53. end
  54.  
  55. function update_meteor(meteor)
  56.     if meteor.direction == "W" then
  57.         meteor.pos.x = meteor.pos.x - meteor.speed
  58.     else
  59.         meteor.pos.x = meteor.pos.x + meteor.speed
  60.     end
  61.     meteor.pos.y = meteor.pos.y + meteor.speed
  62.     screen.setCursorPos(meteor.pos.x, meteor.pos.y)
  63.     screen.write("O")
  64.     draw_tail(meteor.pos, meteor.direction, meteor.tail_length)
  65.     -- print(meteor.pos.x, meteor.pos.y)
  66.     -- sleep(0.1)
  67. end
  68.  
  69. meteor_tab = {
  70.     generate_meteor(1),
  71.     generate_meteor(1),
  72.     generate_meteor(1)
  73. }
  74.  
  75. function init_star_tab(star_count)
  76.     tab = {index=1, list={}}
  77.     for i=1, star_count,1 do
  78.         rand_x = math.random(1, width)
  79.         rand_y = math.random(1, height)
  80.         tab.list[i] = {rand_x, rand_y}
  81.     end
  82.     return tab
  83. end
  84.  
  85. start_char = {"/", "|", "\\"}
  86. end_char = {"\\", "|", "/"}
  87.  
  88. function draw_cadre(text_pos, text_w)
  89.     start_height = text_pos.y - 1
  90.     for h=0,2,1 do
  91.         new_line = ""
  92.         new_line = start_char[h+1]..new_line
  93.         for w=1,text_w,1 do
  94.             new_line = new_line.."-"
  95.         end
  96.         new_line = new_line..end_char[h+1]
  97.         screen.setCursorPos(text_pos.x-1, start_height+h)
  98.         screen.write(new_line)
  99.     end
  100. end
  101.  
  102. function generate_text(text, pos_y, dir)
  103.     return {
  104.         content=text,
  105.         pos={x=-#text, y=pos_y or height/2},
  106.         direction = dir or "none",
  107.         borne={min=(#text/2)+2,max=width-(#text/2)}
  108.     }
  109. end
  110.  
  111. function update_text_pos(text)
  112.     if text.direction ~= "none" then
  113.         if text.direction == "right" then
  114.             if text.pos.x < text.borne.max then
  115.                 text.pos.x = text.pos.x + 1
  116.             else
  117.                 text.direction = "left"
  118.             end
  119.         elseif text.direction == "left" then
  120.             if text.pos.x > text.borne.min then
  121.                 text.pos.x = text.pos.x - 1
  122.             else
  123.                 text.direction = "right"
  124.             end
  125.         end
  126.     else
  127.         print(text.content.."ne bouge pas")
  128.     end
  129. end
  130.  
  131. function text_middle_screen(text)
  132.     t_w = #text / 2
  133.     s_w = (width / 2) - (t_w)
  134.     s_h = (height / 2) - 1
  135.     -- screen.setCursorPos(s_w, s_h)
  136.     draw_cadre({x=s_w,y=s_h}, #text )
  137.     screen.setCursorPos(s_w, s_h)
  138.     screen.write(text)
  139. end
  140.  
  141. function draw_text(text_obj)
  142.     f_pos = {
  143.         x=text_obj.pos.x - #text_obj.content/2,
  144.         y=text_obj.pos.y - 1
  145.     }
  146.    
  147.     draw_cadre(f_pos, #text_obj.content)
  148.     screen.setCursorPos(f_pos.x, f_pos.y)
  149.     screen.write(text_obj.content)
  150. end
  151.  
  152.  
  153. function addStar(star_arr)
  154.     for i=1, #star_arr.list, 1 do
  155.         if i == star_arr.index then
  156.             pos_x = math.random(1,width)
  157.             pos_y = math.random(1,height)
  158.             star_arr.list[i] = {pos_x, pos_y}
  159.         end
  160.         next_x = star_arr.list[i][1]
  161.         next_y = star_arr.list[i][2]
  162.         screen.setCursorPos(next_x, next_y)
  163.         random_symbol = symbols[math.random(1, #symbols)]
  164.         screen.write(random_symbol)
  165.     end
  166.    
  167.     star_arr.index = star_arr.index + 1
  168.     if star_arr.index > #star_arr.list then
  169.         star_arr.index = 1
  170.     end
  171. end
  172.  
  173. test = init_star_tab(50)
  174.  
  175. function meteor_management(meteor, m_index)
  176.     if meteor.pos.y > height+10  or
  177.         meteor.pos.x > width+50 or
  178.         meteor.pos.x < -50 then
  179.         -- print('oui je me regenere')
  180.         meteor_tab[m_index] = generate_meteor(math.random(1,3))
  181.     else
  182.         update_meteor(meteor)
  183.     end
  184. end
  185.  
  186. center_text = generate_text("Bonjour a tous !", height/2, "right")
  187.  
  188. while true do
  189.     screen.clear()
  190.     addStar(test)
  191.     for ind=1,#meteor_tab,1 do
  192.         meteor_management(meteor_tab[ind], ind)
  193.     end
  194.     update_text_pos(center_text)
  195.     draw_text(center_text)
  196.     --text_middle_screen("Salut les p'tits amis ! ")
  197.     sleep(0.2)
  198. end
Add Comment
Please, Sign In to add comment