master
Saša Kocić 6 years ago
parent 58ac3cffd4
commit 52877d4932

@ -2,7 +2,7 @@ import java.util.ArrayList;
public class CardGame { public class CardGame {
public Player[] players; public Player[] players;
ArrayList<Card> Pot; Pile pot;
Card[] draws; Card[] draws;
/** /**
@ -11,16 +11,19 @@ public class CardGame {
*/ */
public CardGame(int numberOfCards, int numberOfPlayers) { public CardGame(int numberOfCards, int numberOfPlayers) {
Pile deck = createDeck(10); Pile deck = createDeck(10);
deck.shuffle();
this.players = new Player[numberOfPlayers]; this.players = new Player[numberOfPlayers];
draws = new Card[numberOfPlayers]; draws = new Card[numberOfPlayers];
int deckCount = deck.count();
for (int i = 0; i < numberOfPlayers; i++) { 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(); 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()) { for (Card.Suit suit: Card.Suit.values()) {
deck.add(new Card(number + 1, suit)); deck.add(new Card(number + 1, suit));
} }
@ -37,27 +40,44 @@ public class CardGame {
private void round() { private void round() {
for (int i = 0; i < draws.length; i++) { for (int i = 0; i < draws.length; i++) {
if (!players[i].broke()) { if (!players[i].broke()) {
System.out.printf("Player %d (%d cards): ", i, players[i].cardsCount());
draws[i] = players[i].draw(); draws[i] = players[i].draw();
System.out.printf("Player %i (%i cards): %i", i, players[i].count(), draws[i].number); System.out.printf("%d - %s\n", draws[i].number, draws[i].suit);
Pot.add(draws[i]); pot.add(draws[i]);
} else {
System.out.printf("Player %d broke!", i);
} }
} }
int winner = getWinner(draws); processWinner(draws);
players[winner].addPot(draws);
} }
private int getWinner(Card[] drawn) { private void processWinner(Card[] drawn) {
return 0; 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() { private boolean noWinner() {
int notBroke = 0; ArrayList<Player> activePlayers = new ArrayList<Player>();
for (int i = 0; i < players.length; i++) { for (int i = 0; i < players.length; i++) {
if (players[i].broke()) { if (players[i].cardsCount() > 0) {
notBroke++; 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;
} }
} }

@ -1,8 +1,27 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
class CardGameTest { class CardGameTest {
CardGame cardGame;
@org.junit.jupiter.api.Test @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() { void play() {
cardGame.play();
} }
} }

@ -1,12 +1,12 @@
import java.util.ArrayList; import java.util.ArrayList;
public class Pile { public class Pile extends ArrayList<Card> {
ArrayList<Card> pile = new ArrayList<Card>(); // ArrayList<Card> pile = new ArrayList<Card>();
public Boolean isEmpty() {
return pile.isEmpty();
}
// public Boolean isEmpty() {
// return pile.isEmpty();
// }
//
public void shuffle() { public void shuffle() {
} }
@ -15,23 +15,23 @@ public class Pile {
public void addAll(Card[] cards) { public void addAll(Card[] cards) {
for(Card card: cards) for(Card card: cards)
pile.add(card); add(card);
} }
public int count() { public int count() {
return pile.size(); return size();
} }
public Pile getCardsForPlayer(int numberOfPlayers) { public Pile getCardsForPlayer(int number) {
Pile cardsForPlayer = new Pile(); Pile cardsForPlayer = new Pile();
for (int i = 0; i < pile.size() / numberOfPlayers; i++) { for (int i = 0; i < number; i++) {
cardsForPlayer.add(pile.get(0)); cardsForPlayer.add(get(0));
pile.remove(0); remove(0);
} }
return cardsForPlayer; return cardsForPlayer;
} }
public void add(Card card) { // public void add(Card card) {
pile.add(card); // pile.add(card);
} // }
} }

@ -1,9 +1,12 @@
public class Player { public class Player {
String name;
Pile drawPile; Pile drawPile;
Pile discardPile; Pile discardPile;
public Player(Pile drawPile) { public Player(String name, Pile drawPile) {
this.name = name;
this.drawPile = drawPile; this.drawPile = drawPile;
this.discardPile = new Pile();
} }
public Pile getDrawPile() { public Pile getDrawPile() {
@ -30,7 +33,8 @@ public class Player {
discardPile.shuffle(); discardPile.shuffle();
drawPile.takeDiscarded(); drawPile.takeDiscarded();
} }
Card draw = new Card(1, Card.Suit.SPADES); Card draw = drawPile.get(0);
drawPile.remove(0);
return draw; return draw;
} }
@ -42,7 +46,7 @@ public class Player {
discardPile.addAll(draws); discardPile.addAll(draws);
} }
public int count() { public int cardsCount() {
return drawPile.count() + discardPile.count(); return drawPile.count() + discardPile.count();
} }
} }

@ -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() {
}
}
Loading…
Cancel
Save