@Override
public String toString() {
if (isHidden())
- return "[ * ]";
+ return " * ";
- return String.format("[%s%2s]", suit, rank);
+ return String.format("%s%2s", suit, rank);
}
}
--- /dev/null
+package solitaire;
+
+import java.util.LinkedList;
+import java.util.List;
+
+final class Foundation {
+ private final List<Card> cards;
+ private final Suit suit;
+
+ Foundation(Suit suit) {
+ this.cards = new LinkedList<>();
+ this.suit = suit;
+ }
+
+ Suit getSuit() {
+ return suit;
+ }
+
+ boolean isFull() {
+ return cards.size() == Rank.RANKS.size();
+ }
+
+ private boolean isValidNextCard(Card card) {
+ Rank cardRank, lastRank;
+
+ if (card.getSuit() != this.suit)
+ return false;
+
+ cardRank = card.getRank();
+
+ if (cards.isEmpty())
+ return cardRank == Rank.ACE;
+
+ lastRank = cards.getLast().getRank();
+
+ return cardRank.isSuccessorOf(lastRank);
+ }
+
+ boolean add(Card card) {
+ if (!isValidNextCard(card))
+ return false;
+
+ cards.add(card);
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ if (cards.isEmpty())
+ return String.format("( %s )", suit);
+
+ return String.format("(%s)", cards.getLast());
+ }
+}
class Main {
private static Stock stock = new Stock();
private static Waste waste = new Waste();
+ private static Foundation foundation = new Foundation(Suit.CLUBS);
private static void printTable() {
- System.out.printf("%s %s\n", stock, waste);
+ System.out.printf("%s %s\n\n%s\n\n", stock, waste, foundation);
}
public static void main(String[] args) {
c = stock.draw();
c.reveal();
- waste.add(c);
+
+ if (!foundation.add(c))
+ waste.add(c);
}
printTable();
if (isEmpty())
return "{ }";
- return cards.stream().map(String::valueOf).collect(Collectors.joining("", "{ ", " }"));
+ return cards.stream().map(String::valueOf).collect(Collectors.joining("|", "[", "]"));
}
}