class Game
Gère le déroulement et les règles d’une partie d’Écarté.
Attributes
Public Class Methods
Source
# File lib/game.rb, line 10 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 @trick_winner = nil @ui = TerminalUI.new end
Public Instance Methods
Source
# File lib/game.rb, line 41 def change_dealer old_dealer = @dealer @dealer = @non_dealer @non_dealer = old_dealer end
Échange les rôles de donneur et de non-donneur.
Source
# File lib/game.rb, line 48 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
Distribue les cartes et pose la retourne.
Source
# File lib/game.rb, line 23 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
Simule une coupe pour déterminer quel joueur sera le donneur.
Source
# File lib/game.rb, line 123 def game_winner if @player1.score > @player2.score @player1 elsif @player1.score < @player2.score @player2 else nil end end
Retourne le joueur ayant le meilleur score.
Source
# File lib/game.rb, line 105 def other_player(player) player == @player1 ? @player2 : @player1 end
Retourne l’autre joueur.
Source
# File lib/game.rb, line 110 def play lead_player = @non_dealer follow_player = @dealer 5.times do play_trick(lead_player, follow_player) lead_player = @trick_winner follow_player = other_player(lead_player) end end
Joue une partie.
Source
# File lib/game.rb, line 80 def play_trick(lead_player, follow_player) lead_card = @ui.choose_card(lead_player) follow_card = @ui.choose_card(follow_player) until valid_follow_card?(follow_player, lead_card, follow_card) @ui.display_wrong_card follow_card = @ui.choose_card(follow_player) end lead_player.play(lead_card) follow_player.play(follow_card) if lead_card.suit != follow_card.suit && follow_card.suit != @trump_suit @trick_winner = lead_player elsif lead_card.suit == follow_card.suit && lead_card.strength > follow_card.strength @trick_winner = lead_player else @trick_winner = follow_player end @trick_winner.add_point @ui.display_trick_winner(@trick_winner) end
Joue un pli.
Source
# File lib/game.rb, line 64 def stock @deck.cards end
Retourne les cartes restantes dans le talon.
Source
# File lib/game.rb, line 69 def valid_follow_card?(follow_player, lead_card, follow_card) if follow_card.suit == lead_card.suit true elsif follow_player.hand.any? { |card| card.suit == lead_card.suit } false else true end end
Vérifie si le coup du second joueur respecte les règles.