#!/usr/bin/env ruby class Card attr_reader :value, :suit def initialize(value, suit) @value = value @suit = suit end def display puts "#{@value} of #{@suit}" end def strength if @value.match?(/\A\d+\z/) @value.to_i else case @value when "jack" 11 when "queen" 12 when "king" 13 when "ace" 14 end end end end class Deck attr_reader :cards def initialize @cards = [] values = ["7", "8", "9", "10", "jack", "queen", "king", "ace"] suits = ["hearts", "diamonds", "clubs", "spades"] suits.each do |suit| values.each do |value| @cards << Card.new(value, suit) end end end def shuffle @cards.shuffle! end def draw @cards.pop end end class Player attr_reader :player_name, :score def initialize(player_name) @hand = [] @player_name = player_name @score = 0 end def receive(card) @hand << card end def display_hand @hand.each do |card| card.display end end def play @hand.pop end def add_point @score += 1 end end class Game attr_reader :player1, :player2, :round_winner def initialize(player_name1, player_name2) @deck = Deck.new @player1 = Player.new(player_name1) @player2 = Player.new(player_name2) @round_winner = nil end def deal @deck.shuffle (1..16).each do @player1.receive(@deck.draw) @player2.receive(@deck.draw) end end def play_round card1 = @player1.play card2 = @player2.play card1.display card2.display if card1.strength > card2.strength @round_winner = @player1 elsif card1.strength < card2.strength @round_winner = @player2 else @round_winner = nil end if @round_winner @round_winner.add_point end end def play (1..16).each do play_round end end def game_winner if @player1.score > @player2.score @player1 elsif @player1.score < @player2.score @player2 else nil end end end # Card # card = Card.new("king", "hearts") # puts card.value # puts card.suit # card.display # puts card.strength # Deck # deck = Deck.new # deck.shuffle # card = deck.draw # card.display # Game game = Game.new("Bob", "Alice") game.deal puts "Player 1 :" game.player1.display_hand puts puts "Player 2 :" game.player2.display_hand puts game.play puts winner = game.game_winner if winner puts winner.player_name else puts "Nobody wins" end