Guest User

bounce

a guest
Jul 18th, 2012
296
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.00 KB | None | 0 0
  1. -------------------------------
  2. -- logMcTime() and logIndent()
  3. -------------------------------
  4.  
  5. local function logMcTime ( logLine )
  6.     nTime = os.time()
  7.     mcTime = textutils.formatTime( nTime, true )
  8.     write (string.format ( "%-6s => %s", mcTime, logLine).."\n" )
  9. end
  10.  
  11. local function logIndent ( logLine )
  12.     write ( "         "..logLine.."\n" )
  13. end
  14.  
  15. -- global defines
  16. local monTab = { }
  17. local cursorSize = 3
  18. local directions =  { "top", "bottom", "left", "right", "front", "back" }
  19.  
  20. -------------------
  21. -- monDump()
  22. -------------------
  23.  
  24. local function monDump ( dumpMon )
  25.     local logLine="Monitor on "..dumpMon.SideUp.." is"
  26.  
  27.     if dumpMon.Connected == false then
  28.         logLine = logLine.." not connected!"
  29.     else
  30.         logLine = logLine.." connected!"
  31.     end
  32.    
  33.     logMcTime( logLine )
  34.  
  35.     if dumpMon.Connected == true then
  36. --        logMcTime( logLine )
  37.  
  38.         logLine = string.format( "WxH: %d x %d ITEMS: %d ", dumpMon.Width, dumpMon.Height, dumpMon.ItemCount).." "
  39. --        logIndent( logLine )
  40.         logIndent( logLine )
  41.     end
  42. end
  43.  
  44. -------------------
  45. -- itemInit()
  46. -------------------
  47.  
  48. local function itemInit ( monRef )
  49.     local newItem = {}
  50.     newItem.x = math.random ( monRef.Width - 3 )
  51.     newItem.y = math.random ( monRef.Height - 3 )
  52.     newItem.dx = 1
  53.     newItem.dy = 1
  54.     if math.random ( 0, 1) == 1 then
  55.         newItem.dx = newItem.dx * -1
  56.     end
  57.     if math.random ( 0, 1 ) == 1 then
  58.         newItem.dy = newItem.dy * -1
  59.     end
  60.  
  61.     return newItem
  62. end
  63.  
  64. -------------------
  65. -- monInit()
  66. -------------------
  67.  
  68. local function monInit ( Side )
  69.     local newMon = { }
  70.     newMon.Side = Side
  71.     newMon.SideUp = string.upper ( Side )
  72.     newMon.Connected = true
  73.  
  74.     -- check if monitor is connected
  75.     if peripheral.getType( newMon.Side ) ~= "monitor" then
  76.         newMon.Connected = false
  77.         monDump( newMon )
  78.         return newMon
  79.     end
  80.  
  81.     newMon.Handle = {}
  82.     newMon.Handle = peripheral.wrap( Side )
  83.     newMon.Handle.clear ( )
  84.     newMon.Handle.setCursorBlink( false )
  85.     newMon.Width, newMon.Height = newMon.Handle.getSize()
  86.     newMon.Items = {}
  87.  
  88.     newMon.ItemCount = math.random(5)+2
  89.     for i=1,newMon.ItemCount do
  90.       newMon.Items[i]=itemInit( newMon )
  91.     end
  92.  
  93.     monDump(newMon)
  94.     return newMon
  95. end
  96.  
  97. -------------------
  98. -- itemUpdate ()
  99. -------------------
  100. local function itemUpdate( Item, scrWidth, scrHeight )
  101.     Item.x = Item.x + Item.dx
  102.     Item.y = Item.y + Item.dy
  103.  
  104.     if Item.x <= 1 or Item.x >= scrWidth - cursorSize then
  105.         Item.dx = Item.dx * -1
  106.     end
  107.  
  108.     if Item.y <= 1 or Item.y >= scrHeight - cursorSize then
  109.         Item.dy = Item.dy * -1
  110.     end
  111.  
  112.     return Item
  113. end
  114.  
  115. -------------------
  116. -- cursorDraw ()
  117. -------------------
  118.  
  119. local function cursorDraw( monHandle, x, y, bReset )
  120.     local cursor = {}
  121.  
  122.     if bReset == true then
  123.         cursor = {"   ", "   ", "   "}
  124.     else
  125.         cursor = {"X X", " X ", "X X"}
  126.     end
  127.  
  128.     for i=1, 3 do
  129.         monHandle.setCursorPos( x, y+i )
  130.         monHandle.write(cursor[i])
  131.     end
  132. end
  133.  
  134. -------------------
  135. -- monUpdate()
  136. -------------------
  137. local function monUpdate(monRef)
  138.     if not monRef.Connected then
  139.         return monRef
  140.     end
  141.  
  142.     for i=1,#monRef.Items do
  143.         local Item = monRef.Items[i]
  144.         cursorDraw( monRef.Handle, Item.x, Item.y, true )
  145.         monRef.Items[i] = itemUpdate ( Item, monRef.Width, monRef.Height)
  146.         cursorDraw( monRef.Handle, Item.x, Item.y, false )
  147.     end
  148.    
  149.     return monRef
  150. end
  151.  
  152. -------------------
  153. -- gameLoop()
  154. -------------------
  155.  
  156. local function gameLoop ( monTab )
  157.     local gameEnding = false
  158.  
  159.     while gameEnding == false do
  160.         for i=1,#monTab do
  161.             monTab[i]=monUpdate(monTab[i])
  162.         end
  163.         sleep(0.03)
  164.     end
  165. end
  166.  
  167. -------------------
  168. -- main()
  169. -------------------
  170.  
  171. term.clear()
  172. term.setCursorPos( 1, 1 )
  173.  
  174. for i=1,#directions do
  175.     monTab[i] = monInit(directions[i]) 
  176. end
  177.  
  178. gameLoop ( monTab )
Advertisement
Add Comment
Please, Sign In to add comment