2012-04-13 22 views
0

Ich bin ziemlich neu zu diesem so nackten mit mir!Blackjack Java mit MVC

Ich erstelle derzeit ein BlackJack-Spiel in Java und versuche, das MVC-Design beim Erstellen zu verwenden. Ich habe bisher die folgenden Klassen erstellt: - Karte: Um eine Karte zu erstellen - Deck: Um ein Deck mit allen 52 Karten - Hand zu erstellen: Halten Sie eine 'Hand' von Karten - Player: Um ein zu erstellen Spieler für die Verwendung des Spiels - BlackJackTest: Hier teste ich alle Funktionen des Spiels versuchen etwas zu arbeiten!

Ich bin jetzt an dem Punkt angekommen, wo ich alle 52 Karten zeigen kann, und auch 2 Karten an eine Hand austeilen und diese Hand zeigen kann. Aber ich habe viel Ärger mit den nächsten Schritten. Idealerweise würde ich in der "BlackJackTest" -Klasse dies als eine Spiel-Engine verwenden, wo ich X Anzahl von Spielern und deren Namen eingeben würde, und es würde die Spieler erschaffen und durch das System laufen, um das Spiel zu spielen.

Mein Problem ist, dass ich völlig auf dem feststecke, was ich als nächstes tun sollte, oder wenn ich etwas falsch gemacht habe. Meine nächste Aufgabe sollte es sein, ein Feature zu implementieren, so dass ich bis zu 3 menschliche Spieler gegen einen Dealer einsetzen kann, aber ich bin mir nicht sicher, wie das geht ... und ich sollte auch Hit/Stand-Features implementieren, von denen ich nicht sicher bin Wo oder wie sollte ich diese kodieren?

Jede Hilfe wird geschätzt!

Hier ist mein Code:

import java.util.Scanner; 

public class BlackJackTest { 

    public static void main(String[] args) { 

     /*System.out.println(deck.getCard(0).toString()); 
     System.out.println(deck.getCard(0).getSuit()); 
     System.out.println(deck.getCard(0).getSuitCode()); 
     System.out.println(deck.getCard(0).getValue()); 
     System.out.println(deck.getCard(0).getValueCode()); 
     System.out.println(); 
     System.out.println(deck.cardsLeft()); 
     hand.addCard(deck.dealCard()); 
     hand.addCard(deck.dealCard()); 
     hand.showHand(); 
     System.out.println(deck.cardsLeft()); 
     System.out.println(hand.getHandSize()); 
     System.out.println(hand.getCard(0)); 
     System.out.println(hand.getCard(1)); 
     System.out.println(hand.getBlackJackValue()); 
     System.out.println(); 
     */ 

     Deck deck = new Deck(); 

     Hand p1hand = new Hand(); 
     Player player = new Player(); 

     Scanner sc = new Scanner(System.in); 
     System.out.println("Enter your name: "); 
     player.setName(sc.nextLine()); 

     System.out.println("Welcome " + player.getName() + "!"); 

     player.setHand(p1hand); 

     p1hand.addCard(deck.dealCard()); 
     p1hand.addCard(deck.dealCard()); 

     System.out.println(player.getName() + ": "); 
     p1hand.showHand(); 
     System.out.println("Score: " + p1hand.getBlackJackValue()); 
     System.out.println(); 
    } 
} 

public class Card { 

    public enum Value { 
     TWO(2), 
     THREE(3), 
     FOUR(4), 
     FIVE(5), 
     SIX(6), 
     SEVEN(7), 
     EIGHT(8), 
     NINE(9), 
     TEN(10), 
     JACK(10), 
     QUEEN(10), 
     KING(10), 
     ACE(1); 

     public final int value; 

     Value(int c) { 
      value = c; 
     } 
    } 

    public enum Suit { 
     CLUBS('C'), 
     SPADES('S'), 
     DIAMONDS('D'), 
     HEARTS('H'); 

     public final char symbol; 

     Suit(char c) { 
      symbol = c; 
     } 
    } 

    private Suit suit; 
    private Value value; 

    public Card(Suit suit, Value value) { 
     this.suit = suit; 
     this.value = value; 
    } 

    public Suit getSuit() { 
     return suit; 
    } 

    public Value getValue() { 
     return value; 
    } 

