diff --git a/src/CardGame.java b/src/CardGame.java index 79027e4..955f69b 100644 --- a/src/CardGame.java +++ b/src/CardGame.java @@ -2,7 +2,7 @@ import java.util.ArrayList; public class CardGame { public Player[] players; - ArrayList Pot; + Pile pot; Card[] draws; /** @@ -11,16 +11,19 @@ public class CardGame { */ public CardGame(int numberOfCards, int numberOfPlayers) { Pile deck = createDeck(10); + deck.shuffle(); this.players = new Player[numberOfPlayers]; draws = new Card[numberOfPlayers]; + int deckCount = deck.count(); for (int i = 0; i < numberOfPlayers; i++) { - players[i] = new Player(deck.getCardsForPlayer(numberOfPlayers)); + players[i] = new Player(String.valueOf(i), deck.getCardsForPlayer(deckCount / numberOfPlayers)); } + pot = new Pile(); } - private Pile createDeck(int numberOfCards) { + public Pile createDeck(int numberOfCards) { Pile deck = new Pile(); - for (int number = 0; number < numberOfCards * Suit.COUNT; number++) { + for (int number = 0; number < numberOfCards; number++) { for (Card.Suit suit: Card.Suit.values()) { deck.add(new Card(number + 1, suit)); } @@ -37,27 +40,44 @@ public class CardGame { private void round() { for (int i = 0; i < draws.length; i++) { if (!players[i].broke()) { + System.out.printf("Player %d (%d cards): ", i, players[i].cardsCount()); draws[i] = players[i].draw(); - System.out.printf("Player %i (%i cards): %i", i, players[i].count(), draws[i].number); - Pot.add(draws[i]); + System.out.printf("%d - %s\n", draws[i].number, draws[i].suit); + pot.add(draws[i]); + } else { + System.out.printf("Player %d broke!", i); } } - int winner = getWinner(draws); - players[winner].addPot(draws); + processWinner(draws); } - private int getWinner(Card[] drawn) { - return 0; + private void processWinner(Card[] drawn) { + int maxIndex = 0; + Card max = drawn[maxIndex]; + for (int i = 1; i < drawn.length; i++) { + if (max.number < drawn[i].number) { + maxIndex = i; + max = drawn[maxIndex]; + } else if (max.number == drawn[i].number) { + // what if there is no winner? + } + } + System.out.printf("Player %d wins this round\n\n", maxIndex); + players[maxIndex].discardPile.addAll(pot); } private boolean noWinner() { - int notBroke = 0; + ArrayList activePlayers = new ArrayList(); for (int i = 0; i < players.length; i++) { - if (players[i].broke()) { - notBroke++; + if (players[i].cardsCount() > 0) { + activePlayers.add(players[i]); } } - return notBroke > 1; + if (activePlayers.size() == 1) { + System.out.printf("Player %s wins the game!", activePlayers.get(0).name); + return false; + } + return true; } } diff --git a/src/CardGameTest.java b/src/CardGameTest.java index 7afb8b3..9c3b46a 100644 --- a/src/CardGameTest.java +++ b/src/CardGameTest.java @@ -1,8 +1,27 @@ +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + import static org.junit.jupiter.api.Assertions.*; class CardGameTest { - + CardGame cardGame; @org.junit.jupiter.api.Test + + @BeforeEach + void setUp() { + cardGame = new CardGame(10, 2); + } + + @Test + void createDeck() { + assertEquals(2, cardGame.players.length); + for (int i = 0; i < 2; i++) { + assertEquals(20, cardGame.players[i].drawPile.count()); + } + } + + @Test void play() { + cardGame.play(); } } \ No newline at end of file diff --git a/src/Pile.java b/src/Pile.java index 1643751..d99a7cc 100644 --- a/src/Pile.java +++ b/src/Pile.java @@ -1,12 +1,12 @@ import java.util.ArrayList; -public class Pile { - ArrayList pile = new ArrayList(); - - public Boolean isEmpty() { - return pile.isEmpty(); - } +public class Pile extends ArrayList { +// ArrayList pile = new ArrayList(); +// public Boolean isEmpty() { +// return pile.isEmpty(); +// } +// public void shuffle() { } @@ -15,23 +15,23 @@ public class Pile { public void addAll(Card[] cards) { for(Card card: cards) - pile.add(card); + add(card); } public int count() { - return pile.size(); + return size(); } - public Pile getCardsForPlayer(int numberOfPlayers) { + public Pile getCardsForPlayer(int number) { Pile cardsForPlayer = new Pile(); - for (int i = 0; i < pile.size() / numberOfPlayers; i++) { - cardsForPlayer.add(pile.get(0)); - pile.remove(0); + for (int i = 0; i < number; i++) { + cardsForPlayer.add(get(0)); + remove(0); } return cardsForPlayer; } - public void add(Card card) { - pile.add(card); - } +// public void add(Card card) { +// pile.add(card); +// } } diff --git a/src/Player.java b/src/Player.java index 2bbca8b..38b15b0 100644 --- a/src/Player.java +++ b/src/Player.java @@ -1,9 +1,12 @@ public class Player { + String name; Pile drawPile; Pile discardPile; - public Player(Pile drawPile) { + public Player(String name, Pile drawPile) { + this.name = name; this.drawPile = drawPile; + this.discardPile = new Pile(); } public Pile getDrawPile() { @@ -30,7 +33,8 @@ public class Player { discardPile.shuffle(); drawPile.takeDiscarded(); } - Card draw = new Card(1, Card.Suit.SPADES); + Card draw = drawPile.get(0); + drawPile.remove(0); return draw; } @@ -42,7 +46,7 @@ public class Player { discardPile.addAll(draws); } - public int count() { + public int cardsCount() { return drawPile.count() + discardPile.count(); } } diff --git a/src/PlayerTest.java b/src/PlayerTest.java new file mode 100644 index 0000000..259f993 --- /dev/null +++ b/src/PlayerTest.java @@ -0,0 +1,16 @@ +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class PlayerTest { + + @BeforeEach + void setUp() { + } + + @Test + void draw() { + + } +} \ No newline at end of file