|
|
|
@ -1,9 +1,7 @@
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
|
|
|
import java.util.Collections;
|
|
|
|
import java.util.Random;
|
|
|
|
import java.util.Random;
|
|
|
|
|
|
|
|
|
|
|
|
import static java.util.Collections.shuffle;
|
|
|
|
|
|
|
|
//import org-apache-commons-lang3.ArrayUtils;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public class CardGame {
|
|
|
|
public class CardGame {
|
|
|
|
public Player[] players;
|
|
|
|
public Player[] players;
|
|
|
|
Pile pot;
|
|
|
|
Pile pot;
|
|
|
|
@ -15,21 +13,21 @@ public class CardGame {
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public CardGame(int numberOfCards, int numberOfPlayers) {
|
|
|
|
public CardGame(int numberOfCards, int numberOfPlayers) {
|
|
|
|
Pile deck = createDeck(numberOfCards);
|
|
|
|
Pile deck = createDeck(numberOfCards);
|
|
|
|
shuffle(deck, new Random());
|
|
|
|
shuffleArray(deck);
|
|
|
|
this.players = new Player[numberOfPlayers];
|
|
|
|
this.players = new Player[numberOfPlayers];
|
|
|
|
draws = new Card[numberOfPlayers];
|
|
|
|
draws = new Card[numberOfPlayers];
|
|
|
|
int deckCount = deck.count();
|
|
|
|
int cardsPerPlayer = deck.size() / numberOfPlayers;
|
|
|
|
for (int i = 0; i < numberOfPlayers; i++) {
|
|
|
|
for (int i = 0; i < numberOfPlayers; i++) {
|
|
|
|
players[i] = new Player(String.valueOf(i), deck.getCardsForPlayer(deckCount / numberOfPlayers));
|
|
|
|
players[i] = new Player(String.valueOf(i), deck.getCardsForPlayer(cardsPerPlayer));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
pot = new Pile();
|
|
|
|
pot = new Pile();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public Pile createDeck(int numberOfCards) {
|
|
|
|
public Pile createDeck(int numberOfCards) {
|
|
|
|
Pile deck = new Pile();
|
|
|
|
Pile deck = new Pile();
|
|
|
|
for (int number = 0; number < numberOfCards; number++) {
|
|
|
|
for (int number = 1; 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, suit));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return deck;
|
|
|
|
return deck;
|
|
|
|
@ -43,7 +41,7 @@ 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].cardsCount() > 0) {
|
|
|
|
System.out.printf("Player %d (%d cards): ", i, players[i].cardsCount());
|
|
|
|
System.out.printf("Player %d (%d cards): ", i, players[i].cardsCount());
|
|
|
|
draws[i] = players[i].draw();
|
|
|
|
draws[i] = players[i].draw();
|
|
|
|
System.out.printf("%d - %s\n", draws[i].number, draws[i].suit);
|
|
|
|
System.out.printf("%d - %s\n", draws[i].number, draws[i].suit);
|
|
|
|
@ -53,7 +51,6 @@ public class CardGame {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
processWinner(draws);
|
|
|
|
processWinner(draws);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void processWinner(Card[] drawn) {
|
|
|
|
private void processWinner(Card[] drawn) {
|
|
|
|
@ -85,4 +82,17 @@ public class CardGame {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* Fisher-Yates shuffle()
|
|
|
|
|
|
|
|
* https://stackoverflow.com/questions/1519736/random-shuffling-of-an-array
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
private static void shuffleArray(Pile pile)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Random random = new Random();
|
|
|
|
|
|
|
|
for (int i = pile.size() - 1; i > 0; i--)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Collections.swap(pile, i, random.nextInt(i + 1));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|