Difference between revisions of "Blackjack Assignment Solution"

From Knowledge Kitchen
Jump to navigation Jump to search
m
m
Line 6: Line 6:
 
==Code==
 
==Code==
  
package edu.nyu.cs.fb1258;
+
<syntaxhighlight lang="java">
 
import java.util.Random;
 
import java.util.Scanner;
 
 
 
public class BlackjackSimple {
 
 
public static void main(String[] args) {
 
 
//a string that keeps track of which cards we've dealt to the player
 
String playerCards = ""; //starts off blank
 
 
//two sentinel variables that keep track of whether to ask each player if they want a new card
 
boolean askDealerToHit = true;
 
boolean askPlayerToHit = true;
 
 
//two sentinel variables that keep track of whether either player has gone "bust".
 
boolean dealerIsBust = false;
 
boolean playerIsBust = false;
 
 
//two integers to keep a running total of the points
 
int playerTotal = 0;
 
int dealerTotal = 0;
 
 
//create a Random "object" to use to generate random numbers
 
//the default "seed" used by this built-in Random object is the current time in milliseconds.
 
//two separate pseudo-random number generators based on the same seed will produce the same pseudo-random numbers... beware!
 
Random randomGenerator = new Random();
 
 
    //deal first "hand" to player
 
    int playerCard1 = randomGenerator.nextInt(10) + 1; //generate a pseudo-random number between 1-10
 
    int playerCard2 = randomGenerator.nextInt(10) + 1; //generate a pseudo-random number between 1-10
 
    playerCards = playerCard1 + ", " + playerCard2; //store these cards as a string we use to tell the user what they have been dealt so far
 
   
 
    //deal first "hand" to dealer
 
    int dealerCard1 = randomGenerator.nextInt(10) + 1; //generate a pseudo-random number between 1-10
 
    int dealerCard2 = randomGenerator.nextInt(10) + 1; //generate a pseudo-random number between 1-10
 
 
    //calculate totals
 
    playerTotal += playerCard1 + playerCard2; //add these two cards to the total
 
    dealerTotal += dealerCard1 + dealerCard2;
 
   
 
    //tell the user what they have
 
    System.out.println("Your hand: " + playerCards);
 
   
 
//as long as neither player is bust and either player wants a new card, keep iterating the loop
 
    while ( (!dealerIsBust && !playerIsBust) && (askDealerToHit || askPlayerToHit)) {
 
   
 
    //ask the user whether they would like to hit
 
    System.out.println("Would you like to 'hit' or 'stand'?");
 
    Scanner scnr = new Scanner(System.in);
 
    String playerResponse = scnr.nextLine(); //get the response
 
   
 
    //handle the player's response
 
    switch (playerResponse.toLowerCase()) {
 
    case "hit":
 
    //if they asked for a hit, give them a card.
 
        int newCard = randomGenerator.nextInt(10) + 1; //generate a pseudo-random number between 1-10
 
        playerTotal += newCard; //add this card to the numeric total we are keeping
 
        playerCards+= ", " + newCard; //add this card to the list of cards we show the user        
 
       
 
        //tell the user what they have
 
        System.out.println("Sure...  You now have: " + playerCards);
 
 
        //check whether player went "bust"
 
        if (playerTotal > 21) {
 
        playerIsBust = true; //flip the flag
 
        }
 
       
 
    break; //break out of the switch statement
 
    case "stand":
 
    //if they stand, we don't ask them if they want a hit again
 
    askPlayerToHit = false; //change the flag
 
    break; //break out of the switch statement
 
    default:
 
    //we only get here if the user entered something other than 'hit' or 'stand'
 
    System.out.println("Sorry, I can't understand you... I guess you want to stand.");
 
    askPlayerToHit = false; //change the flag
 
    break; //break out of the switch statement
 
    } //switch
 
 
    //if the player went "bust", quit right now
 
    if (playerIsBust) break; //break out of the while loop
 
 
   
 
    //determine whether dealer whether they would like to hit
 
    boolean dealerWantsCard = randomGenerator.nextBoolean(); //generate a pseudo-random boolean value
 
 
    //pretend as if the dealer answered 'hit' or 'stand', like a real player
 
    String dealerResponse = ""; //this will store the dealer's response that we generate
 
    if (dealerWantsCard) {
 
    dealerResponse = "hit"; //simulate a "hit" response
 
    }
 
    else {
 
    dealerResponse = "stand"; //simulate a "stand" response
 
    }
 
   
 
    //handle the dealer's response
 
    switch(dealerResponse.toLowerCase()) {
 
    case "hit":
 
    //if they asked for a hit, give them a card.
 
        int newCard = randomGenerator.nextInt(10) + 1; //generate a pseudo-random number between 1-10
 
        dealerTotal += newCard; //add this card to the numeric total we are keeping
 
       
 
        //check whether dealer went "bust"
 
        if (dealerTotal > 21) {
 
        dealerIsBust = true; //flip the flag
 
        }
 
       
 
    break; //break out of the switch statement
 
    case "stand":
 
    //if they stand, we don't ask them if they want a hit again
 
    askDealerToHit = false; //change the flag
 
    break; //break out of the switch statement
 
    } //switch
 
   
 
    scnr.close(); //close Scanner to conserve resourcres
 
    } //while
 
   
 
    //players are both done hitting... now check for any busts and tell them who won
 
    if (playerIsBust) {
 
    //the player busted
 
    System.out.println("You went bust with " + playerTotal + ".\nThe dealer wins with " + dealerTotal + "!");
 
    }
 
    else if (dealerIsBust) {
 
    //the dealer busted
 
    System.out.println("The dealer went bust with " + dealerTotal + ".\nYou win with " + playerTotal + "!");    
 
    }
 
    else if (playerTotal > dealerTotal) {
 
    System.out.println("The dealer has " + dealerTotal + ".\nYou win with " + playerTotal + "!");
 
    }
 
    else if (playerTotal < dealerTotal) {
 
    System.out.println("The dealer has " + dealerTotal + " and you have " + playerTotal + ".\nDealer wins!");
 
    }
 
    else {
 
    System.out.println("It's a tie!  You and the dealer both have " + playerTotal + ".");
 
    }
 
   
 
} //main method
 
 
} //class
 
  
 +
