2016-05-26 7 views
0

Ok, also mache ich ein Blackjack-Spiel für ein Projekt zum Jahresende in der Schule, aber wenn ich in einem Spiel "stehen" wollte, könnte der Code meine Eingabe nach dem Zufallsprinzip ignorieren und dann aufhören, zusammen zu arbeiten. Kann das jemand herausfinden? weder ich noch mein Lehrer konnten es. (Es tut mir leid, es gibt so viel Code, ich weiß nicht, ob Sie alle Klassen müssen mir helfen)Ich habe einen Fehler, der zufällig passiert, wenn ich einen Int eingegeben habe, weiß jemand, was los ist?

Runner:

import static java.lang.System.*; 
import java.util.Arrays; 

public class BlackJackRunner 
{ 
    public static void main(String args[]) 
    { 
     Deck deck = new Deck(); 
     Game game = new Game(); 
     game.startGame(); 
     // work on resetting btwn each hand and still work on choices i think 
    } 
} 

Deck Klasse:

public class Deck 
{ 
    public int[] card = new int[2]; 
    public String number = ""; 
    public Deck() 
    { 

    } 
    public void drawCard() 
    { 
     int[] drawn = new int[2]; 
     int switc; 
     //do{ 
     do{ 
     switc = Rndm.i(0, 51); 
     String sw = switc + " "; 

     if(number.indexOf(sw) == -1) 
     { 
      if (number.indexOf(sw) > -1) 
       System.out.println("Problem!!"); 
      switch(switc) 
      { 
       //face first, then suit; 
       //1 - spades 2-clubs 3-hearts 4-diamonds 


       //2-10 - face value j-11 q-12 k-13 a-1 
       case 0 : drawn[0] = 2; drawn[1] = 1; number = number + 0 + " "; break; 
       case 1 : drawn[0] = 3; drawn[1] = 1; number = number + 1 + " "; break; 
      case 2 : drawn[0] = 4; drawn[1] = 1; number = number + 2 + " "; break; 
      case 3 : drawn[0] = 5; drawn[1] = 1; number = number + 3 + " "; break; 
      case 4 : drawn[0] = 6; drawn[1] = 1; number = number + 4 + " "; break; 
      case 5 : drawn[0] = 7; drawn[1] = 1; number = number + 5 + " "; break; 
      case 6 : drawn[0] = 8; drawn[1] = 1; number = number + 6 + " "; break; 
      case 7 : drawn[0] = 9; drawn[1] = 1; number = number + 7 + " "; break; 
      case 8 : drawn[0] = 10; drawn[1] = 1; number = number + 8 + " "; break; 
      case 9 : drawn[0] = 11; drawn[1] = 1; number = number + 9 + " "; break; 
      case 10 : drawn[0] = 12; drawn[1] = 1; number = number + 10 + " "; break; 
      case 11 : drawn[0] = 13; drawn[1] = 1; number = number + 11 + " "; break; 
      case 12 : drawn[0] = 1; drawn[1] = 1; number = number + 12 + " "; break; 
      case 13 : drawn[0] = 2; drawn[1] = 2; number = number + 13 + " "; break; 
      case 14 : drawn[0] = 3; drawn[1] = 2; number = number + 14 + " "; break; 
      case 15 : drawn[0] = 4; drawn[1] = 2; number = number + 15 + " "; break; 
      case 16 : drawn[0] = 5; drawn[1] = 2; number = number + 16 + " "; break; 
      case 17 : drawn[0] = 6; drawn[1] = 2; number = number + 17 + " "; break; 
      case 18 : drawn[0] = 7; drawn[1] = 2; number = number + 18 + " "; break; 
      case 19 : drawn[0] = 8; drawn[1] = 2; number = number + 19 + " "; break; 
      case 20 : drawn[0] = 9; drawn[1] = 2; number = number + 20 + " "; break; 
      case 21 : drawn[0] = 10; drawn[1] = 2; number = number + 21 + " "; break; 
      case 22 : drawn[0] = 11; drawn[1] = 2; number = number + 22 + " "; break; 
      case 23 : drawn[0] = 12; drawn[1] = 2; number = number + 23 + " "; break; 
      case 24 : drawn[0] = 13; drawn[1] = 2; number = number + 24 + " "; break; 
      case 25 : drawn[0] = 1; drawn[1] = 2; number = number + 25 + " "; break; 
      case 26 : drawn[0] = 2; drawn[1] = 3; number = number + 26 + " "; break; 
      case 27 : drawn[0] = 3; drawn[1] = 3; number = number + 27 + " "; break; 
      case 28 : drawn[0] = 4; drawn[1] = 3; number = number + 28 + " "; break; 
      case 29 : drawn[0] = 5; drawn[1] = 3; number = number + 29 + " "; break; 
      case 30 : drawn[0] = 6; drawn[1] = 3; number = number + 30 + " "; break; 
      case 31 : drawn[0] = 7; drawn[1] = 3; number = number + 31 + " "; break; 
      case 32 : drawn[0] = 8; drawn[1] = 3; number = number + 32 + " "; break; 
      case 33 : drawn[0] = 9; drawn[1] = 3; number = number + 33 + " "; break; 
      case 34 : drawn[0] = 10; drawn[1] = 3; number = number + 34 + " "; break; 
      case 35 : drawn[0] = 11; drawn[1] = 3; number = number + 35 + " "; break; 
      case 36 : drawn[0] = 12; drawn[1] = 3; number = number + 36 + " "; break; 
      case 37 : drawn[0] = 13; drawn[1] = 3; number = number + 37 + " "; break; 
      case 38 : drawn[0] = 1; drawn[1] = 3; number = number + 38 + " "; break; 
      case 39 : drawn[0] = 2; drawn[1] = 4; number = number + 39 + " "; break; 
      case 40 : drawn[0] = 3; drawn[1] = 4; number = number + 40 + " "; break; 
      case 41 : drawn[0] = 4; drawn[1] = 4; number = number + 41 + " "; break; 
      case 42 : drawn[0] = 5; drawn[1] = 4; number = number + 42 + " "; break; 
      case 43 : drawn[0] = 6; drawn[1] = 4; number = number + 43 + " "; break; 
      case 44 : drawn[0] = 7; drawn[1] = 4; number = number + 44 + " "; break; 
      case 45 : drawn[0] = 8; drawn[1] = 4; number = number + 45 + " "; break; 
      case 46 : drawn[0] = 9; drawn[1] = 4; number = number + 46 + " "; break; 
      case 47 : drawn[0] = 10; drawn[1] = 4; number = number + 47 + " "; break; 
      case 48 : drawn[0] = 11; drawn[1] = 4; number = number + 48 + " "; break; 
      case 49 : drawn[0] = 12; drawn[1] = 4; number = number + 49 + " "; break; 
      case 50 : drawn[0] = 13; drawn[1] = 4; number = number + 50 + " "; break; 
      case 51 : drawn[0] = 1; drawn[1] = 4; number = number + 51 + " "; break; 

     } 
    } 
    }while(drawn[0]==0 && drawn[1]==0); 
    //}while(number.indexOf(switc) > -1); 
    if (drawn[0]==0 && drawn[1]==0) 
    System.out.println("Problem!!"); 


    card[0] = drawn[0]; 
    card[1] = drawn[1]; 


    } 
    public void shuffleDeck() 
    { 
     number = ""; 
    } 
    public int[] getCard() 
    { 
     drawCard(); 
     return card; 
    } 
    public String toString() 
    { 
     return card[0] + " " + card[1]; 
    } 
} 

