0

JavaでBlackJackゲームを作成していて、作成時にMVCデザインを使用しようとしています。これまでに次のクラスを作成しました。-カード:カードを作成する-デッキ:52枚すべてのカードで満たされたデッキを作成する-手:カードの「手」を保持する-プレーヤー:ゲーム用のプレーヤーを作成する--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();
    }
}
4

1 に答える 1

1

モデル クラスの開始は順調です。私は、プロジェクトのビュー部分とコントローラー部分の作業を開始します。main() を変更して複数のプレーヤーを組み込むことは確かにできますが (複数のプレーヤー オブジェクトをインスタンス化し、それらをリストに格納し、ラウンド ロビンでカードを配るだけです)、移動する場合は、その多くを破棄する必要があります。コンソール以外のビューとコントローラーに。

コントローラーの設計は、ユーザー入力 (つまり、ヒット/スタンド) を受け取り、応答する方法に大きく関係します。その仕事は、ビューから (現在は console.in 経由で) 入力をモデルに中継することです。したがって、ビューはユーザーに何をしたいかを尋ねるプロンプトを表示し、応答を読み、コントローラーに通知します。コントローラーは、この入力をモデル クラスの適切なオブジェクト/メソッドにマップします。

お役に立てば幸いです。

スティーブ

于 2013-05-31T05:58:58.677 に答える