Untitled
unknown
plain_text
2 years ago
15 kB
6
Indexable
import java.util.Scanner;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Blackjack extends JPanel {
// Declarations
public static ArrayList<Cards> cards = new ArrayList<>();
public static ArrayList<Cards> playerCards = new ArrayList<>();
public static ArrayList<Cards> dealerCards = new ArrayList<>();
public static ArrayList<ImageIcon> cardIcons = new ArrayList<>();
// Using two sums for the case where Ace is both 1 and 11.
public static int playerS1 = 0;
public static int playerS2 = 0;
public static int dealerS1 = 0;
public static int dealerS2 = 0;
public static int balance = 1000;
public static int winner; // 0 = player, 1 = dealer, 2 = tie
public static int dealerMaxSum = 0;
public static void main(String[] args) {
// Declarations
Random rng = new Random();
int numberOfDecks = 3;
Scanner s = new Scanner(System.in);
JFrame frame = new JFrame("Blackjack");
frame.setSize(1200, 800);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setResizable(false);
frame.setLayout(null);
Icon hitIcon = new ImageIcon(Blackjack.class.getResource("/HitButton.PNG"));
Icon standIcon = new ImageIcon(Blackjack.class.getResource("/StandButton.PNG"));
JButton hit = new JButton();
JButton stand = new JButton();
hit.setIcon(hitIcon);
stand.setIcon(standIcon);
hit.setBounds(1000, 400, hitIcon.getIconWidth(), hitIcon.getIconHeight());
stand.setBounds(1000, 200, standIcon.getIconWidth(), standIcon.getIconHeight());
hit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (playerS1 < 21 || playerS2 < 21 && playerS1 != 21 && playerS2 != 21) {
hit(frame);
playerSum();
printGame();
}
}
});
stand.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dealerMaxSum = Math.max(dealerS1, dealerS2);
while (dealerMaxSum <= 16) {
dealerHit(frame);
dealerSum();
dealerMaxSum = Math.max(dealerS1, dealerS2);
printGame();
}
printWinner();
}
});
JLabel backgroundLabel = new JLabel(new ImageIcon(Blackjack.class.getResource("background.png")));
backgroundLabel.setSize(frame.getSize());
frame.setContentPane(backgroundLabel);
ImageIcon icon;
frame.add(hit);
frame.add(stand);
// Fill the deck with cards
String[] ranks = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
String[] suits = {"Hearts", "Diamonds", "Clubs", "Spades"};
for (String rank : ranks) {
for (String suit : suits) {
String iconAddress = rank + suit;
Blackjack instance = new Blackjack();
icon = new ImageIcon (new ImageIcon(instance.getClass().getResource(iconAddress + ".png")).getImage().getScaledInstance(1200, 800, java.awt.Image.SCALE_SMOOTH));
Cards card = new Cards(suit, rank, numberOfDecks, icon);
cards.add(card);
}
}
// Game loop
while(true) {
// Resetting array lists at the start of a new game
playerCards.clear();
dealerCards.clear();
cards.clear();
for (String rank : ranks) {
for (String suit : suits) {
Blackjack instance = new Blackjack();
String iconAddress = rank + suit;
icon = new ImageIcon (new ImageIcon(instance.getClass().getResource(iconAddress + ".png")).getImage().getScaledInstance(1200, 800, java.awt.Image.SCALE_SMOOTH));
Cards card = new Cards(suit, rank, numberOfDecks, icon);
cards.add(card);
}
}
System.out.println("Current balance: " + balance);
System.out.print("Enter bet ammount: ");
int bet = Integer.parseInt(s.nextLine()); // THIS IS COMMENTED FOR TESTS - IT'S PART OF THE BALANCE WORKINGS
System.out.println("---------------------------------");
clearCards(frame);
// Initial deal
hit(frame);
dealerHit(frame);
hit(frame);
// Calculate sum of player and dealer cards
playerSum();
dealerSum();
// Print out current state of cards
printGame();
displayPlayerCards(frame);
displayDealerCards(frame);
while(true) {
String input2 = s.nextLine();
if(input2.equals("hit")) {
if(playerS1 < 21 || playerS2 < 21 && playerS1 != 21 && playerS2 != 21) {
hit(frame);
playerSum();
printGame();
}
else {
break;
}
}
else if(input2.equals("stand")) {
dealerMaxSum = Math.max(dealerS1, dealerS2);
while(dealerMaxSum <= 16) {
dealerHit(frame);
dealerSum();
dealerMaxSum = Math.max(dealerS1, dealerS2);
printGame();
}
break;
}
displayDealerCards(frame);
}
printWinner();
if(winner == 0) {
balance += bet;
}
else if(winner == 1) {
balance -= bet;
}
}
// Prints number of cards of each kind - FOR DEBUGGING
/*
for(Cards card : cards) {
System.out.println(card.numberOfCards + " x " + card.rank + " of " + card.suit);
}
*/
}
public static void clearCards(JFrame frame) {
Component[] components = frame.getContentPane().getComponents();
for (Component component : components) {
if (component instanceof JLabel) {
frame.remove(component);
}
}
frame.revalidate();
frame.repaint();
}
public static void displayDealerCards(JFrame frame) {
int x = 450; // Starting X position for the card icons
int y = 100; // Y position for the card icons
int cardWidth = 70; // Width for the card icons
int cardHeight = 100; // Height for the card icons
for (Cards card : dealerCards) {
Image resizedImage = card.icon.getImage().getScaledInstance(cardWidth, cardHeight, Image.SCALE_SMOOTH);
ImageIcon resizedIcon = new ImageIcon(resizedImage);
JLabel cardLabel = new JLabel(resizedIcon);
cardLabel.setBounds(x, y, cardWidth, cardHeight);
// Set the Z-order of the cardLabel to the topmost layer (highest Z-order)
frame.add(cardLabel, Integer.valueOf(0));
// Increment X position to display the next card icon
x += 80;
// Ensure the cardLabel is brought to the front after setting Z-order
cardLabel.repaint();
}
frame.revalidate();
frame.repaint();
}
public static void displayPlayerCards(JFrame frame) {
int x = 450; // Starting X position for the card icons
int y = 400; // Y position for the card icons
int cardWidth = 70; // Width for the card icons
int cardHeight = 100; // Height for the card icons
for (Cards card : playerCards) {
Image resizedImage = card.icon.getImage().getScaledInstance(cardWidth, cardHeight, Image.SCALE_SMOOTH);
ImageIcon resizedIcon = new ImageIcon(resizedImage);
JLabel cardLabel = new JLabel(resizedIcon);
cardLabel.setBounds(x, y, cardWidth, cardHeight);
// Set the Z-order of the cardLabel to the topmost layer (highest Z-order)
frame.add(cardLabel, Integer.valueOf(0));
// Increment X position to display the next card icon
x += 80;
// Ensure the cardLabel is brought to the front after setting Z-order
cardLabel.repaint();
}
frame.revalidate();
frame.repaint();
}
public static void printWinner() {
if(playerS2 > 21) {
if(playerS1 > 21) {
System.out.println("You lost!\n");
winner = 1;
}
else if(playerS1 <= 21 && playerS1 < dealerMaxSum) {
System.out.println("You lost!\n");
winner = 1;
}
else if(playerS1 <= 21 && playerS1 > dealerMaxSum) {
System.out.println("You won!\n");
winner = 0;
}
else if(playerS1 <= 21 && playerS1 == dealerMaxSum) {
System.out.println("Tie!\n");
winner = 2;
}
}
else if(playerS2 == 21) {
if(playerS2 > dealerMaxSum || dealerMaxSum > 21) {
System.out.println("You won!\n");
winner = 0;
}
else if(dealerMaxSum == 21) {
System.out.println("Tie!\n");
winner = 2;
}
}
else if(playerS2 < 21) {
if(dealerMaxSum > 21) {
System.out.println("You won!\n");
winner = 0;
}
else if(playerS2 > dealerMaxSum) {
System.out.println("You won!\n");
winner = 0;
}
else if(playerS2 < dealerMaxSum) {
System.out.println("You lost!\n");
winner = 1;
}
else if(playerS2 == dealerMaxSum) {
System.out.println("Tie!\n");
winner = 2;
}
}
}
// Hit method
public static void hit(JFrame frame) {
Random rng = new Random();
Boolean cardFound = false;
while(!cardFound) {
int randomIndex = rng.nextInt(52);
if(cards.get(randomIndex).numberOfCards > 0) {
Cards card = cards.get(randomIndex);
card.useCard();
playerCards.add(card);
cardFound = true;
}
}
displayPlayerCards(frame);
playerSum();
}
// Dealer Hit method
public static void dealerHit(JFrame frame) {
Random rng = new Random();
Boolean cardFound = false;
while(!cardFound) {
int randomIndex = rng.nextInt(52);
if(cards.get(randomIndex).numberOfCards > 0) {
Cards card = cards.get(randomIndex);
card.useCard();
dealerCards.add(card);
cardFound = true;
}
}
displayDealerCards(frame);
}
// Player Cards Sum method
public static void playerSum() {
playerS1 = 0;
playerS2 = 0;
for( Cards card : playerCards ) {
switch(card.rank) {
case "2":
playerS1 += 2;
playerS2 += 2;
break;
case "3":
playerS1 += 3;
playerS2 += 3;
break;
case "4":
playerS1 += 4;
playerS2 += 4;
break;
case "5":
playerS1 += 5;
playerS2 += 5;
break;
case "6":
playerS1 += 6;
playerS2 += 6;
break;
case "7":
playerS1 += 7;
playerS2 += 7;
break;
case "8":
playerS1 += 8;
playerS2 += 8;
break;
case "9":
playerS1 += 9;
playerS2 += 9;
break;
case "10":
playerS1 += 10;
playerS2 += 10;
break;
case "J":
playerS1 += 10;
playerS2 += 10;
break;
case "Q":
playerS1 += 10;
playerS2 += 10;
break;
case "K":
playerS1 += 10;
playerS2 += 10;
break;
case "A":
playerS1 += 1;
playerS2 += 11;
break;
}
}
}
// Dealer Cards Sum method
public static void dealerSum() {
dealerS1 = 0;
dealerS2 = 0;
for( Cards card : dealerCards ) {
switch(card.rank) {
case "2":
dealerS1 += 2;
dealerS2 += 2;
break;
case "3":
dealerS1 += 3;
dealerS2 += 3;
break;
case "4":
dealerS1 += 4;
dealerS2 += 4;
break;
case "5":
dealerS1 += 5;
dealerS2 += 5;
break;
case "6":
dealerS1 += 6;
dealerS2 += 6;
break;
case "7":
dealerS1 += 7;
dealerS2 += 7;
break;
case "8":
dealerS1 += 8;
dealerS2 += 8;
break;
case "9":
dealerS1 += 9;
dealerS2 += 9;
break;
case "10":
dealerS1 += 10;
dealerS2 += 10;
break;
case "J":
dealerS1 += 10;
dealerS2 += 10;
break;
case "Q":
dealerS1 += 10;
dealerS2 += 10;
break;
case "K":
dealerS1 += 10;
dealerS2 += 10;
break;
case "A":
dealerS1 += 1;
dealerS2 += 11;
break;
}
}
}
// Prints Player and Dealer Cards method
public static void printGame() {
// Prints player sum
if(playerS1 != playerS2) {
if(playerS2 < 21) {
System.out.println("Player cards sum: " + playerS1 + " / " + playerS2);
}
else if (playerS2 == 21) {
System.out.println("Player cards sum: " + playerS2);
}
else {
System.out.println("Player cards sum: " + playerS1);
}
}
else {
System.out.println("Player cards sum: " + playerS2);
}
System.out.println();
System.out.println("Player cards:");
for( Cards card : playerCards ) {
System.out.println(card.rank + " of " + card.suit);
}
System.out.println();
// Prints dealer sum
if(dealerS1 != dealerS2) {
if(dealerS2 < 21) {
System.out.println("Dealer cards sum: " + dealerS1 + " / " + dealerS2);
}
else if (dealerS2 == 21){
System.out.println("Dealer cards sum: " + dealerS2);
}
else {
System.out.println("Dealer cards sum: " + dealerS1);
}
}
else {
System.out.println("Dealer cards sum: " + dealerS1);
}
System.out.println();
System.out.println("Dealer cards:");
for( Cards card : dealerCards ) {
System.out.println(card.rank + " of " + card.suit);
}
System.out.println();
}}Editor is loading...
Leave a Comment