Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Game
- attr_accessor :scores, :primary_game, :balance, :winner
- SCORES = [0, 15, 30, 40].freeze
- def initialize
- self.winner = nil
- self.scores = [0,0]
- self.primary_game = true
- self.balance = 0
- end
- def point_won_by(player)
- return puts("The game is over!") if game_over?
- return unless correct_player?(player)
- puts "Player #{player} won a point!"
- if primary_game?
- increase_score_of(player)
- else
- move_balance_for(player)
- end
- end
- def score
- if !self.winner.nil?
- puts "Player #{self.winner} won!"
- elsif primary_game?
- puts scores.map{ |score| prettify(score) }.join(':')
- else
- case self.balance
- when 0
- puts 'deuce'
- when 1
- puts 'Player 1 advantage'
- when -1
- puts 'Player 2 advantage'
- when 2
- puts 'Player 1 won'
- when -2
- puts 'Player 2 won'
- end
- end
- end
- private
- def correct_player?(player)
- [1, 2].include? player
- end
- def increase_score_of(player)
- res = scores[player-1]+=1
- self.winner = player if res == 4
- self.primary_game = false if scores == [3, 3]
- end
- def move_balance_for(player)
- player == 1 ? self.balance += 1 : self.balance -= 1
- self.winner = player if self.balance.abs == 2
- end
- def prettify(score)
- SCORES[score]
- end
- def game_over?
- !self.winner.nil?
- end
- def primary_game?
- !!self.primary_game
- end
- end
- game = Game.new
- game.point_won_by 1
- game.point_won_by 1
- game.point_won_by 1
- puts game.score
- game.point_won_by 1
- puts game.score
- game = Game.new
- [1,2,1,2,1,2,1,2,2,1,2,2].each do |player|
- game.point_won_by player
- puts game.score
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement