Séparé les classes dans des fichiers
This commit is contained in:
1 parent
df544cdd49
commit
8a1e56e85e
7 files changed
+212
-202
No files matched your search
Binary file not shown.
+32
@@ -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
|
||||||
|
|
||||||
+26
@@ -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
|
||||||
|
|
||||||
+90
@@ -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
|
||||||
|
|
||||||
@@ -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
|
||||||
|
|
||||||
@@ -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
|
||||||
|
|
||||||
@@ -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
|
|
||||||
|
|
||||||
Reference in new issue
Block a user