簡體   English   中英

用Java編寫21點和單人紙牌程序時遇到麻煩

[英]Trouble writing blackjack and solitaire program in java

我已經在這個項目上工作了幾天,但我不知道為什么它不起作用。 希望新的眼睛會有所幫助。 當我運行此命令時,不會發生幾件事。

唯一有效的是管理用戶下注的部分。 一些問題包括:

  • 它不會帶來卡值(假定來自隨機生成1-13之間的數字的類)。

  • 不等待用戶輸入0來繪制更多牌

  • 當它說出第三張卡是什么時,它說出Card@42a57993
  • 不提供總卡值。
  • 當我嘗試解決問題時,還會發生一個錯誤。 除了cardTotal之外,錯誤提示“對於參數類型,運算符+未定義”。

它可能丟失或有多余的括號,但我找不到它們應該/不應該在的位置。 這是我的代碼:

import java.util.Scanner; 

public class Game {
   private double pot;
   private double bet; 
   private int answer; 
   private int cardTotal; 

   Card card1 = new Card();
   Card card2 = new Card();
   Card card3 = new Card(); 

   // constructor
   public Game(){
      pot = 100;
      bet = 0; 
   }

   Scanner keyboard = new Scanner(System.in);

   // GetBetFrom user, prompts user to enter a valid bet, reenter until a valid amount
   public double getBetFromUser(){
      System.out.println("Your current pot is: "+pot);

      System.out.println("Enter your bet amount");
      bet = keyboard.nextDouble();  

      //Rules for the bet
      while(bet>pot || bet<0){
         if(pot==0){
            break; 
         }
         if(bet>pot){
            System.out.println("Sorry, you don't have enough money for that, try again");
            bet = keyboard.nextDouble(); 
         }
         if(bet<0){
            System.out.println("That is not a valid bet, please try again");
            bet = keyboard.nextDouble(); 
         }
     }
     return bet;
  }

  // Game mechanics 
  public void gamePlay(){
     System.out.println("Your first card is: "+card1);
     System.out.println("Your second card is: "+card2);
     cardTotal= card1 + card2; 
     System.out.println("Your total is: "+cardTotal);
     System.out.println("Enter 0 to draw more, any other number to quit: ");

     if(answer == 0); {
        System.out.println("Your next card is: "+card3);
        System.out.println("Your total is: "); 
     }
 }

 public void results(){
    if(cardTotal > 21){
       System.out.println("You lose your bet");
       pot = pot-bet; 
    }
    if(cardTotal==21){
       System.out.println("You win three times your bet");
       pot = pot-bet+(bet*3);
    }
    if(cardTotal==20){
       System.out.println("You win double your bet amount");
       pot = pot-bet+(bet*2); 
    }
    if(cardTotal<=19){
       System.out.println("You win your bet amount");
    }
 }
}

這是我的Card類的代碼

import java.util.Random; 

public class Card {
private int cardValue; 
Random random = new Random();

public Card(){
    cardValue = 1;
}

public int getCard(){
    cardValue = (cardValue + random.nextInt(12));
    if(cardValue>10)
        return 10;
    else
        return cardValue;   
}

public int display(){
    switch (cardValue){
    case 1: System.out.println("Ace");
    break;
    case 2: System.out.println("Two");
    break; 
    case 3: System.out.println("Three"); 
    break; 
    case 4: System.out.println("Four");
    break;
    case 5: System.out.println("Five");
    break;
    case 6: System.out.println("Six");
    break;
    case 7: System.out.println("Seven");
    break; 
    case 8: System.out.println("Eight");
    break;
    case 9: System.out.println("Nine");
    break; 
    case 10: System.out.println("Ten");
    break; 
    case 11: System.out.println("Jack");
    break;
    case 12: System.out.println("Queen");
    break;
    case 13: System.out.println("King");
    break; 

    }   
    return cardValue; 
}       

}

我猜你的錯誤正在這里發生:

cardTotal= card1 + card2; 

card1card2Card類型。 編譯器不知道如何添加它們。

您應該這樣獲取卡總數:

cardTotal = card1.cardValue+ card2.cardValue;

這可能對您有幫助。 我建議您閱讀有關對象及其方法的引用方法。 缺少通過鍵盤輸入的數據的驗證,但這是您的工作:

import java.util.Scanner;
public class Game {
   private double pot;
   private double bet; 
   private int answer; 
   private int cardTotal;

   Card card1 = new Card();
   Card card2 = new Card();
   Card card3 = new Card(); 

   // constructor
   public Game(){
      pot = 100;
      bet = 0; 
   }

   Scanner keyboard = new Scanner(System.in);

   // GetBetFrom user, prompts user to enter a valid bet, reenter until a valid amount
   public double getBetFromUser(){
      System.out.println("Your current pot is: "+pot);

      System.out.print("Enter your bet amount: ");
      bet = keyboard.nextDouble();  

      //Rules for the bet
      while(bet>pot || bet<0){
         if(pot==0){
            break; 
         }
         if(bet>pot){
            System.out.println("Sorry, you don't have enough money for that, try again");
            bet = keyboard.nextDouble(); 
         }
         if(bet<0){
            System.out.println("That is not a valid bet, please try again");
            bet = keyboard.nextDouble(); 
         }
     }
     return bet;
  }

  // Game mechanics 
  public void gamePlay(){
     int first= card1.getCard();
     int second = card2.getCard();
     int third = card3.getCard();
     System.out.println("Your first card is: "+first);
     System.out.println("Your second card is: "+second);
     cardTotal= first + second;
     System.out.println("Your total is: "+cardTotal);
     System.out.print("Enter 0 to draw more, any other number to quit: ");
     answer = keyboard.nextInt(); 

     if(answer == 0) {
        System.out.println("Your next card is: "+third);
        cardTotal=cardTotal + third;
     }
     System.out.println("Your total is: "+cardTotal); 
 }

 public void results(){
    if(cardTotal > 21){
       System.out.println("You lose your bet");
       pot = pot-bet; 
    }
    if(cardTotal==21){
       System.out.println("You win three times your bet");
       pot = pot-bet+(bet*3);
    }
    if(cardTotal==20){
       System.out.println("You win double your bet amount");
       pot = pot-bet+(bet*2); 
    }
    if(cardTotal<=19){
       System.out.println("You win your bet amount");
    }
 }

 public static void main(String[] args) {
      Game game = new Game();
      game.getBetFromUser();
      game.gamePlay();
      game.results();
 }     

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM