2012-04-13 3 views
0

나는 이것 때문에 오히려 새로운 편이다.블랙 잭 MVC를 사용하는 자바

저는 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(); 
    } 
} 
: 여기

내 코드입니다
+0

사운드 은행 수준 (판매점)가 유용 할 수있는 것처럼, - 둘 것이다 선수. 어쩌면 규칙 집합에 따라 행동하는 제 3 종의 Player, Robot이 가능할 수도 있습니다. –

답변

1

당신은 모델 수업을 잘 시작 했으므로 프로젝트의보기 및 컨트롤러 부분에서 작업하기 시작할 것입니다. main()을 수정하여 여러 플레이어를 통합 할 수 있지만 (여러 플레이어 객체를 인스턴스화하고 목록에 저장하고 라운드 로빈을 처리하는 경우) 이동할 결정을 내릴 때 많은 양을 버려야합니다 비 콘솔보기 및 컨트롤러에 연결합니다.

컨트롤러 디자인은 사용자 입력 (예 : 조회수/대기 수)을 ​​수신하고 응답하는 방식과 관련이 있습니다. 그 일은 뷰 (현재는 console.in을 통해)에서 모델로 입력을 릴레이하는 것입니다. 따라서 사용자가 원하는 것을 묻고 응답을 읽고 컨트롤러에 알리는 프롬프트가 표시됩니다. 컨트롤러는이 입력을 모델 클래스의 적절한 객체/메소드에 매핑합니다.

희망이 도움이 되셨습니다.

스티브

인간 플레이어와 많은 방법을 공유 할
+0

LOL, 그냥 작년에서 본 톱. 오 잘, 다른 누구도이 문제에 걸리면 대답을 기다리게 할 것입니다. –

관련 문제