From 2ba4b0c8426f9fbe13a41fdefaf141a643e365b6 Mon Sep 17 00:00:00 2001 From: phfr24 Date: Sun, 19 Apr 2026 18:53:00 -0300 Subject: [PATCH] add deck and format --- src/solitaire/Card.java | 74 ++++++++++++++++++++--------------------- src/solitaire/Deck.java | 40 ++++++++++++++++++++++ src/solitaire/Main.java | 15 ++++++--- src/solitaire/Rank.java | 37 ++++++++------------- src/solitaire/Suit.java | 47 ++++++++++++-------------- 5 files changed, 123 insertions(+), 90 deletions(-) create mode 100644 src/solitaire/Deck.java diff --git a/src/solitaire/Card.java b/src/solitaire/Card.java index b0fbb5c..ec6efcf 100644 --- a/src/solitaire/Card.java +++ b/src/solitaire/Card.java @@ -1,41 +1,41 @@ package solitaire; final class Card { - private final Suit suit; - private final Rank rank; - private boolean hidden; - - Card(Suit suit, Rank rank, boolean hidden) { - this.suit = suit; - this.rank = rank; - this.hidden = hidden; - } - - Card(Suit suit, Rank rank) { - this(suit, rank, true); - } - - Suit getSuit() { - return this.suit; - } - - Rank getRank() { - return this.rank; - } - - boolean isHidden() { - return this.hidden; - } - - void reveal() { - this.hidden = false; - } - - @Override - public String toString() { - if (this.hidden) - return " * "; - - return String.format("%s%2s", this.suit, this.rank); - } + private final Suit suit; + private final Rank rank; + private boolean hidden; + + Card(Suit suit, Rank rank, boolean hidden) { + this.suit = suit; + this.rank = rank; + this.hidden = hidden; + } + + Card(Suit suit, Rank rank) { + this(suit, rank, true); + } + + Suit getSuit() { + return suit; + } + + Rank getRank() { + return rank; + } + + boolean isHidden() { + return hidden; + } + + void reveal() { + hidden = false; + } + + @Override + public String toString() { + if (isHidden()) + return "[ * ]"; + + return String.format("[%s%2s]", suit, rank); + } } diff --git a/src/solitaire/Deck.java b/src/solitaire/Deck.java new file mode 100644 index 0000000..6d08a69 --- /dev/null +++ b/src/solitaire/Deck.java @@ -0,0 +1,40 @@ +package solitaire; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +final class Deck { + private static final Suit[] suits = Suit.values(); + private static final Rank[] ranks = Rank.values(); + + private final List cards; + + Deck() { + this.cards = new ArrayList<>(suits.length * ranks.length); + + for (Suit s : suits) + for (Rank r : ranks) + cards.add(new Card(s, r)); + } + + void shuffle() { + Collections.shuffle(cards); + } + + Card draw() { + return cards.removeLast(); + } + + boolean isEmpty() { + return cards.isEmpty(); + } + + @Override + public String toString() { + if (isEmpty()) + return "{ }"; + + return "{ * }"; + } +} diff --git a/src/solitaire/Main.java b/src/solitaire/Main.java index a27fa26..1dd7555 100644 --- a/src/solitaire/Main.java +++ b/src/solitaire/Main.java @@ -2,10 +2,17 @@ package solitaire; class Main { - public static void main(String[] args) { - Card c = new Card(Suit.SPADES, Rank.TEN); - c.reveal(); - System.out.println(c); + public static void main(String[] args) { + Deck d = new Deck(); + System.out.println(d); + + while (!d.isEmpty()) { + Card c = d.draw(); + c.reveal(); + System.out.println(c); } + System.out.println(d); + } + } diff --git a/src/solitaire/Rank.java b/src/solitaire/Rank.java index e4aa93c..4a735ab 100644 --- a/src/solitaire/Rank.java +++ b/src/solitaire/Rank.java @@ -1,28 +1,17 @@ package solitaire; enum Rank { - ACE("A"), - TWO("2"), - THREE("3"), - FOUR("4"), - FIVE("5"), - SIX("6"), - SEVEN("7"), - EIGHT("8"), - NINE("9"), - TEN("10"), - JACK("J"), - QUEEN("Q"), - KING("K"); - - private String symbol; - - Rank(String symbol) { - this.symbol = symbol; - } - - @Override - public String toString() { - return this.symbol; - } + ACE("A"), TWO("2"), THREE("3"), FOUR("4"), FIVE("5"), SIX("6"), SEVEN("7"), EIGHT("8"), NINE("9"), TEN("10"), + JACK("J"), QUEEN("Q"), KING("K"); + + private final String symbol; + + Rank(String symbol) { + this.symbol = symbol; + } + + @Override + public String toString() { + return symbol; + } } diff --git a/src/solitaire/Suit.java b/src/solitaire/Suit.java index 7304794..45bb8a0 100644 --- a/src/solitaire/Suit.java +++ b/src/solitaire/Suit.java @@ -1,29 +1,26 @@ package solitaire; enum Suit { - CLUBS("♣", false), - DIAMONDS("♦", true), - HEARTS("♥", true), - SPADES("♠", false); - - private String symbol; - private boolean red; - - Suit(String symbol, boolean red) { - this.symbol = symbol; - this.red = red; - } - - boolean isRed() { - return this.red; - } - - boolean isBlack() { - return !this.red; - } - - @Override - public String toString() { - return this.symbol; - } + CLUBS("♣", false), DIAMONDS("♦", true), HEARTS("♥", true), SPADES("♠", false); + + private final String symbol; + private final boolean red; + + Suit(String symbol, boolean red) { + this.symbol = symbol; + this.red = red; + } + + boolean isRed() { + return red; + } + + boolean isBlack() { + return !red; + } + + @Override + public String toString() { + return symbol; + } } -- 2.53.0