【问题标题】:Using If statement in while loop, blackjack game在while循环中使用If语句,二十一点游戏
【发布时间】:2013-10-01 17:43:24
【问题描述】:

在完成我上学的二十一点游戏的最后阶段。 我在尝试编写逻辑时似乎遇到了问题。

基本上,庄家只有在他们的牌

当他的牌面值超过 21 时,庄家也不会爆牌。

主要(问题在这里)

import java.util.Scanner;
import java.util.ArrayList;

public class game {
public static String name;

public static void main(String[]args){

    deck doc = new deck();
    dealer dealer = new dealer(doc);

    Scanner nameScanner = new Scanner(System.in);

    int money = 200;

    System.out.println("Welcome to BlackJack!" + "\n\n" + "Your balance: $" + money + "\n\n" + "What is your name? ");
    name = nameScanner.nextLine();

    dealer.start();

    dealer.dealDealer();
    dealer.dealPlayer();
    dealer.dealDealer();
    dealer.dealPlayer();


    boolean dealerStay = false;
    boolean playerStay = false;
    boolean allStay = false;
    boolean tie = false;

    while(true){

        System.out.println(dealer.toString());
        Scanner gameScanner = new Scanner(System.in);   

        System.out.println("\nWould you like to Hit(H) or Stay(S)? ");

        String hos = gameScanner.nextLine();

        //Players & Dealer hit logic
        if(hos.equalsIgnoreCase("h")) {
            dealer.dealPlayer();
        }
        //Player bust
        if(dealer.getPlayerHandValue() > 21){
            System.out.println("*****YOU LOSE\n*****You bust with " + dealer.getPlayerHandValue() + "\n*****Dealer wins by default");
            break;
        }
        //Stay logic
        if(hos.equalsIgnoreCase("s")){
            playerStay = true;
        }
        //Dealer hit logic PROBLEM HERE
        if(playerStay == true && dealer.getDealerHandValue() <= 16){
            dealer.dealDealer();
            System.out.println("\n*****Dealer hit\n");
        }
        //Dealer stay logic PROBLEM HERE
        if (playerStay == true && dealer.getDealerHandValue() > 16){
            System.out.println("\n*****Dealer stayed\n");
            dealerStay = true;
        }
        //Dealer bust PROBLEM HERE
        if(dealer.getDealerHandValue() > 21){
            System.out.println("*****YOU WIN\n *****Dealer busts");
            break;
        }





        }
    }
}

构造函数(如果需要)

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class dealer {

deck deck = new deck();
String dealerTopCardString = "";
card playerHandCard;
card dealerHandCard;
ArrayList<card> dealerHand = new ArrayList<card>();
ArrayList<card> playerHand = new ArrayList<card>();

public dealer(deck cards) {
    deck = cards;

}

public void start() {
    dealerHand = new ArrayList<card>();
    playerHand = new ArrayList<card>();
}

public String getPlayerHand() {

    String playerHandString = "";
    for (int i = 0; i < playerHand.size(); i++) {
        playerHandCard = playerHand.get(i);
        card card = new card(playerHandCard.getValue(),
                playerHandCard.getSuit());
        playerHandString += "\n";
        playerHandString += card.getValue();
        playerHandString += "\t";
        playerHandString += card.getSuit();
    }
    return playerHandString;

}

public String getDealerHand() {

    String dealerHandString = "";
    for (int i = 0; i < dealerHand.size(); i++) {
        dealerHandCard = dealerHand.get(i);
        card card = new card(dealerHandCard.getValue(),
                dealerHandCard.getSuit());
        dealerHandString += "\n";
        dealerHandString += card.getValue();
        dealerHandString += "\t";
        dealerHandString += card.getSuit();
    }
    return dealerHandString;
}

public void dealPlayer() {

    playerHand.add(deck.deal());

}

public void dealDealer() {

    dealerHand.add(deck.deal());

}

public String getDealerTopCard() {
    String dealerTopCard = "";
    card cardTop = dealerHand.get(0);
    card card = new card(cardTop.getValue(), cardTop.getSuit());
    dealerTopCard += "\n";
    dealerTopCard += card.getValue();
    dealerTopCard += "\t";
    dealerTopCard += card.getSuit();
    return dealerTopCard;

}

@Override
public String toString() {

    return  "\n" + game.name + "'s cards : " + getPlayerHand() + "\n\n " + game.name + "'s total: "
            + getPlayerHandValue() + "\n\n" + "Dealer is showing : "
            + getDealerHand();
}

public int getPlayerHandValue() {
    int playerHandValue = 0;        

    for (card a : playerHand) {
        String c = a.getValue();
        if (c.equals("J")) {
            playerHandValue += 10;
        }

        else if (c.equals("Q")) {
            playerHandValue += 10;
        }

        else if (c.equals("K")) {
            playerHandValue += 10;
        }

        else if (c.equals("A")) {
            playerHandValue += 11;
        }

        else {
            playerHandValue += Integer.parseInt(a.getValue());

        }
    }

    int valueOfCards = playerHandValue;
    return valueOfCards;
}

public int getDealerHandValue() {
    int playerHandValue = 0;        

    for (card a : playerHand) {
        String c = a.getValue();
        if (c.equals("J")) {
            playerHandValue += 10;
        }

        else if (c.equals("Q")) {
            playerHandValue += 10;
        }

        else if (c.equals("K")) {
            playerHandValue += 10;
        }

        else if (c.equals("A")) {
            playerHandValue += 11;
        }

        else {
            playerHandValue += Integer.parseInt(a.getValue());

        }
    }

    int valueOfCards = playerHandValue;
    return valueOfCards;
}

public void resetDealerHand() {
    dealerHand.clear();
}

public void resetPlayerHand() {
    playerHand.clear();
}

}

如果我可以为您提供其他任何东西,请告诉我,提前感谢您的帮助!

【问题讨论】:

  • 使用调试器查看代码偏离正常的地方。
  • 我试过了,好像还是没发现什么问题……我对java比较陌生,所以才来这里求助

标签: java if-statement while-loop boolean


【解决方案1】:

您的方法 getDealerHandValue() 正在使用 ArrayList playerHand

它应该使用dealerHand ArrayList。

更好的办法是定义一个将列表作为参数的方法,然后使用适当的列表调用它,例如

public int getHandValue(List<card> theHand) {
    int handValue = 0;        

    for (card a : theHand) {
        // Your logic
    }
    return handValue;
}

然后拨打getHandValue(playerHand)getHandValue(dealerHand)

【讨论】:

  • 哈哈非常感谢!我刚从上面复制后忘记更改它们...我知道这会很愚蠢...感谢您处理我的白痴:)
猜你喜欢
  • 2013-04-29
  • 2017-08-31
  • 2017-04-01
  • 2015-06-18
  • 1970-01-01
  • 2018-06-25
  • 2021-12-02
  • 1970-01-01
  • 2015-07-06
相关资源
最近更新 更多