    public char getSuitCode() { 
     return suit.symbol; 
    } 

    public int getValueCode() { 
     return value.value; 
    } 

    public String toString() { 
     return value + " of " + suit; 
    } 
} 

import java.util.Collections; 
import java.util.LinkedList; 
import java.util.List; 

public class Deck { 

    private List<Card> deck = new LinkedList<Card>(); 

    public Deck() { 
     for(Card.Suit suit : Card.Suit.values()) { 
      for(Card.Value value : Card.Value.values()) { 
       deck.add(new Card(suit,value)); 
      } 
     } 
     shuffle(); 
    } 

    public void shuffle() { 
     Collections.shuffle(deck); 
    } 

    public int cardsLeft() { 
      // As cards are dealt from the deck, the number of cards left 
      // decreases. This function returns the number of cards that 
      // are still left in the deck. 
     return deck.size(); 
    } 

    public Card dealCard() { 
      // Deals one card from the deck and returns it. 
     if (deck.size() == 52) { 
      shuffle(); 
     } 
     Card temp; 
     temp = deck.get(0); 
     remove(0); 
     return temp; 
    } 

    public Card getCard(int i) { 
     return deck.get(i); 
    } 

    public Card remove(int i) { 
     Card c = deck.get(i); 
     deck.remove(i); 
     return c; 
    } 

} 

import java.util.Vector; 

public class Hand { 
    private Vector<Card> hand; 

    public Hand() { 
     hand = new Vector<Card>(); 
    } 

    public void addCard(Card c) { 
     if (c != null) 
      hand.addElement(c); 
    } 

    public void showHand() { 
     for(int i = 0; i < hand.size(); i++){ 
      System.out.println(hand.elementAt(i)); 
     } 
    } 

    public int getHandSize() { 
     return hand.size(); 
    } 

    public Card getCard(int position) { 
     if(position >= 0 && position < hand.size()) 
      return (Card)hand.elementAt(position); 
     else 
      return null; 
    } 

    public int getBlackJackValue() { 
     int val = 0; 
     boolean ace = false; 

     for(int i = 0; i < hand.size(); i++) { 
      Card card; 
      card = getCard(i); 
      val += card.getValueCode(); 

      if(card.getValueCode() == 1) { 
       ace = true; 
      } 
     } 

     if(ace == true && val + 10 <= 21) { 
      val += 10; 
     } 

     return val; 
    } 
} 

public class Player { 
    private String name; 
    private Hand hand; 

    public Player() { 
     this.hand = null; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setHand(Hand h) { 
     this.hand = h; 
    } 

    public void getHand(){ 
     hand.showHand(); 
    } 
} 
+0

klingt, als ob eine Bank-Klasse (Händler) nützlich wäre, die viele Methoden mit menschlichen Spielern teilen würden - beiden Spieler wäre. Vielleicht wäre dann eine dritte Art von Spieler, ein Roboter, der nach einem Regelwerk agiert, möglich. –

Antwort

1

Sie haben einen guten Einstieg in Ihre Modellklassen, ich würde anfangen, an den View- und Controller-Teilen des Projekts zu arbeiten. Man könnte zwar main() ändern, um mehrere Spieler einzubinden (man muss nur mehrere Spielerobjekte instantiieren, sie in einer Liste speichern und Karten Round-Robin zuweisen), aber man muss eine Menge davon abwerfen, wenn man sich entscheidet, zu ziehen zu einer Nicht-Konsolenansicht und einem Controller.

Ihr Controller-Design wird viel damit zu tun haben, wie Sie Benutzereingaben erhalten und auf diese reagieren (d. H. Treffer/Stand). Es ist Aufgabe, Eingaben von der Ansicht (derzeit über console.in) an das Modell weiterzuleiten. Ihre Ansicht würde also eine Eingabeaufforderung anzeigen, die den Benutzer fragt, was er tun möchte, seine Antwort einlesen und den Controller benachrichtigen. Der Controller würde diese Eingabe den entsprechenden Objekten/Methoden in Ihren Modellklassen zuordnen.

Hoffe, das ist hilfreich!

Steve

+0

LOL, sah gerade das war vom letzten Jahr. Na ja, ich werde die Antwort stehenlassen, für den Fall, dass jemand anderes darüber stolpert. –