2013-03-10 8 views
5

Ich habe das Deck der Karte mischen und Ergebnisse zurückgeben, aber jetzt möchte ich die Ausgabe basierend auf der Benutzereingabe ändern: Anzahl der Spieler und die Anzahl der Karten pro Spieler.Returning Kartenspiel basierend auf Benutzereingaben für Spieler und Karten pro Spieler in Java

Originalcode:

CardRun - Haupt

public static void main(String[] args) 
{ 
    Scanner scan = new Scanner(System.in); 
    Deck deck = new Deck(); 
    Card C; 

    System.out.println(deck.getTotalCards()); 
    System.out.print("Number of players: "); 
    int players = scan.nextInt(); 
    System.out.print("Number of cards: "); 
    int cards = scan.nextInt(); 

    while(deck.getTotalCards() != players) 
    { 
     C = deck.drawFromDeck(); 
     System.out.println(C.toString()); 
    } 

} 

Deck Klasse

public class Deck { 
private ArrayList<Card>cards; 

Deck() 
{ 
    cards = new ArrayList<Card>(); 
    for(int a=0; a<=3; a++) 
    { 
     for(int b=0; b<=12; b++) 
     { 
      cards.add(drawFromDeck()); 
     } 
     cards.addAll(cards); 
    } 
} 

public Card drawFromDeck() 
{ 
    Random generator = new Random(); 
    int index = generator.nextInt(cards.size()); 
    return cards.remove(index); 
} 

public int getTotalCards() 
{ 
    return cards.size(); 
} 

} 

Karte Klasse

public class Card { 
private int card, suit; 
private static String[] suits = {"Clubs", "Diamonds", "Hearts", "Spades"}; 
private static String[] cards = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"}; 

Card(int suit, int card) 
{ 
    this.card = card; 
    this.suit = suit; 
} 

public @Override String toString() 
{ 
    for(int i = 0; i<players; ++i) 
    { 
     System.out.println("Player " + (i+1) + ": "+ cards.get(i)); 
    } 
} 

public int getCard() 
{ 
    return card; 
} 

public int getSuit() 
{ 
    return suit; 
} 
} 

Ausgabe Deck von Karten: 54
Anzahl der Spieler: 4 (vom Benutzer eingegeben)
Anzahl der Karten pro Benutzer: 5 (vom Benutzer eingegeben)
Spieler 1: Ace of Spades, 2 of Hearts, Red Joker
Spieler 2: 8 der Herzen, 10 der Vereine, 9 der Herzen
Spieler 1 hat die bessere Hand.

+1

Bitte genauer sein, wie die Ausgabe am Ende des Tages aussehen sollte :) – poitroae

+0

@poitroae hinzugefügt gewünschte Ausgabeformat. Danke für deine Hilfe. – Masriyah

Antwort

1

Wie ich sehe, können Sie jeden Spieler cards Karten vom Stapel ziehen:

List<Hand> hands = new ArrayList<Hand>(players); // defines each players hand (in your case one, each "cards" cards); 

// let 'em draw 
for(int k=0; k<players; ++k) { 
    Hand currentHand = new Hand(); 
    for(int i=0; i<cards; ++i) { 
     currentHand.add(deck.drawFromDeck()); 
    } 
    hands.add(currentHand); 
} 

// find the best 
Collections.sort(hands); // make sure to implement Comparable, to reasonably check which one has the best hand 

for(int i=0; i<players; ++i) { 
    System.out.println("Player " + (i+1) + ": " + hands.get(i)); // Make sure Hand::toString() is overriden properly 
} 

Ja, ich denke, das sollte es tun, und es ist immer noch perfekt sauber und modular.

+0

Erhält jeder Spieler nicht nur 3 Karten, entscheidet der Benutzer über die Anzahl der Spieler und Karten in der Eingabe über den Scanner. aber ich werde weitermachen und anwenden, was Sie zur Verfügung gestellt haben und sehen, wie es geht – Masriyah

+0

@Amina yep das ist nur noch ein Parameter, kein Problem mit diesem Design. ** Ich habe es bearbeitet **. – poitroae

+0

Also bedeutet dies, dass ich meine aktuelle Verwendung eines Arrays in eine ArrayList konvertieren muss? Außerdem füge ich diese Änderungen der Deckklasse hinzu. – Masriyah