Karte Klasse:

public class Card extends Deck 
{ 
    public static final String FACES[] = {"ZERO","Ace","Two","Three","Four", 
      "Five","Six","Seven","Eight","Nine","Ten","Jack","Queen","King"}; 
    public static final String SUITS[] = {"ZERO", "Spades", "Clubs", "Hearts", "Diamonds"}; 

    private int suit; 
    private int face; 


    public Card(int f, int s) 
    { 
     suit = s; 
     face = f; 
    } 


    public void setFace(int f) 
    { 
     face = f; 
    } 

    public void setSuit(int s) 
    { 
     suit = s; 
    } 


    public int getSuit() 
    { 
     return suit; 
    } 

    public int getFace() 
    { 
     return face; 
    } 


    public String toString() 
    { 
     return FACES[face] + " of " + SUITS[suit]; 
    } 
} 

BlackJackCard Klasse:

public class BlackJackCard extends Card 
{ 
    private int value; 
    int handVal, dealerHandVal; 
    int val; 
    public BlackJackCard(int f, int s) 
    { 
     super(f,s); 
    } 

    public int getVal() 
    { 
     if(getFace() == 1) 
     { 
     if(val + 11 > 21) 
     { 
      value = 1; 
     } 
     else 
     { 
      value = 11; 
     } 
     } 
     if(getFace() > 1 && getFace() < 10) 
     { 
     value = getFace(); 
     } 
     if(getFace() > 10) 
     { 
     value = 10; 
     } 
     return value; 
    } 

