Advertisement
Guest User

Untitled

a guest
Oct 14th, 2019
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.65 KB | None | 0 0
  1. class Game
  2. attr_accessor :scores, :primary_game, :balance, :winner
  3. SCORES = [0, 15, 30, 40].freeze
  4.  
  5. def initialize
  6. self.winner = nil
  7. self.scores = [0,0]
  8. self.primary_game = true
  9. self.balance = 0
  10. end
  11.  
  12. def point_won_by(player)
  13. return puts("The game is over!") if game_over?
  14. return unless correct_player?(player)
  15. puts "Player #{player} won a point!"
  16. if primary_game?
  17. increase_score_of(player)
  18. else
  19. move_balance_for(player)
  20. end
  21. end
  22.  
  23. def score
  24. if !self.winner.nil?
  25. puts "Player #{self.winner} won!"
  26. elsif primary_game?
  27. puts scores.map{ |score| prettify(score) }.join(':')
  28. else
  29. case self.balance
  30. when 0
  31. puts 'deuce'
  32. when 1
  33. puts 'Player 1 advantage'
  34. when -1
  35. puts 'Player 2 advantage'
  36. when 2
  37. puts 'Player 1 won'
  38. when -2
  39. puts 'Player 2 won'
  40. end
  41. end
  42.  
  43. end
  44.  
  45. private
  46.  
  47. def correct_player?(player)
  48. [1, 2].include? player
  49. end
  50.  
  51. def increase_score_of(player)
  52. res = scores[player-1]+=1
  53. self.winner = player if res == 4
  54. self.primary_game = false if scores == [3, 3]
  55. end
  56.  
  57. def move_balance_for(player)
  58. player == 1 ? self.balance += 1 : self.balance -= 1
  59. self.winner = player if self.balance.abs == 2
  60. end
  61.  
  62. def prettify(score)
  63. SCORES[score]
  64. end
  65.  
  66. def game_over?
  67. !self.winner.nil?
  68. end
  69.  
  70. def primary_game?
  71. !!self.primary_game
  72. end
  73. end
  74.  
  75. game = Game.new
  76. game.point_won_by 1
  77. game.point_won_by 1
  78. game.point_won_by 1
  79. puts game.score
  80. game.point_won_by 1
  81. puts game.score
  82.  
  83. game = Game.new
  84. [1,2,1,2,1,2,1,2,2,1,2,2].each do |player|
  85. game.point_won_by player
  86. puts game.score
  87. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement