Guest User

Untitled

a guest
Feb 18th, 2018
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.52 KB | None | 0 0
  1. require 'rubygems'
  2. require 'ray'
  3.  
  4. WIDTH = 800
  5. HEIGHT = 800
  6. PADDLE_X_OFFSET = 40
  7. PADDLE_WIDTH = 40
  8. BALL_RADIUS = 20
  9. SCORE_TEXT_X_OFFSET = 40
  10.  
  11. def paddle(paddle_x_coord, paddle_y_coord)
  12. arguments_array = [paddle_x_coord, paddle_y_coord, PADDLE_WIDTH, HEIGHT / 3]
  13. Ray::Polygon.rectangle(arguments_array, Ray::Color.white)
  14. end
  15.  
  16. def ball
  17. Ray::Polygon.circle([WIDTH/2, HEIGHT/2], BALL_RADIUS, Ray::Color.white)
  18. end
  19.  
  20. def center_x_pos
  21. WIDTH / 2
  22. end
  23.  
  24. def pixels_left_of_center(num_pixels)
  25. center_x_pos - num_pixels
  26. end
  27.  
  28. def pixels_right_of_center(num_pixels)
  29. center_x_pos + num_pixels
  30. end
  31.  
  32. def adjust_paddle_height_by(paddle, delta)
  33. pos = paddle.pos
  34. pos.height += delta
  35. paddle.pos = pos
  36. end
  37.  
  38. def move_paddle_up(paddle)
  39. pos = paddle.pos
  40. pos.height = pos.height - 3
  41. paddle.pos = pos
  42. # Need to return the paddle otherwise it chokes on some NilClass thing
  43. # paddle
  44. end
  45.  
  46. def move_paddle_down(paddle)
  47. adjust_paddle_height_by(paddle, 3)
  48. # Need to return the paddle otherwise it chokes on some NilClass thing
  49. paddle
  50. end
  51.  
  52. def middle_line
  53. line_width = 5
  54. line_x_pos = center_x_pos
  55. Ray::Polygon.line([line_x_pos, 0], [line_x_pos, HEIGHT], line_width, Ray::Color.white)
  56. end
  57.  
  58. Ray.game 'Pong', :size => [WIDTH, HEIGHT] do
  59. register { add_hook(:quit, method(:exit!)) }
  60.  
  61. scene :start do
  62. def left_paddle_up; key(:d); end
  63. LEFT_PADDLE_DOWN = :c
  64. LEFT_PADDLE_UP = :d
  65.  
  66. RIGHT_PADDLE_UP = :up
  67. RIGHT_PADDLE_DOWN = :down
  68.  
  69.  
  70. @left_paddle = paddle(PADDLE_X_OFFSET, 100)
  71. @right_paddle = paddle(WIDTH - (PADDLE_X_OFFSET + PADDLE_WIDTH), 100)
  72. @ball = ball
  73. @left_score = text "left", :at => [pixels_left_of_center(SCORE_TEXT_X_OFFSET), 20], :size => 20
  74. @right_score = text "right", :at => [pixels_right_of_center(SCORE_TEXT_X_OFFSET), 20], :size => 20
  75. @middle_line = middle_line
  76.  
  77. @scores = [@left_score, @right_score]
  78.  
  79. always do
  80. # Left paddle
  81. if holding?(LEFT_PADDLE_UP)
  82. move_paddle_up(@left_paddle)
  83. elsif holding?(LEFT_PADDLE_DOWN)
  84. move_paddle_down(@left_paddle)
  85. end
  86.  
  87. # Right paddle
  88. if holding?(RIGHT_PADDLE_UP)
  89. move_paddle_up(@right_paddle)
  90. elsif holding?(RIGHT_PADDLE_DOWN)
  91. move_paddle_down(@right_paddle)
  92. end
  93. end
  94.  
  95. # Exit when q is pressed
  96. on :key_press, key(:q){ exit! }
  97.  
  98. render do |win|
  99. win.draw @left_paddle
  100. win.draw @right_paddle
  101. win.draw @ball
  102. win.draw @middle_line
  103.  
  104. @scores.each{|score| win.draw score }
  105. end
  106. end
  107.  
  108. scenes << :start
  109. end
Add Comment
Please, Sign In to add comment