    public String toString() 
    { 
     return FACES[getFace()] + " of " + SUITS[getSuit()]+ " "; 
    } 
} 

Spielklasse:

import static java.lang.System.*; 
import java.util.Scanner; 
import java.util.Arrays; 

public class Game 
{ 
    Scanner keyboard = new Scanner(System.in); 
    Deck deck = new Deck(); 
    public int money, bet; 
    int[] card = new int[2]; 
    int[][] playerHand = new int[10][2]; 
    int[][] dealerHand = new int[10][2]; 
    int handPlace; 
    int pHandVal; 
    int dHandVal; 
    boolean bust; 
    boolean dBust; 



    public void startGame() 
    { 
     out.println("Hello! Welcome to the Compsci Casino!"); 
     out.println("We have a game of Blackjack prepared for you right here."); 
     out.println("It seems you've brought in $1000 in chips. You may use that to bet on your games."); 
     out.println("Here is your table, good luck!"); 
     money = 1000; 
     out.println("\n\n"); 
     do{ 
     startRound(); 
     }while(money > 0); 
     out.println("Well, it looks like you're broke. Come back when you've got some money to bet."); 
    } 




    public void startRound() 
    { 
     out.println("Alright, before I deal anything, you gotta bet some of your chips."); 
     bet(); 
     deal(); 
     game(); 
    } 




    public void printCards() 
    { 
     out.println("Dealer's card : " + getCardName(dealerHand[0][0], dealerHand[0][1]) + "\n"); 
     out.println("Your hand : "); 
     for(int i = 0; i < 10; i++) 
     { 
     if(playerHand[i][0] != 0) 
     { 
      out.println(getCardName(playerHand[i][0], playerHand[i][1])); 

     } 
     } 
     out.println(""); 

    } 




