2013-09-25 58 views
-1

在爲學校完成我的黑傑克遊戲的最後階段。 我試圖編程邏輯時似乎遇到問題。在while循環中使用If語句,二十一點遊戲

基本上只有當他們的牌是< = 16時,經銷商纔會命中,因爲某些原因,如果if語句不起作用,並且經銷商只是一直打或者一直停留,無論他們的價值如何卡...我知道這可能是簡單的,但我似乎無法找到它。

而且經銷商不破壞時,他的卡值超過21

主要(問題是HERE)

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(); 
} 

} 

讓我知道如果我可以提供任何其他的東西,在此先感謝您的幫助!

+2

使用調試器看看你的代碼偏離了正常。 – Prateek

+0

我試過了,我仍然無法找到任何錯誤......我對Java比較陌生,這就是爲什麼我來這裏尋求幫助 – 23k

回答

1

您的方法getDealerHandValue()正在使用ArrayList playerHand。它應該使用dealerHand ArrayList。

更妙的是隻定義需要一個列表作爲arguement的方法,然後只需用相應的列表調用它,像

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

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

然後調用getHandValue(playerHand)getHandValue(dealerHand)

+0

哈哈非常感謝!我忘了改變他們後,我只是從上面複製它...我知道這將是一些愚蠢的...感謝處理我的白癡:) – 23k