package Question8_1;
import java.util.ArrayList;
public class BlackJackGameAutomator {
private Deck<BlackJackCard> deck;
private BlackJackHand[] hands;
private static final int HIT_UNTIL = 16;
public BlackJackGameAutomator(int numPlayers) {
hands = new BlackJackHand[numPlayers];
for (int i = 0; i < numPlayers; i++) {
hands[i] = new BlackJackHand();
}
}
public boolean dealInitial() {
for (BlackJackHand hand : hands) {
BlackJackCard card1 = deck.dealCard();
BlackJackCard card2 = deck.dealCard();
if (card1 == null || card2 == null) {
return false;
}
hand.addCard(card1);
hand.addCard(card2);
}
return true;
}
public ArrayList<Integer> getBlackJacks() {
ArrayList<Integer> winners = new ArrayList<Integer>();
for (int i = 0; i < hands.length; i++) {
if (hands[i].isBlackJack()) {
winners.add(i);
}
}
return winners;
}
public boolean playHand(int i) {
BlackJackHand hand = hands[i];
return playHand(hand);
}
public boolean playHand(BlackJackHand hand) {
while (hand.score() < HIT_UNTIL) {
BlackJackCard card = deck.dealCard();
if (card == null) {
return false;
}
hand.addCard(card);
}
return true;
}
public boolean playAllHands() {
for (BlackJackHand hand : hands) {
if (!playHand(hand)) {
return false;
}
}
return true;
}
public ArrayList<Integer> getWinners() {
ArrayList<Integer> winners = new ArrayList<Integer>();
int winningScore = 0;
for (int i = 0; i < hands.length; i++) {
BlackJackHand hand = hands[i];
if (!hand.busted()) {
if (hand.score() > winningScore) {
winningScore = hand.score();
winners.clear();
winners.add(i);
} else if (hand.score() == winningScore) {
winners.add(i);
}
}
}
return winners;
}
public void initializeDeck() {
ArrayList<BlackJackCard> cards = new ArrayList<BlackJackCard>();
for (int i = 1; i <= 13; i++) {
for (int j = 0; j <= 3; j++) {
Suit suit = Suit.getSuitFromValue(j);
BlackJackCard card = new BlackJackCard(i, suit);
cards.add(card);
}
}
deck = new Deck<BlackJackCard>();
deck.setDeckOfCards(cards);
deck.shuffle();
}
public void printHandsAndScore() {
for (int i = 0; i < hands.length; i++) {
System.out.print("Hand " + i + " (" + hands[i].score() + "): ");
hands[i].print();
System.out.println("");
}
}
}