diff --git a/ecarte_traditionnel.pdf b/ecarte_traditionnel.pdf deleted file mode 100644 index 7201a18..0000000 Binary files a/ecarte_traditionnel.pdf and /dev/null differ diff --git a/lib/card.rb b/lib/card.rb new file mode 100644 index 0000000..5e81a07 --- /dev/null +++ b/lib/card.rb @@ -0,0 +1,32 @@ + #!/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 + diff --git a/lib/deck.rb b/lib/deck.rb new file mode 100644 index 0000000..08e08af --- /dev/null +++ b/lib/deck.rb @@ -0,0 +1,26 @@ + #!/usr/bin/env ruby + +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 + diff --git a/lib/game.rb b/lib/game.rb new file mode 100644 index 0000000..6e6e67e --- /dev/null +++ b/lib/game.rb @@ -0,0 +1,90 @@ + #!/usr/bin/env ruby + +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 + @player1.clear_hand + @player2.clear_hand + + @deck = Deck.new + @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 + diff --git a/lib/player.rb b/lib/player.rb new file mode 100644 index 0000000..fb29079 --- /dev/null +++ b/lib/player.rb @@ -0,0 +1,28 @@ +#!/usr/bin/env ruby + +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 clear_hand + @hand.clear + end + + def play + @hand.pop + end + + def add_point + @score += 1 + end +end + diff --git a/main.rb b/main.rb new file mode 100644 index 0000000..5f36806 --- /dev/null +++ b/main.rb @@ -0,0 +1,36 @@ + #!/usr/bin/env ruby + +require_relative "lib/card" +require_relative "lib/deck" +require_relative "lib/player" +require_relative "lib/game" + +# Instance du jeu +game = Game.new("Alice", "Bob") + +game.determine_dealer +puts "The dealer is #{game.dealer.player_name}." +game.deal +puts "#{game.player1.player_name} has #{game.player1.hand.count} cards." +puts "#{game.player2.player_name} has #{game.player2.hand.count} cards." +puts "The stock has #{game.stock.length} cards." +puts +game.change_dealer +puts "The dealer is #{game.dealer.player_name}." +game.deal +puts "#{game.player1.player_name} has #{game.player1.hand.count} cards." +puts "#{game.player2.player_name} has #{game.player2.hand.count} cards." +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 + diff --git a/script.rb b/script.rb deleted file mode 100644 index 1d35bdf..0000000 --- a/script.rb +++ /dev/null @@ -1,202 +0,0 @@ -#!/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 clear_hand - @hand.clear - 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 - @player1.clear_hand - @player2.clear_hand - - @deck = Deck.new - @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}." -game.deal -puts "#{game.player1.player_name} has #{game.player1.hand.count} cards." -puts "#{game.player2.player_name} has #{game.player2.hand.count} cards." -puts "The stock has #{game.stock.length} cards." -puts -game.change_dealer -puts "The dealer is #{game.dealer.player_name}." -game.deal -puts "#{game.player1.player_name} has #{game.player1.hand.count} cards." -puts "#{game.player2.player_name} has #{game.player2.hand.count} cards." -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 -