package edu.nyu.cs.fb1258;
 +
 +
import java.util.Random;
 +
import java.util.Scanner;
 +
 +
 +
public class BlackjackSimple {
 +
 +
public static void main(String[] args) {
 +
 +
//a string that keeps track of which cards we've dealt to the player
 +
String playerCards = ""; //starts off blank
 +
 +
//two sentinel variables that keep track of whether to ask each player if they want a new card
 +
boolean askDealerToHit = true;
 +
boolean askPlayerToHit = true;
 +
 +
//two sentinel variables that keep track of whether either player has gone "bust".
 +
boolean dealerIsBust = false;
 +
boolean playerIsBust = false;
 +
 +
//two integers to keep a running total of the points
 +
int playerTotal = 0;
 +
int dealerTotal = 0;
 +
 +
//create a Random "object" to use to generate random numbers
 +
//the default "seed" used by this built-in Random object is the current time in milliseconds.
 +
//two separate pseudo-random number generators based on the same seed will produce the same pseudo-random numbers... beware!
 +
Random randomGenerator = new Random();
 +
 +
    //deal first "hand" to player
 +
    int playerCard1 = randomGenerator.nextInt(10) + 1; //generate a pseudo-random number between 1-10
 +
    int playerCard2 = randomGenerator.nextInt(10) + 1; //generate a pseudo-random number between 1-10
 +
    playerCards = playerCard1 + ", " + playerCard2; //store these cards as a string we use to tell the user what they have been dealt so far
 +
   
 +
    //deal first "hand" to dealer
 +
    int dealerCard1 = randomGenerator.nextInt(10) + 1; //generate a pseudo-random number between 1-10
 +
    int dealerCard2 = randomGenerator.nextInt(10) + 1; //generate a pseudo-random number between 1-10
 +
 +
    //calculate totals
 +
    playerTotal += playerCard1 + playerCard2; //add these two cards to the total
 +
    dealerTotal += dealerCard1 + dealerCard2;
 +
   
 +
    //tell the user what they have
 +
    System.out.println("Your hand: " + playerCards);
 +
   
 +
//as long as neither player is bust and either player wants a new card, keep iterating the loop
 +
    while ( (!dealerIsBust && !playerIsBust) && (askDealerToHit || askPlayerToHit)) {
 +
   
 +
    //ask the user whether they would like to hit
 +
    System.out.println("Would you like to 'hit' or 'stand'?");
 +
    Scanner scnr = new Scanner(System.in);
 +
    String playerResponse = scnr.nextLine(); //get the response
 +
   
 +
    //handle the player's response
 +
    switch (playerResponse.toLowerCase()) {
 +
    case "hit":
 +
    //if they asked for a hit, give them a card.
 +
        int newCard = randomGenerator.nextInt(10) + 1; //generate a pseudo-random number between 1-10
 +
        playerTotal += newCard; //add this card to the numeric total we are keeping
 +
        playerCards+= ", " + newCard; //add this card to the list of cards we show the user        
 +
       
 +
        //tell the user what they have
 +
        System.out.println("Sure...  You now have: " + playerCards);
 +
 +
        //check whether player went "bust"
 +
        if (playerTotal > 21) {
 +
        playerIsBust = true; //flip the flag
 +
        }
 +
       
 +
    break; //break out of the switch statement
 +
    case "stand":
 +
    //if they stand, we don't ask them if they want a hit again
 +
    askPlayerToHit = false; //change the flag
 +
    break; //break out of the switch statement
 +
    default:
 +
    //we only get here if the user entered something other than 'hit' or 'stand'
 +
    System.out.println("Sorry, I can't understand you... I guess you want to stand.");
 +
    askPlayerToHit = false; //change the flag
 +
    break; //break out of the switch statement
 +
    } //switch
 +
 +
    //if the player went "bust", quit right now
 +
    if (playerIsBust) break; //break out of the while loop
 +
 +
   
 +
    //determine whether dealer whether they would like to hit
 +
    boolean dealerWantsCard = randomGenerator.nextBoolean(); //generate a pseudo-random boolean value
 +
 +
    //pretend as if the dealer answered 'hit' or 'stand', like a real player
 +
    String dealerResponse = ""; //this will store the dealer's response that we generate
 +
    if (dealerWantsCard) {
 +
    dealerResponse = "hit"; //simulate a "hit" response
 +
    }
 +
    else {
 +
    dealerResponse = "stand"; //simulate a "stand" response
 +
    }
 +
   
 +
    //handle the dealer's response
 +
    switch(dealerResponse.toLowerCase()) {
 +
    case "hit":
 +
    //if they asked for a hit, give them a card.
 +
        int newCard = randomGenerator.nextInt(10) + 1; //generate a pseudo-random number between 1-10
 +
        dealerTotal += newCard; //add this card to the numeric total we are keeping
 +
       
 +
        //check whether dealer went "bust"
 +
        if (dealerTotal > 21) {
 +
        dealerIsBust = true; //flip the flag
 +
        }
 +
       
 +
    break; //break out of the switch statement
 +
    case "stand":
 +
    //if they stand, we don't ask them if they want a hit again
 +
    askDealerToHit = false; //change the flag
 +
    break; //break out of the switch statement
 +
    } //switch
 +
   
 +
    scnr.close(); //close Scanner to conserve resourcres
 +
    } //while
 +
   
 +
    //players are both done hitting... now check for any busts and tell them who won
 +
    if (playerIsBust) {
 +
    //the player busted
 +
    System.out.println("You went bust with " + playerTotal + ".\nThe dealer wins with " + dealerTotal + "!");
 +
    }
 +
    else if (dealerIsBust) {
 +
    //the dealer busted
 +
    System.out.println("The dealer went bust with " + dealerTotal + ".\nYou win with " + playerTotal + "!");    
 +
    }
 +
    else if (playerTotal > dealerTotal) {
 +
    System.out.println("The dealer has " + dealerTotal + ".\nYou win with " + playerTotal + "!");
 +
    }
 +
    else if (playerTotal < dealerTotal) {
 +
    System.out.println("The dealer has " + dealerTotal + " and you have " + playerTotal + ".\nDealer wins!");
 +
    }
 +
    else {
 +
    System.out.println("It's a tie!  You and the dealer both have " + playerTotal + ".");
 +
    }
 +
   
 +
} //main method
 +
 +
} //class
 +
