Advertisement
Guest User

Untitled

a guest
Mar 2nd, 2015
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.00 KB | None | 0 0
  1. brickScaleX = 3
  2.  
  3. function DrawPaddle (x, y, color)
  4. paintutils.drawPixel(x - 2, y, color)
  5. paintutils.drawPixel(x - 1, y, color)
  6. paintutils.drawPixel(x, y, color)
  7. paintutils.drawPixel(x + 1, y, color)
  8. paintutils.drawPixel(x + 2, y, color)
  9. end
  10.  
  11. function DrawBlocks (blocks, blocks_horizontal)
  12. for i = 1, #blocks do
  13. local x, y
  14. x = math.floor((i % blocks_horizontal - 1) * brickScaleX) + 1
  15. y = math.floor(i / blocks_horizontal)
  16. paintutils.drawPixel(x, y, blocks[i])
  17. paintutils.drawPixel(x + 1, y, blocks[i])
  18. paintutils.drawPixel(x + 2, y, blocks[i])
  19. end
  20. end
  21.  
  22. function Game ()
  23. local blocks = {}
  24.  
  25. -- Get terminal size
  26. local width, height = term.getSize()
  27.  
  28. -- Set game size
  29. local blocks_horizontal = math.floor(width / brickScaleX)
  30. local blocks_vertical = math.floor(height * .4)
  31.  
  32. local paddleX = math.floor(blocks_horizontal / 2)
  33. local paddlePrevX = 1
  34.  
  35. local ballX = paddleX
  36. local ballY = height - 2
  37. local velocity = 1
  38. local angle = math.pi / -4
  39.  
  40. local prevX = 1
  41. local prevY = math.floor(height * .6) -- Put inital value off in the woods so it doesn't mess with anything
  42.  
  43. local score = 0
  44.  
  45. -- Randomize blocks
  46. for j=1, blocks_vertical do
  47. for i=1, blocks_horizontal do
  48. blocks[i + (j-1) * blocks_horizontal] = bit.blshift(1, math.random(0, 14))
  49. end
  50. end
  51.  
  52. -- Clear screen
  53. term.clear()
  54.  
  55. -- Main loop
  56. while true do
  57. -- Erase old positions
  58. DrawPaddle (paddlePrevX * brickScaleX, height - 1, colors.black)
  59. paintutils.drawPixel(prevX * brickScaleX, prevY, colors.black)
  60.  
  61. -- Update screen
  62. DrawBlocks (blocks, blocks_horizontal)
  63. DrawPaddle (paddleX * brickScaleX, height - 1, colors.yellow)
  64. paintutils.drawPixel(ballX * brickScaleX, ballY, colors.white)
  65. term.setCursorPos(1, height)
  66. term.write('Score: ' .. score .. ' ' .. velocity .. ' ' .. angle)
  67.  
  68. -- Save old position
  69. prevX = ballX
  70. prevY = ballY
  71.  
  72. -- Convert velocity vector to rectangular
  73. velX = velocity * math.cos(angle)
  74. velY = velocity * math.sin(angle)
  75.  
  76. -- Move ball
  77. ballX = ballX + velX
  78. ballY = ballY + velY
  79.  
  80. -- Check collision with walls
  81. if ballX <= 1 or (ballX * brickScaleX) >= width then
  82. velX = -1 * velX
  83. end
  84. if ballY <= 1 or ballY >= height then
  85. velY = -1 * velY
  86. end
  87.  
  88. -- Check for collision with balls
  89. for i = 1, #blocks do
  90. if blocks[i] ~= colors.black then
  91. local blockX, blockY
  92. blockX = math.floor((i % blocks_horizontal - 1)) + 1
  93. blockY = math.floor(i / blocks_horizontal)
  94.  
  95. if blockX == math.floor(ballX) and blockY == math.floor(ballY) then
  96. blocks[i] = colors.black
  97. score = score + 100
  98. if velY <= 0 then
  99. velY = -1 * velY
  100. end
  101. end
  102. end
  103. end
  104.  
  105. -- Convert velocity vector back to polar
  106. --velocity = math.sqrt(math.pow(velX, 2) + math.pow(velY, 2))
  107. angle = math.tan(velX / velY)
  108.  
  109. -- Change velocity based on score
  110. velocity = math.floor(1 + score * 0.0005)
  111.  
  112. -- Sleep until next tick
  113. os.sleep(0.25)
  114. end
  115. end
  116.  
  117. Game()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement