From: phfr24 Date: Sun, 9 Aug 2026 04:53:11 +0000 (-0300) Subject: add waste X-Git-Url: https://git.wirehaze.ovh/solitaire.git/commitdiff_plain/702e34f50e7ffe14309550211ade4d7fcd8af72a?ds=sidebyside add waste --- diff --git a/src/solitaire/Main.java b/src/solitaire/Main.java index 1dd7555..75d65d9 100644 --- a/src/solitaire/Main.java +++ b/src/solitaire/Main.java @@ -1,18 +1,25 @@ package solitaire; class Main { + private static Stock stock = new Stock(); + private static Waste waste = new Waste(); + + private static void printTable() { + System.out.printf("%s %s\n", stock, waste); + } public static void main(String[] args) { - Deck d = new Deck(); - System.out.println(d); + Card c; + + while (!stock.isEmpty()) { + printTable(); - while (!d.isEmpty()) { - Card c = d.draw(); + c = stock.draw(); c.reveal(); - System.out.println(c); + waste.add(c); } - System.out.println(d); + printTable(); } } diff --git a/src/solitaire/Rank.java b/src/solitaire/Rank.java index 4a735ab..0bd1c25 100644 --- a/src/solitaire/Rank.java +++ b/src/solitaire/Rank.java @@ -1,9 +1,13 @@ package solitaire; +import java.util.List; + 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"); + static final List RANKS = List.of(Rank.values()); + private final String symbol; Rank(String symbol) { diff --git a/src/solitaire/Deck.java b/src/solitaire/Stock.java similarity index 56% rename from src/solitaire/Deck.java rename to src/solitaire/Stock.java index 6d08a69..3f3a951 100644 --- a/src/solitaire/Deck.java +++ b/src/solitaire/Stock.java @@ -1,24 +1,19 @@ package solitaire; -import java.util.ArrayList; import java.util.Collections; +import java.util.LinkedList; import java.util.List; -final class Deck { - private static final Suit[] suits = Suit.values(); - private static final Rank[] ranks = Rank.values(); - +final class Stock { private final List cards; - Deck() { - this.cards = new ArrayList<>(suits.length * ranks.length); + Stock() { + this.cards = new LinkedList<>(); - for (Suit s : suits) - for (Rank r : ranks) + for (Suit s : Suit.SUITS) + for (Rank r : Rank.RANKS) cards.add(new Card(s, r)); - } - void shuffle() { Collections.shuffle(cards); } diff --git a/src/solitaire/Suit.java b/src/solitaire/Suit.java index 45bb8a0..9f79b68 100644 --- a/src/solitaire/Suit.java +++ b/src/solitaire/Suit.java @@ -1,8 +1,12 @@ package solitaire; +import java.util.List; + enum Suit { CLUBS("♣", false), DIAMONDS("♦", true), HEARTS("♥", true), SPADES("♠", false); + static final List SUITS = List.of(Suit.values()); + private final String symbol; private final boolean red; diff --git a/src/solitaire/Waste.java b/src/solitaire/Waste.java new file mode 100644 index 0000000..763fea9 --- /dev/null +++ b/src/solitaire/Waste.java @@ -0,0 +1,33 @@ +package solitaire; + +import java.util.LinkedList; +import java.util.List; +import java.util.stream.Collectors; + +final class Waste { + private final List cards; + + Waste() { + this.cards = new LinkedList<>(); + } + + void add(Card card) { + cards.add(card); + } + + Card draw() { + return cards.removeLast(); + } + + boolean isEmpty() { + return cards.isEmpty(); + } + + @Override + public String toString() { + if (isEmpty()) + return "{ }"; + + return cards.stream().map(String::valueOf).collect(Collectors.joining("", "{ ", " }")); + } +}