Advertisement
Guest User

Untitled

a guest
Mar 2nd, 2015
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.12 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.setBackgroundColor(colors.black)
  67. term.write('Score: ' .. score .. ' ' .. velocity .. ' ' .. angle)
  68.  
  69. -- Save old position
  70. prevX = ballX
  71. prevY = ballY
  72.  
  73. -- Convert velocity vector to rectangular
  74. velX = velocity * math.cos(angle)
  75. velY = velocity * math.sin(angle)
  76.  
  77. -- Move ball
  78. ballX = ballX + velX
  79. ballY = ballY + velY
  80.  
  81. -- Check collision with walls
  82. if ballX <= 1 or (ballX * brickScaleX) >= width then
  83. velX = -1 * velX
  84. ballX = prevX + velX
  85. end
  86. if ballY <= 1 or ballY >= height then
  87. velY = -1 * velY
  88. ballY = prevY + velY
  89. end
  90.  
  91. -- Check for collision with balls
  92. for i = 1, #blocks do
  93. if blocks[i] ~= colors.black then
  94. local blockX, blockY
  95. blockX = math.floor((i % blocks_horizontal - 1)) + 1
  96. blockY = math.floor(i / blocks_horizontal)
  97.  
  98. if blockX == math.floor(ballX) and blockY == math.floor(ballY) then
  99. blocks[i] = colors.black
  100. score = score + 100
  101. if velY <= 0 then
  102. velY = -1 * velY
  103. ballY = prevY + velY
  104. end
  105. end
  106. end
  107. end
  108.  
  109. -- Convert velocity vector back to polar
  110. --velocity = math.sqrt(math.pow(velX, 2) + math.pow(velY, 2))
  111. angle = math.atan(velX / velY)
  112.  
  113. -- Change velocity based on score
  114. velocity = math.floor(1 + score * 0.0005)
  115.  
  116. -- Sleep until next tick
  117. os.sleep(0.25)
  118. end
  119. end
  120.  
  121. Game()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement