]> wirehaze git hosting - solitaire.git/commitdiff

wirehaze git hosting

add deck and format main
authorphfr24 <phfr24@inf.ufpr.br>
Sun, 19 Apr 2026 21:53:00 +0000 (18:53 -0300)
committerphfr24 <phfr24@inf.ufpr.br>
Sun, 19 Apr 2026 21:53:00 +0000 (18:53 -0300)
src/solitaire/Card.java
src/solitaire/Deck.java [new file with mode: 0644]
src/solitaire/Main.java
src/solitaire/Rank.java
src/solitaire/Suit.java

index b0fbb5c618b1033d55e46c3db944e1ddfcfae283..ec6efcfad09442b6eb63b897e9a61435270a7232 100644 (file)
@@ -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 (file)
index 0000000..6d08a69
--- /dev/null
@@ -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<Card> 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 "{ * }";
+    }
+}
index a27fa2684124fc9decb4304f1d7d02ebb61779fb..1dd7555ec96c811c658dedfc2f223e709f51f276 100644 (file)
@@ -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);
+    }
+
 }
index e4aa93cab701af4ee328fafb9d2ec3f928b294f8..4a735abdb99984484f6fc3cc4e9de54f242b3b13 100644 (file)
@@ -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;
+    }
 }
index 7304794306e8803ab0b8c2a48fa6b745e582b81d..45bb8a0d4811591500465b9e01b9b8228ebe104d 100644 (file)
@@ -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;
+    }
 }