2017-03-06 5 views
1

So habe ich nur ein Problem mit meinem Code und das ist für die gleiche Karte zu überprüfen, weil ich diese Karten nicht wiederholen möchte. Es gibt keine Umbesetzungen oder was auch immer, es werden nur zufällige Karten ausgeteilt, bis keine mehr übrig sind. Ich habe keine Ahnung, wie es geht. Ich schätze etwas Hilfe; ob es theanswe oder nur ein wenig stupsen.Erstellen eines Ablagestapels für ein Kartenspiel in Java

package Card; 

import java.util.Random; 

public class deckOfCards { 
    public String[] suite = { "Hearts", "Spade", "Diamonds", "Clubs" }; 
    public String[] faceValue = { "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King" }; 
    public int deckCount = 0; 
    private Card[] deck = new Card[52]; 
    public int index; 

    public void buildDeck() { 
     for (int i = 0; i < suite.length; i++) { 
      for (int j = 0; j < faceValue.length; j++) { 
       deck[deckCount] = new Card(suite[i], faceValue[j]); 
       deckCount++; 
      } 
     } 
    } 
public Card shuffle(){ 
    Random rand = new Random(); 
    int index = rand.nextInt(52); 
    return deck[index]; 
} 

} 

schafft dies die Karte und sie randomisiert Paket-Karte;

public class Card { 

private String suite; 
private String faceValue; 

public Card(){ 

} 

public Card(String suite, String faceValue){ 
this.setSuite(suite); 
this.setFaceValue(faceValue); 
} 
    public String getSuite(){ 
     return suite; 
    } 


//array list 
// 
public void setSuite(String suite){ 
    this.suite = suite; 
} 

public String getFaceValue(){ 
    return faceValue; 
} 

public void setFaceValue(String faceValue){ 
    this.faceValue = faceValue; 
} 
} 

package Card; 

public class Driver { 



public deckOfCards cards = new deckOfCards(); 
    private Card [] discard = new Card[52]; 

    public static void main(String[] args) { 
     Driver driver = new Driver(); 
     driver.DealCards(); 

    } 

    public void DealCards(){ 
     int cardsLeft = 52; 
     cards.buildDeck(); 
     Card randomCard = new Card(); 
     for (int i = 0; i < 5; i++) { 
      cardsLeft--; 
      randomCard = cards.shuffle(); 

      System.out.println(randomCard.getFaceValue() + " of " + randomCard.getSuite()); 

     } 
     System.out.println("Cards left:" + cardsLeft); 
    } 
} 

dies behandelt die Karten. Auch hier wird jede Hilfe geschätzt.

Antwort

0

Ich denke, was fehlt, ist eine Methode, um eine Karte aus dem Deck zu entfernen.

Immer wenn eine Karte ausgeteilt wird, muss sie entfernt werden, und eine neue zufällige Ziehung wird auf dem verbleibenden Stapel statt auf allen 52 Karten durchgeführt. Dies wird Zeichnung ohne Ersatz genannt. Der aktuelle Code führt eine Zeichnung mit Ersatz.

Der schnellste Weg, dies zu erreichen, ist nur die deckOfCards Klasse zu ändern:

  • Verwenden Sie einen Vektor oder Karten als ein Array eher. Dies ermöglicht Einfügen und Löschen. In einem Array kann die Größe nicht geändert werden: Jedes Mal muss ein neues Array erstellt werden, was sehr ineffizient ist.
  • In der Zufallsfunktion müssen Sie nicht nur eine zufällige Karte zurückgeben, sondern auch aus dem Vektor entfernen.
  • In der Shuffle-Funktion passen Sie 52 an, wenn das Deck schrumpft.
Verwandte Themen