From 9954b34ae3afc64f6293f9851e941178b9b6c3df Mon Sep 17 00:00:00 2001 From: julien Date: Sun, 4 Oct 2026 22:43:45 +0200 Subject: [PATCH] first commit --- README.md | 2 + script.rb | 171 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 173 insertions(+) create mode 100644 README.md create mode 100644 script.rb diff --git a/README.md b/README.md new file mode 100644 index 0000000..5410679 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# Écarté + diff --git a/script.rb b/script.rb new file mode 100644 index 0000000..750fc13 --- /dev/null +++ b/script.rb @@ -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 +