2012-04-13 48 views
0

私はむしろこれに慣れていないので、私と一緒に裸です!ブラックジャックMVCを使用しているJava

私はJavaでBlackJackゲームを作成し、それを作成するときにMVCデザインを使用しようとしています。 - カード:カードの作成を保持するには - デッキ:52枚のカードすべてで満たされたデッキを作成するには - ハンド:カードの「ハンド」を保持するには - プレイヤー:以下のクラスを作成します。 Player for game use - BlackJackTest:ここでは、何か動作するようにしようとしているゲームのすべての機能をテストしています!

私は現在、52枚のカードをすべて表示でき、2枚のカードをハンドに手渡して表示することができます。しかし、私は次のステップで多くの問題を抱えています。理想的には、 "BlackJackTest"クラス内で、これをゲームエンジンとして使用して、X人のプレーヤーとその名前を入力し、プレイヤーを作成し、システムをループしてゲームをプレイしたいと考えています。

私の問題は、私が次に何をすべきか、あるいは私が何か間違ってしまったことに完全に執着していることです。私の次のタスクは、ディーラーに対して最大3人の人間のプレーヤーを配置できるように機能を実装することですが、これを行う方法はわかりません。また、私は確信していないヒット/スタンド機能を実装する必要がありますどこでどのようにコーディングするべきか

ご協力いただきましてありがとうございます。ここで

は私のコードです:

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

サウンドバンク・クラス(ディーラー)が有用であろうかのように、 - の両方になりますプレーヤー。多分ルールセットに従って行動する第3の種類のPlayer、Robotが可能になるでしょう。 –

答えて

1

あなたはモデルクラスを使い始めることができます。私はプロジェクトのViewとControllerの部分について作業を始めます。あなたは確かにmain()を変更して複数のプレイヤーを組み込むことができます(複数のプレイヤーオブジェクトをインスタンス化してリストに格納し、カードをラウンドロビンする)ができますが、移動する場合は、コンソール以外のビューとコントローラに接続します。

コントローラのデザインは、ユーザーの入力(ヒット/スタンド)の受信方法や応答方法と大きく関係します。それは、(現在console.inを介して)ビューからの入力をモデルにリレーすることです。したがって、あなたの意見には、ユーザーに何をしたいかを尋ねるプロンプトが表示され、応答を読み、コントローラーに通知します。コントローラは、この入力をモデルクラスの適切なオブジェクト/メソッドにマップします。

希望がありますように!

スティーブ

人間のプレーヤーとの多くの方法を共有する
+0

LOL、ちょうど昨年からだったそれを見た。まあ、他の誰かがこれにつまずいた場合に備えて、私は答えを立てておきます。 –

関連する問題