Ajoute les commentaires et la documentation RDoc

This commit is contained in:
julien committed 2026-10-08 19:42:56 +02:00
1 parent 5cf2d683e7
commit dbd8c51412
56 files changed
+3601 -17

No files matched your search

+3
View File
@@ -1,3 +1,4 @@
# Représente une carte à jouer avec sa valeur et sa couleur.
class Card
attr_reader :value, :suit
@@ -6,10 +7,12 @@ class Card
@suit = suit
end
# Retourne une représentation de la carte sous forme de string.
def to_s
"#{@value} of #{@suit}"
end
# Retourne la force de la carte sous forme d'integer.
def strength
if @value.match?(/\A\d+\z/)
@value.to_i
+3
View File
@@ -1,5 +1,6 @@
require_relative "card"
# Représente un paquet de cartes et gère son contenu.
class Deck
attr_reader :cards
@@ -15,10 +16,12 @@ class Deck
end
end
# Mélange les cartes du paquet.
def shuffle
@cards.shuffle!
end
# Retire et retourne la dernière carte du paquet.
def draw
@cards.pop
end
+12 -2
View File
@@ -2,6 +2,7 @@ require_relative "deck"
require_relative "player"
require_relative "terminal_ui"
# Gère le déroulement et les règles d'une partie d'Écarté.
class Game
attr_reader :player1, :player2, :dealer, :non_dealer,
:upcard, :trump_suit, :trick_winner
@@ -18,6 +19,7 @@ class Game
@ui = TerminalUI.new
end
# Simule une coupe pour déterminer quel joueur sera le donneur.
def determine_dealer
@deck.shuffle
@@ -35,12 +37,14 @@ class Game
end
end
# Échange les rôles de donneur et de non-donneur.
def change_dealer
old_dealer = @dealer
@dealer = @non_dealer
@non_dealer = old_dealer
end
# Distribue les cartes et pose la retourne.
def deal
@player1.clear_hand
@player2.clear_hand
@@ -56,10 +60,12 @@ class Game
@trump_suit = @upcard.suit
end
# Retourne les cartes restantes dans le talon.
def stock
@deck.cards
end
# Vérifie si le coup du second joueur respecte les règles.
def valid_follow_card?(follow_player, lead_card, follow_card)
if follow_card.suit == lead_card.suit
true
@@ -70,6 +76,7 @@ class Game
end
end
# Joue un pli.
def play_trick(lead_player, follow_player)
lead_card = @ui.choose_card(lead_player)
follow_card = @ui.choose_card(follow_player)
@@ -94,10 +101,12 @@ class Game
@ui.display_trick_winner(@trick_winner)
end
# Retourne l'autre joueur.
def other_player(player)
player == @player1 ? @player2 : @player1
end
# Joue une partie.
def play
lead_player = @non_dealer
follow_player = @dealer
@@ -105,11 +114,12 @@ class Game
5.times do
play_trick(lead_player, follow_player)
lead_player = @trick_winner
follow_player = other_player(lead_player)
lead_player = @trick_winner
follow_player = other_player(lead_player)
end
end
# Retourne le joueur ayant le meilleur score.
def game_winner
if @player1.score > @player2.score
@player1
+5
View File
@@ -1,3 +1,4 @@
# Représente un joueur, sa main et son score.
class Player
attr_reader :name, :hand, :score
@@ -7,18 +8,22 @@ class Player
@score = 0
end
# Ajoute une carte à la main du joueur.
def receive(card)
@hand << card
end
# Vide la main du joueur.
def clear_hand
@hand.clear
end
# Retire une carte de la main du joueur.
def play(card)
@hand.delete(card)
end
# Ajoute un point au joueur.
def add_point
@score += 1
end
+6
View File
@@ -1,4 +1,7 @@
# Gère l'affichage et les saisies dans le terminal.
class TerminalUI
# Demande au joueur de choisir une carte et la retourne.
def choose_card(player)
player.hand.each_with_index do |card, index|
puts "#{index + 1}. #{card}"
@@ -10,15 +13,18 @@ class TerminalUI
player.hand[choice - 1]
end
# Affiche un avertissement si le coup joué ne respecte pas les règles.
def display_wrong_card
puts "You cannot play this card."
end
# Affiche le joueur ayant remporté le pli.
def display_trick_winner(player)
puts "#{player.name} wins the trick."
puts
end
# Affiche les informations de débogage.
def debug_game(game)
puts "Dealer: #{game.dealer.name}"
puts "Non-dealer: #{game.non_dealer.name}"