lundi 14 décembre 2015

Possible looping statement issue Java

This is my attempt at the very first steps of a BlackJack program. When running the program, I notice it loops back and deals a 3rd card to the player and dealer before evaluating the hand with just the initial 2 cards. I also seem to be missing the evaluation statements for whether the Dealer or Player wins and the resulting bet/bank computations. Where is it causing the repeat of the while(tbQuit != true)'s first half? Why isn't it showing or running the EvaluatePlayerStatus portion?

public class BlackJack {

public static void main(String[] args) {

    Dealer cardDealer = new Dealer();
    Player dealerPlayer = new Player("Dealer");
    System.out.println("What is your name?");
    Scanner scnPlayerName = new Scanner(System.in);
    String tsPlayerName = scnPlayerName.nextLine();
    Player playerPlayer = new Player(tsPlayerName);
    System.out.println("Player's name is " + tsPlayerName);
    System.out.println("\n\tPlayer's starting bank is " + playerPlayer.GetBank()
                        + "\n\tEACH BET IS 100\n");  //  being lazy to avoid having to qualify and constrain user input

    boolean tbQuit = false;
    boolean tbFirstPass = true;

    while(tbQuit != true)
    {
        System.out.println(tsPlayerName + " Bets 100");
        playerPlayer.SetBet(100);

        cardDealer.Deal(playerPlayer);
        System.out.println("\n" + tsPlayerName + " is showing  " + playerPlayer.ShowLastCard().toString()
                            + "  TotalInHand = " + playerPlayer.GetTotalInHand());

        if(tbFirstPass == false)
        {
            if(false == EvaluatePlayerStatus(playerPlayer, dealerPlayer)) break;
        }

        cardDealer.Deal(dealerPlayer);
        System.out.println("\nDealer takes a card");

        if(tbFirstPass == false)
        {
            if(false == EvaluatePlayerStatus(playerPlayer, dealerPlayer)) break;
        }

        cardDealer.Deal(playerPlayer);
        System.out.println("\n" + tsPlayerName + " is showing  " + playerPlayer.ShowLastCard().toString());

        if(tbFirstPass == false)
        {
            if(false == EvaluatePlayerStatus(playerPlayer, dealerPlayer)) break;
        }

        cardDealer.Deal(dealerPlayer);
        System.out.println("\nThe dealer is showing  " + dealerPlayer.ShowDealerTopCard().toString());

        if(tbFirstPass == false)
        {
            if(false == EvaluatePlayerStatus(playerPlayer, dealerPlayer)) break;
        }

        tbFirstPass = false;
     }  

    //show dealer's top card
    //show player's cards

}

private static boolean EvaluatePlayerStatus(Player aPlayer, Player aDealer) {

    //  issue prompts to user from this function

    //  return false if status eval results in fail or wants to quit

    boolean tbRetVal = false;

    //  step 1, check and see who has 21, 
    //  if dealer does, player loses money, 
    //  if player does, player wins money + bet, 
    //  if player and dealer both have 21, player gets bet back.

    System.out.println("EvaluatePlayerStatus"
                        + "\n\t" + aPlayer.GetName() + "  " + aPlayer.GetTotalInHand()
                        + "\n\t" + aDealer.GetName()  + "  " + aDealer.GetTotalInHand());

    if(aPlayer.GetTotalInHand() == 21 && aDealer.GetTotalInHand() == 21) {

        System.out.println("Push");
         tbRetVal = true;
    }
     else {

        if(aDealer.GetTotalInHand() == 21) {
                System.out.println("Dealer Wins!");

                aPlayer.SetBank(aPlayer.GetBank() - aPlayer.GetBet());

                //  step 4 - check bank total, if 0, quit.

                if(aPlayer.GetBank() <= 0)
                {
                    System.out.println(aPlayer.GetName() + "  You are Broke\n\nGAME OVER");

                    return false;            
                }
            }

            else {

                if(aPlayer.GetTotalInHand() == 21)
                {
                   aPlayer.SetBank(aPlayer.GetBank() - aPlayer.GetBet());

                    System.out.println(aPlayer.GetName() + " Wins! "
                                        + "\n\tYour bank now has " + aPlayer.GetBank());
                     tbRetVal = true;
                }
            }
        }



    //  step 2 - check cards total, 
    //  whoever has highest total wins, 
    //  bet/money rules from step 1 apply

    if(aPlayer.GetTotalInHand() > aDealer.GetTotalInHand())
    {
        aPlayer.SetBank(aPlayer.GetBank() + aPlayer.GetBet());

        aPlayer.SetBet(0);

        System.out.println(aPlayer.GetName() + "  Wins: " + aPlayer.GetBet());

        tbRetVal = true;
    }

    else {
        if(aPlayer.GetTotalInHand() < aDealer.GetTotalInHand()) {
                System.out.println("Dealer Wins!" + aPlayer.GetName() + " loses!");

                aPlayer.SetBank(aPlayer.GetBank() - aPlayer.GetBet()); 
    }
    }

    //  step 5 - play again?

    if(false == DealAgain("Deal another hand?" + "\nEnter Stop to Quit")) return false;

    //  the HOUSE RULES!!
    //  auto bet the fixed incr

    aPlayer.SetBet(aPlayer.GetBet() + 100);

    System.out.println(aPlayer.GetName() + "  House rules betting:  You are betting another 100\n" 
                        + "Your total bet is now = " + aPlayer.GetBet());

    return tbRetVal;
}



private static boolean DealAgain(String asPrompt)
{
    System.out.println(asPrompt + "\n");

    Scanner keyboard = new Scanner(System.in);

    if(keyboard.nextLine().equalsIgnoreCase("Stop")) return true;
    return false;
}   
}

Aucun commentaire:

Enregistrer un commentaire