Blackjack Assignment Solution

From Knowledge Kitchen
Revision as of 19:14, 19 February 2014 by Amos (talk | contribs) (Created page with "Simple solution to the Blackjack Assignment. ==Code== package edu.nyu.cs.ab1258; import java.util.Random; import java.util.Scanner; public class BlackjackSimpl...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Simple solution to the Blackjack Assignment.

Code

package edu.nyu.cs.ab1258;

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