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