<syntaxhighlight>
  
 
{{Template:Inbound links|page={{PAGENAMEE}}}}
 
{{Template:Inbound links|page={{PAGENAMEE}}}}

Revision as of 18:27, 20 September 2017


Simple solution to the Blackjack Assignment.

Code

<syntaxhighlight lang="java">

package edu.nyu.cs.fb1258;

import java.util.Random; import java.util.Scanner;


public class BlackjackSimple {

public static void main(String[] args) {

//a string that keeps track of which cards we've dealt to the player String playerCards = ""; //starts off blank

//two sentinel variables that keep track of whether to ask each player if they want a new card boolean askDealerToHit = true; boolean askPlayerToHit = true;

//two sentinel variables that keep track of whether either player has gone "bust". boolean dealerIsBust = false; boolean playerIsBust = false;

//two integers to keep a running total of the points int playerTotal = 0; int dealerTotal = 0;

//create a Random "object" to use to generate random numbers //the default "seed" used by this built-in Random object is the current time in milliseconds. //two separate pseudo-random number generators based on the same seed will produce the same pseudo-random numbers... beware! Random randomGenerator = new Random();

//deal first "hand" to player int playerCard1 = randomGenerator.nextInt(10) + 1; //generate a pseudo-random number between 1-10 int playerCard2 = randomGenerator.nextInt(10) + 1; //generate a pseudo-random number between 1-10 playerCards = playerCard1 + ", " + playerCard2; //store these cards as a string we use to tell the user what they have been dealt so far

//deal first "hand" to dealer int dealerCard1 = randomGenerator.nextInt(10) + 1; //generate a pseudo-random number between 1-10 int dealerCard2 = randomGenerator.nextInt(10) + 1; //generate a pseudo-random number between 1-10

//calculate totals playerTotal += playerCard1 + playerCard2; //add these two cards to the total dealerTotal += dealerCard1 + dealerCard2;

//tell the user what they have System.out.println("Your hand: " + playerCards);

//as long as neither player is bust and either player wants a new card, keep iterating the loop while ( (!dealerIsBust && !playerIsBust) && (askDealerToHit || askPlayerToHit)) {

//ask the user whether they would like to hit System.out.println("Would you like to 'hit' or 'stand'?"); Scanner scnr = new Scanner(System.in); String playerResponse = scnr.nextLine(); //get the response

//handle the player's response switch (playerResponse.toLowerCase()) { case "hit": //if they asked for a hit, give them a card. int newCard = randomGenerator.nextInt(10) + 1; //generate a pseudo-random number between 1-10 playerTotal += newCard; //add this card to the numeric total we are keeping playerCards+= ", " + newCard; //add this card to the list of cards we show the user

//tell the user what they have System.out.println("Sure... You now have: " + playerCards);

//check whether player went "bust" if (playerTotal > 21) { playerIsBust = true; //flip the flag }

break; //break out of the switch statement case "stand": //if they stand, we don't ask them if they want a hit again askPlayerToHit = false; //change the flag break; //break out of the switch statement default: //we only get here if the user entered something other than 'hit' or 'stand' System.out.println("Sorry, I can't understand you... I guess you want to stand."); askPlayerToHit = false; //change the flag break; //break out of the switch statement } //switch

//if the player went "bust", quit right now if (playerIsBust) break; //break out of the while loop


//determine whether dealer whether they would like to hit boolean dealerWantsCard = randomGenerator.nextBoolean(); //generate a pseudo-random boolean value

//pretend as if the dealer answered 'hit' or 'stand', like a real player String dealerResponse = ""; //this will store the dealer's response that we generate if (dealerWantsCard) { dealerResponse = "hit"; //simulate a "hit" response } else { dealerResponse = "stand"; //simulate a "stand" response }

//handle the dealer's response switch(dealerResponse.toLowerCase()) { case "hit": //if they asked for a hit, give them a card. int newCard = randomGenerator.nextInt(10) + 1; //generate a pseudo-random number between 1-10 dealerTotal += newCard; //add this card to the numeric total we are keeping

//check whether dealer went "bust" if (dealerTotal > 21) { dealerIsBust = true; //flip the flag }

break; //break out of the switch statement case "stand": //if they stand, we don't ask them if they want a hit again askDealerToHit = false; //change the flag break; //break out of the switch statement } //switch

scnr.close(); //close Scanner to conserve resourcres } //while

//players are both done hitting... now check for any busts and tell them who won if (playerIsBust) { //the player busted System.out.println("You went bust with " + playerTotal + ".\nThe dealer wins with " + dealerTotal + "!"); } else if (dealerIsBust) { //the dealer busted System.out.println("The dealer went bust with " + dealerTotal + ".\nYou win with " + playerTotal + "!"); } else if (playerTotal > dealerTotal) { System.out.println("The dealer has " + dealerTotal + ".\nYou win with " + playerTotal + "!"); } else if (playerTotal < dealerTotal) { System.out.println("The dealer has " + dealerTotal + " and you have " + playerTotal + ".\nDealer wins!"); } else { System.out.println("It's a tie! You and the dealer both have " + playerTotal + "."); }

} //main method

} //class <syntaxhighlight>

What links here