#!/usr/bin/env ruby class Card attr_reader :value, :suit def initialize(value, suit) @value = value @suit = suit end def to_s "#{@value} of #{@suit}" end def strength if @value.match?(/\A\d+\z/) @value.to_i else case @value when "ace" 11 when "jack" 12 when "queen" 13 when "king" 14 end end end end class Deck attr_reader :cards def initialize @cards = [] values = ["7", "8", "9", "10", "ace", "jack", "queen", "king"] 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, :hand, :score def initialize(player_name) @hand = [] @player_name = player_name @score = 0 end def receive(card) @hand << card end def play @hand.pop end def add_point @score += 1 end end class Game attr_reader :player1, :player2, :dealer, :non_dealer, :upcard, :trump_suit, :round_winner def initialize(player_name1, player_name2) @deck = Deck.new @player1 = Player.new(player_name1) @player2 = Player.new(player_name2) @dealer = nil @non_dealer = nil @upcard = nil @trump_suit = nil @round_winner = nil end def determine_dealer @deck.shuffle while @dealer.nil? card1 = @deck.cards[rand(2..30) -1] card2 = @deck.cards[rand(2..30) -1] if card1.strength > card2.strength @dealer = @player1 @non_dealer = @player2 elsif card2.strength > card1.strength @dealer = @player2 @non_dealer = @player1 end end end def change_dealer old_dealer = @dealer @dealer = @non_dealer @non_dealer = old_dealer end def deal @deck.shuffle 5.times do @non_dealer.receive(@deck.draw) @dealer.receive(@deck.draw) end @upcard = @deck.draw @trump_suit = @upcard.suit end def stock @deck.cards end def play_round card1 = @player1.play card2 = @player2.play puts card1 puts card2 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 5.times 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 ############################################################################### # Tests # Instance du jeu game = Game.new("Alice", "Bob") game.determine_dealer puts "The dealer is #{game.dealer.player_name}." puts game.deal puts "The stock has #{game.stock.length} cards." game.change_dealer puts "The dealer is #{game.dealer.player_name}." puts game.deal puts "The stock has #{game.stock.length} cards." # Mise en place du jeu # puts "#{game.player1.player_name} has :" # puts # puts "#{game.player2.player_name} has :" # puts game.player2.hand # puts # puts "Upcard is #{game.upcard} so the trump suit is #{game.trump_suit}." # puts # puts "The stock has #{game.stock.length} cards :" # puts # puts game.stock