//TODO import java.util.Random; //for randomness //import java.io.BufferedReader; //import java.io.InputStreamReader; import java.io.*; class Blackjack { public static void main(String [] args) throws java.io.IOException { System.out.println("Welcome To Blackjack!"); System.out.println("Copyright (C) 2021 msglm."); System.out.println("License AGPLv3+: GNU Affero GPL version 3 Only"); System.out.println("."); System.out.println("This is free software: you are free to change and redistribute it."); System.out.println("There is NO WARRANTY, to the extent permitted by law. \n"); //first is for card value, second is for card type int[] dealerFaceValues = new int[21]; int[] dealerSuitValues = new int[21]; int[] playerFaceValues = new int[21]; int[] playerSuitValues = new int[21]; int dealerDeltCards = 0; int playerDeltCards = 0; int dealerScore = 0; int playerScore = 0; int dealerScoreSuit = 0; int playerScoreSuit = 0; int roundnum=0; boolean stood = false; boolean gameEnd = false; boolean playerHit = true; boolean dealerHit = true; Random random = new Random(); dealerFaceValues[0] = random.nextInt(9+1)+1; dealerSuitValues[0] = random.nextInt(1+1)+1; playerFaceValues[0] = random.nextInt(9+1)+1; playerSuitValues[0] = random.nextInt(1+1)+1; //TODO: SWITCH STATEMENT THAT ASSIGNES A NAME TO EACH CARD System.out.println("Dealer's Hand:"); for(int i=0;i<21;i++){ int curcar = i + 1; if(dealerFaceValues[i] != 0 || dealerSuitValues[i] != 0){ System.out.println("Card " + curcar + " has a Face of " + dealerFaceValues[i] + " and a Suit of " + dealerSuitValues[i]); } } System.out.println("Player's Hand:"); for(int i=0;i<21;i++){ int curcar = i + 1; if(playerFaceValues[i] != 0 || playerSuitValues[i] != 0){ System.out.println("Card " + curcar + " has a Face of " + playerFaceValues[i] + " and a Suit of " + playerSuitValues[i]); } } while(!gameEnd){ roundnum++; System.out.println("Would you like a card? Y/n"); BufferedReader cardWantInput = new BufferedReader(new InputStreamReader(System.in)); String tempString = cardWantInput.readLine(); char cardWant = tempString.charAt(0); System.out.println("===ROUND " + roundnum + " ==="); if(cardWant == 'y' || cardWant == 'Y'){ playerHit = true; playerDeltCards++; playerFaceValues[playerDeltCards] = random.nextInt(9+1)+1; playerSuitValues[playerDeltCards] = random.nextInt(1+1)+1; } else { stood = true; playerHit = false; } System.out.println(""); System.out.println("Dealer's Hand:"); for(int i=0;i<21;i++){ int curcar = i + 1; if(dealerFaceValues[i] != 0 || dealerSuitValues[i] != 0){ if(curcar == 1){ System.out.println("Card " + curcar + " has a Face of " + dealerFaceValues[i] + " and a Suit of " + dealerSuitValues[i]); } else { System.out.println ("The Dealer has another card..."); } } } System.out.println(""); System.out.println("Player's Hand:"); for(int i=0;i<21;i++){ int curcar = i + 1; if(playerFaceValues[i] != 0 || playerSuitValues[i] != 0){ System.out.println("Card " + curcar + " has a Face of " + playerFaceValues[i] + " and a Suit of " + playerSuitValues[i]); } } System.out.println(""); //Find each one's score for (int i=0;i<21;i++){ playerScore = playerScore + playerFaceValues[i]; } for (int i=0;i<21;i++){ dealerScore = dealerScore + dealerFaceValues[i]; } for (int i=0;i<21;i++){ playerScoreSuit = playerScoreSuit + playerSuitValues[i]; } for (int i=0;i<21;i++){ dealerScoreSuit = dealerScoreSuit + dealerSuitValues[i]; } if(dealerScore < 17){ dealerHit = true; dealerDeltCards++; dealerFaceValues[dealerDeltCards] = random.nextInt(9+1)+1; dealerSuitValues[dealerDeltCards] = random.nextInt(1+1)+1; } else { dealerHit = false; } System.out.println("Status:"); if(playerHit){ System.out.println("You took a Hit!"); } else { System.out.println("You decided to stand..."); } if(dealerHit){ System.out.println("The dealer has taken a hit!"); } else { System.out.println("The dealer has decided to stand..."); } if(dealerScore > 21) { System.out.println("DEALER BUSTED!!! YOU WIN!"); gameEnd = true; } if(playerScore > 21){ System.out.println("YOU BUSTED!!! YOU LOSE"); gameEnd = true; } //probably should clean this up with swich statments. This looks horrible. if (stood == true && gameEnd == false) { if(dealerScore > playerScore){ System.out.println("DEALER HAS THE HIGHER CARDS!!! YOU LOSE!"); gameEnd = true; } else if (playerScore > dealerScore){ System.out.println("YOU HAVE THE HIGHER CARDS!!! YOU WIN!"); gameEnd = true; } else { System.out.println("YOU HAVE THE SAME VALUES. WE MUST LOOK AT THE SUITS TO DETERMINE WHO WON"); if(dealerScore + dealerScoreSuit > playerScore + playerScoreSuit){ System.out.println("DEALER HAS THE HIGHER CARDS!!! YOU LOSE!"); gameEnd = true; } else if (playerScore + playerScoreSuit > dealerScore + dealerScoreSuit){ System.out.println("YOU HAVE THE HIGHER CARDS!!! YOU WIN!"); gameEnd = true; } else { System.out.println("THE VALUES ARE STILL THE SAME! A COIN FLIP TO DECIDE WHO WON!"); if(random.nextInt(1) == 1){ System.out.println("YOU HAVE WON BY PURE LUCK!"); gameEnd = true; } else { System.out.println("YOU HAVE LOST BY PURE LUCK!"); gameEnd = true; }}}} //reset the score counted for next round playerScoreSuit=0; dealerScoreSuit=0; dealerScore=0; playerScore=0; }}}