first commit

This commit is contained in:
julien committed 2026-10-04 22:43:45 +02:00
commit 9954b34ae3
2 files changed
+173

No files matched your search

+2
View File
@@ -0,0 +1,2 @@
# Écarté
+171
View File
@@ -0,0 +1,171 @@
#!/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