import static java.lang.System.*;
import java.util.*;
import javax.swing.*;
/**
*
* @author jmellen and Mason Marnell
*/
public class BlackJack {
static int deck[];
static int deckI;
static ArrayList<Integer> player;
static ArrayList<Integer> dealer;
static int bet;
static int money = 500;
/**
* Builds a deck of cards this will be done day 1
*/
public static void build() {
// make a new deck of 52 cards
// set every spot in the array to a card value.
deck = new int[52];
int i = 0;
int p = 0;
for(;p<4;p++){
for(;i<52;){
deck[i] = 2;
i++;
deck[i] = 3;
i++;
deck[i] = 4;
i++;
deck[i] = 5;
i++;
deck[i] = 6;
i++;
deck[i] = 7;
i++;
deck[i] = 8;
i++;
deck[i] = 9;
i++;
deck[i] = 10;
i++;
deck[i] = 10;
i++;
deck[i] = 10;
i++;
deck[i] = 10;
i++;
deck[i] = 11;
i++;
}
}
}
/**
* This method is done for you, and is only used to see the deck of cards,
* it will not be used for the final Black Jack Program
*/
public static void displayDeck() {
for (int i = 0; i < deck.length; i++) {
System.out.println(i + " " + deck[i]);
}
}
/**
* DAY 2
* Deal the cards, this method is for day 2. You will deal 3 cards
* 2 to the player and 1 to the Dealer, you will then display all the cards
*/
public static void deal() {
player = new ArrayList();
// create a new ArrayList() for the dealer
dealer = new ArrayList();
deckI = 0; // this sets the location of the deck to the first card in the deck
int aCard = deck[deckI]; // grabs the next card from the deck
deckI++; // moves the pointer to the next card in the deck
player.add(aCard); // deals 1 card to the player
aCard = deck[deckI];
deckI++;
dealer.add(aCard);// deal 1 card to the dealer
aCard = deck[deckI];
deckI++;
player.add(aCard);// deal 1 more card to the player
aCard = deck[deckI];
CompleteDisplay(); // display the cards
}
/**
* DAY 2
* This method will return a string of all the cards in a hand of cards
* @param cards an ArrayList of cards
* @return all of the cards in your hand
*/
public static String display(ArrayList<Integer> cards) {
String YourCards = ""; // set YourCards to an initial value of nothing
for (int o = 0; o < cards.size();o++) {
YourCards = YourCards + cards.get(o) + " ";
}
// go through all of your cards and add the value to YourCards
return "Total value of cards is " + sumOfCards(cards) + "\n The cards are " + YourCards;
}
/**
* COMPLETED METHOD USED DAY 2
* This will display all of the cards in the dealer and players hand
*/
public static void CompleteDisplay() {
String dealerCards = display(dealer);
String playerCards = display(player);
JOptionPane.showMessageDialog(null, "HERE ARE THE PLAYERS CARDS \n" + playerCards
+ "\n Here are the Dealer Cards \n" + dealerCards);
}
/**
* DAY 3
* Add up the value of your cards
* This will return the sum of all cards in a hand of cards
* @param cards an Integer of arrayList of cards
* @return the sum of the cards
*/
public static int sumOfCards(ArrayList<Integer> cards) {
int sum = 0;
// add up the value of all the cards in the ArrayList of cards
for(int u=0;u<cards.size();u++){
sum+= cards.get(u);
}
return sum;
}
/**
* Day 4
* This method allows the player to decide to hit of Stay in Black Jack
*/
public static void hitOrStay() {
String ans = JOptionPane.showInputDialog(null, "Do you want to HIT or STAY???");
while ((ans.contains("H") || ans.contains("h")) && sumOfCards(player) < 21) {
// deal a card see method deal
int aCard = deck[deckI++];
player.add(aCard);
CompleteDisplay();
if(sumOfCards(player) < 21){
ans = JOptionPane.showInputDialog(null, "Do you want to HIT or STAY???");
}
if(sumOfCards(player) >21){
CheckAce(player);
}
// check to see if the value of the cards is less than 21
// if the value is less than 21 allow player to choose another card.
}
}
/**
* DAY 4
* This method allows the dealer to decide if they need to hit of Stay
*/
public static void DealersTurn() {
while(sumOfCards(dealer)<16){
int aCard = deck[deckI++];
dealer.add(aCard);
}
if(sumOfCards(dealer)>21){
CheckAce(dealer);
}
CompleteDisplay();
// while the sum of the dealer cards are less that 16
// add a card to the dealer
// if the sum of the dealer cards are over 21
// check to see if the dealer has an Ace
// call CompleteDisplay();
}
/**
* DAY 4 Check to see if there is an Ace in the hand
* This method checks to see if an Ace (11) is in you hand
* If there is an ace, it will change it to a 1
* @param hand all the cards in a hand
*/
public static void CheckAce(ArrayList<Integer> hand) {
// loop through the hand
// if the spot is an 11
// set the spot to 1
// return;
for(int r = 0;r<hand.size();r++){
if(hand.get(r) == 11){
hand.set(r, 1);
}
}
return;
}
/**
* Day 5
* This method checks to see who wins the hand of black jack
*/
public static void WhoWins() {
CompleteDisplay();
if (sumOfCards(player) > 21)
{
money = money - bet;
JOptionPane.showMessageDialog(null, "House wins the bet \n you have " + money);
} else if (sumOfCards(dealer) > 21)
{
money = money + bet;
JOptionPane.showMessageDialog(null, "Player wins the bet\n you have " + money);
}
else if (sumOfCards(dealer) > sumOfCards(player))
{
money = money - bet;
JOptionPane.showMessageDialog(null, "Player loses the bet\n you have " + money);
}
else if (sumOfCards(player) > sumOfCards(dealer))
{
money = money - bet;
JOptionPane.showMessageDialog(null, "Player wins the bet\n you have " + money);
}
// use 3 more else if to see who won
}
/**
* Day 5
* Swaps every card with another card in the Deck
* Shuffles the deck of cards
*/
public static void shuffle() {
for (int e = 0; e < deck.length; e++) {
int rand = (int) (Math.random() * deck.length);
int spare = deck[e]; // make a sparecard with card at spot i
deck[e] = deck[rand]; // set the value of spot i to the value of rand
deck[rand] = spare; // set the value of rand to sparecard
}
}
public static void main(String[] args) {
// //DAY 1 Build deck and display the deck
// build();
// displayDeck();
// //Day 2
// deal();
while (true) {
build();
shuffle();
String Tbet = JOptionPane.showInputDialog("Enter your bet");
try {
bet = Integer.parseInt(Tbet);
} catch (Exception E) {
bet = 50;
}
deal();
hitOrStay();
DealersTurn();
WhoWins();
}
}
}
Comments