Blackjack Assignment Solution

From Knowledge Kitchen
Jump to navigation Jump to search


Something similar to a solution to the Blackjack Assignment in Java. If you were to base your own solution on this code, it would be obvious and it would be considered plagiarism for the purposes of our course.

Code

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

What links here