    public void game() 
    { 
     int c; 
     do{ 
     printCards(); 
     c = choice(); 
     if(c == 1) 
     { 
      handPlace = 0; 
      for(int i = 0; i < 10; i++) 
      { 
       if(playerHand[i][0] != 0) 
       { 
        handPlace += 1;    
       } 
      } 
      card = deck.getCard(); 
      playerHand[handPlace][0] = card[0]; 
      playerHand[handPlace][1] = card[1]; 
      pHandVal += getHandVal(playerHand[handPlace][0], playerHand[handPlace][1]); 
      if(checkBust(pHandVal) == true) 
      { 
       out.println("you busted" + "\n"); 
      } 
     } 
     else if(c == 2) 
     { 
      do{ 
       if(dHandVal <= pHandVal) 
       { 
        dealerPlay(); 
       } 
      }while(checkBust(dHandVal) != true); 
     } 
     else if(c == 3) 
     { 
      money -= bet; 
      bet = bet*2; 
     } 
     bust = checkBust(pHandVal); 
     dBust = checkBust(dHandVal); 

     }while(c != 2 && bust != true); 

     printDealerHand(); 
     if(dBust == true) 
     { 
     out.println("Dealer busts, you win!"); 
     money += bet*2; 
     } 
     else if(dBust != true) 
     { 
     if(bust != true && pHandVal > dHandVal) 
     { 
      out.print("you win!"); 
      money += bet*2; 
     } 
     } 
     else if(bust == true) 
     { 
     out.println("you busted" + "\n"); 
     } 
     else if(dHandVal > pHandVal) 
     { 
     out.println("Dealer wins"); 
     } 
    } 



    public void printDealerHand() 
    { 
     out.println("Dealer's cards : " + "\n"); 
     for(int i = 0; i < 10; i++) 
     { 
     if(dealerHand[i][0] != 0) 
     { 
      out.println(getCardName(dealerHand[i][0], dealerHand[i][1])); 

     } 
     } 
     out.println("Your hand : "); 
     for(int i = 0; i < 10; i++) 
     { 
     if(playerHand[i][0] != 0) 
     { 
      out.println(getCardName(playerHand[i][0], playerHand[i][1])); 

     } 
     } 
     out.println(""); 

    } 




    public int getHandVal(int f, int s) 
    { 
     BlackJackCard bjc = new BlackJackCard(f, s); 
     int value = bjc.getVal(); 
     return value; 
    } 




    public boolean checkBust(int val) 
    { 
     if(val > 21) 
     { 
     return true; 
     } 
     return false; 
    } 




    public void dealerPlay() 
    { 
     handPlace = 0; 
     for(int i = 0; i < 10; i++) 
     { 
      if(dealerHand[i][0] != 0) 
     { 
      handPlace += 1;    
     } 
    } 
    card = deck.getCard(); 
    dealerHand[handPlace][0] = card[0]; 
    dealerHand[handPlace][1] = card[1]; 
    dHandVal += getHandVal(dealerHand[handPlace][0], dealerHand[handPlace][1]); 
    } 




    public String getCardName(int f, int s) 
    { 
     BlackJackCard blackJackCard = new BlackJackCard(f, s); 
     return blackJackCard.toString(); 
    } 




    public void bet() 
    { 
     bet = 0; 
     do{ 
     out.println("you have " + money + " dollars left." + "\n"); 
     out.println("How much will you bet?"); 
     out.print("Amount :: "); 
     bet = keyboard.nextInt(); 
     if(bet == 0) 
     { 
      out.println("It aint free to play here, you cant just bet nothing."); 
     } 
     }while(bet == 0); 
     money = money - bet; 
     out.println("\n"); 
    } 




    public int choice() 
    { 
     int choice = 0; 
     do{ 
     out.println("What will you do?"); 
     out.println("1 - Hit"); 
     out.println("2 - Stand"); 
     out.println("3 - Double"); 
     choice = keyboard.nextInt(); 

     if(choice == 1|| choice == 2|| choice == 3) 
     { 
      return choice; 
     } 
     }while(choice != 1 || choice != 2 || choice != 3); 
     return 1; 
    } 




