Home - Programming - Java- BlackJack
BlackJack
BlackJack Main Class
/** * @(#)BlackJack.java * BlackJack application * Author: Brian SonniE */ import javax.swing.*; import javax.swing.border.*; import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.util.*; import java.io.*; import javax.imageio.*; public class BlackJack extends JFrame{ int cash = 0; int currentBet = 0; ArrayList<Card> deck; Card[] usersCards = new Card[10]; Card[] dealersCards = new Card[10]; private JButton buttonHit, buttonStay, buttonDeal, buttonCashOut; private JPanel userPane, dealerPane, userCardPane; private JLabel labelMoney, labelBet; BufferedImage img; final int cardWidth = 79; final int cardHeight = 123; boolean gameOn = true; public BlackJack() { setTitle("BlackJack"); setSize(450,500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); setVisible(true); setBackground(Color.green); buildTable(); gameInit(); repaint(); getContentPane().setBackground(Color.GREEN); } public void paint(Graphics g) { super.paint(g); g.drawString("Dealers Hand", 20, 60); g.drawString("Your Hand", 20, 230); g.drawString("Sum: "+getUserSum(), 90, 230); int x1 = 10; int y1 = 250; int x2 = x1+cardWidth; int y2 = y1+cardHeight; int dx1 = 10; int dy1 = 80; int dx2 = dx1+cardWidth; int dy2 = dy1+cardHeight; // Draw Dealers Cards for(int i = 1; i<=getNumDealerCards(); i++) { g.drawImage(img, dx1+(cardWidth*(i-1)), dy1, dx2+(cardWidth*(i-1)), dy2, dealersCards[i-1].getX(), dealersCards[i-1].getY(), dealersCards[i-1].getX()+cardWidth ,dealersCards[i-1].getY()+cardHeight,null); } // Draw User Cards for(int i = 1; i<=getNumUserCards(); i++) { g.drawImage(img, x1+(cardWidth*(i-1)), y1, x2+(cardWidth*(i-1)), y2, usersCards[i-1].getX(), usersCards[i-1].getY(), usersCards[i-1].getX()+cardWidth ,usersCards[i-1].getY()+cardHeight,null); } } public int getNumUserCards() { int numCards = 0; while(usersCards[numCards]!=null) numCards++; return numCards; } public int getNumDealerCards() { int numCards = 0; while(dealersCards[numCards]!=null) numCards++; return numCards; } public int getUserSum() { int numCards = 0; int sum = 0; int cardVal = 0; while(usersCards[numCards]!=null){ cardVal = usersCards[numCards].getValue(); if(cardVal == 1 && sum<=10) cardVal = 11; else if(cardVal == 11) cardVal = 10; else if(cardVal == 12) cardVal = 10; else if(cardVal == 13) cardVal = 10; sum+=cardVal; numCards++; } return sum; } public int getDealerSum() { int numCards = 0; int sum = 0; int cardVal = 0; while(dealersCards[numCards]!=null){ cardVal = dealersCards[numCards].getValue(); if(cardVal == 1 && sum<=10) cardVal = 11; else if(cardVal == 11) cardVal = 10; else if(cardVal == 12) cardVal = 10; else if(cardVal == 13) cardVal = 10; sum+=cardVal; numCards++; } return sum; } // Recursion Implemented Check \ public int setBet(int bet) { try{ bet = Integer.parseInt(JOptionPane.showInputDialog("Enter Your Bet: ")); }catch(NumberFormatException ex) { bet=0; } if(bet <= 0 || bet > cash) bet=setBet(0); else labelBet.setText(Integer.toString(bet)); return bet; } public void buildTable() { //***Dealer Pane***\ dealerPane = new JPanel(); dealerPane.setBackground(Color.gray); buttonDeal = new JButton("Deal"); buttonCashOut = new JButton("Walk Away"); dealerPane.add(buttonCashOut); dealerPane.add(buttonDeal); buttonDeal.addActionListener(new Dealer()); buttonCashOut.addActionListener(new Walk()); //***UserCardPane***\ userCardPane = new JPanel(); //***UserPane***\ userPane = new JPanel(new GridLayout(3,2)); Border pancakes = BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Your Money"); userPane.setBorder(pancakes); userPane.setBackground(Color.gray); buttonHit = new JButton("Hit"); buttonStay = new JButton("Stay"); labelBet = new JLabel("0"); labelMoney = new JLabel("0"); userPane.add(new JLabel("Your Total Monies: ")); userPane.add(labelMoney); userPane.add(new JLabel("Your Bet: ")); userPane.add(labelBet); userPane.add(buttonHit); userPane.add(buttonStay); buttonHit.addActionListener(new HitMe()); buttonStay.addActionListener(new Stay()); add(dealerPane, BorderLayout.NORTH); add(userPane, BorderLayout.SOUTH); // Set Starting Money try { img = ImageIO.read(new File("cards.png")); } catch (IOException e) {} cash = getStartingAmmt(); labelMoney.setText(Integer.toString(cash)); } /** * Code for New Round */ public void gameInit() { currentBet = setBet(0); usersCards = new Card[10]; dealersCards = new Card[10]; deck = new ArrayList<Card>(52); for(int i = 0; i<52; i++) deck.add(i, new Card((i%4),(i%13)+1)); // Give User and Dealer 2 Cards Each usersCards[0] = pullRandomCard(); usersCards[1] = pullRandomCard(); dealersCards[0] = pullRandomCard(); dealersCards[1] = pullRandomCard(); repaint(); } public int getStartingAmmt() { int amnt = 0; while(amnt<=0) { try{ amnt = Integer.parseInt(JOptionPane.showInputDialog("Enter Starting Ammount of Money:")); }catch(NumberFormatException nfe){ amnt=0; } } return amnt; } public Card pullRandomCard() { Random rand = new Random(); return deck.remove(rand.nextInt(deck.size())); } //*********************EVENTS*******************\ /** Deal * Recreate The deck * Give dealer and user 2 cards */ class Dealer implements ActionListener{ public void actionPerformed(ActionEvent ae) { gameOn = true; gameInit(); } } /** Hit Me * Draw a random card from the deck * Check the new sum of cards * if 21 user wins * if > 21 user losses * if < 21 user can choose to hit/stay */ class HitMe implements ActionListener{ public void actionPerformed(ActionEvent ae) { if(gameOn){ usersCards[getNumUserCards()] = pullRandomCard(); repaint(); if(getUserSum()>21) { // You Lose JOptionPane.showMessageDialog(null, "You Lost..."); gameOn = false; cash-=currentBet; labelMoney.setText(Integer.toString(cash)); } if(cash<=0) { JOptionPane.showMessageDialog(null,"You broke..."); System.exit(0); } } } } /** * Check for winner */ class Stay implements ActionListener{ public void actionPerformed(ActionEvent ae) { if(gameOn){ gameOn = false; if(getUserSum()>21) { // You Lose JOptionPane.showMessageDialog(null, "You Lost..."); cash-=currentBet; labelMoney.setText(Integer.toString(cash)); } // Ai else { while(getDealerSum()<17) { dealersCards[getNumDealerCards()] = pullRandomCard(); } if(getDealerSum()>21) { // You Win JOptionPane.showMessageDialog(null, "You Win!!"); cash+=currentBet; labelMoney.setText(Integer.toString(cash)); } else{ if(21-getUserSum() < 21-getDealerSum()) {// You win JOptionPane.showMessageDialog(null, "You Win!!"); cash+=currentBet; labelMoney.setText(Integer.toString(cash)); } else if(getUserSum() == getDealerSum()) { JOptionPane.showMessageDialog(null, "Tie..."); } else // You Lose { JOptionPane.showMessageDialog(null, "You Lost..."); cash-=currentBet; labelMoney.setText(Integer.toString(cash)); } } } repaint(); if(cash<=0) { JOptionPane.showMessageDialog(null,"You broke..."); System.exit(0); } } } } /** * Leav App */ class Walk implements ActionListener{ public void actionPerformed(ActionEvent ae) { JOptionPane.showMessageDialog(null, "You played and walked away with $" + cash); System.exit(0); } } public static void main(String[] args) { new BlackJack(); } }
Card.class
public class Card { private int cardValue; private int cardSuit; public Card() { cardValue = 0; cardSuit = 0; } public Card(int suit, int val) { cardValue = val; cardSuit = suit; } public void setValue(int val) { cardValue = val; } public void setSuit(int suit) { cardSuit = suit; } public int getValue() { return cardValue; } public int getSuit() { return cardSuit; } public int getY() { return 123*cardSuit; } public int getX() { return 79*(cardValue-1); } }