    public void resetHands() 
    { 
     pHandVal = 0; 
     playerHand[0][0] = 0; 
     playerHand[0][1] = 0; 
     playerHand[1][0] = 0; 
     playerHand[1][1] = 0; 
     playerHand[2][0] = 0; 
     playerHand[2][1] = 0; 
     playerHand[3][0] = 0; 
     playerHand[3][1] = 0; 
     playerHand[4][0] = 0; 
     playerHand[4][1] = 0; 
     playerHand[5][0] = 0; 
     playerHand[5][1] = 0; 
     playerHand[6][0] = 0; 
     playerHand[6][1] = 0; 
     playerHand[7][0] = 0; 
     playerHand[7][1] = 0; 
     playerHand[8][0] = 0; 
     playerHand[8][1] = 0; 
     playerHand[9][0] = 0; 
     playerHand[9][1] = 0; 
     dHandVal = 0; 
     dealerHand[0][0] = 0; 
     dealerHand[0][1] = 0; 
     dealerHand[1][0] = 0; 
     dealerHand[1][1] = 0; 
     dealerHand[2][0] = 0; 
     dealerHand[2][1] = 0; 
     dealerHand[3][0] = 0; 
     dealerHand[3][1] = 0; 
     dealerHand[4][0] = 0; 
     dealerHand[4][1] = 0; 
     dealerHand[5][0] = 0; 
     dealerHand[5][1] = 0; 
     dealerHand[6][0] = 0; 
     dealerHand[6][1] = 0; 
     dealerHand[7][0] = 0; 
     dealerHand[7][1] = 0; 
     dealerHand[8][0] = 0; 
     dealerHand[8][1] = 0; 
     dealerHand[9][0] = 0; 
     dealerHand[9][1] = 0; 

    } 




    public void deal() 
    { 
     resetHands(); 
     card = deck.getCard(); 
     playerHand[0][0] = card[0]; 
     playerHand[0][1] = card[1]; 
     card = deck.getCard(); 
     playerHand[1][0] = card[0]; 
     playerHand[1][1] = card[1]; 
     pHandVal = getHandVal(playerHand[0][0], playerHand[0][1]); 
     pHandVal += getHandVal(playerHand[1][0], playerHand[1][1]); 
     card = deck.getCard(); 
     dealerHand[0][0] = card[0]; 
     dealerHand[0][1] = card[1]; 
     card = deck.getCard(); 
     dealerHand[1][0] = card[0]; 
     dealerHand[1][1] = card[1]; 
     dHandVal = getHandVal(dealerHand[0][0], dealerHand[0][1]); 
     dHandVal += getHandVal(dealerHand[1][0], dealerHand[1][1]); 

    } 



} 

und einen Zufallszahlengenerator Klasse:

public class Rndm 
{ 
    public static double d(double low, double high) 
    { 
     double r = Math.random()*(high-low)+low; 
     return r; 
    } 

    public static int i(int low, int high) 
    { 
     double r = Math.random()*(high-low+1)+low; 
     return (int)r;  
    } 
} 

Mein Problem scheint mit der Wahl() -Methode in der Spielklasse. Hin und wieder, wenn es aufgerufen wird, ignoriert es meine Eingaben und sieht so aus, als ob es in eine Endlosschleife geht, aber wenn ich in einen Debugger schaue, zeigt es nur, dass der Scanner meine Eingabe ignoriert.

Noch einmal, es tut mir leid, es gibt so viel Code, aber niemand kann das herausfinden und ich fragte mich, ob jemand helfen kann.

Antwort

0

Die Verwendung von Scanner.nextInt() ist problematisch, wenn Ihre Eingabe keine Ganzzahl ist. Es wird eine Ausnahme ausgelöst, der Puffer wird jedoch nicht gelöscht.

Ich empfehle Ihnen, etwas wie String input = keyboard.nextLine() und dann Integer.parseInt(input) in einem Try-Catch-Block zu verwenden.

0

Nach einer Int Eingabe der Taste drängen - das Zeichen nicht verschluckt wird, so versuchen

choice = keyboard.nextInt(); 
keyboard.nextLine(); 
0

Wenn Sie auf Eclipse arbeiten, können Sie den Debugger verwenden können, ist es wirklich nützlich.

Sie können Ihre Codezeile pro Zeile ausführen, damit Sie sofort sehen, wo das Problem liegt.

Werfen Sie einen Blick: video debugging

Verwandte Themen