2017-05-17 10 views
1

저는 블랙 잭 게임을 만들고 카드 처리 방법을 알아 내려고 값과 이름을 표시하려고합니다. 내가 2 개의 속성을 가지고 갔던 이유는 에이스를 1이나 11로 다루는 데있어서 순수하게 로직 기반이었습니다. 그 점을 알지 못했지만 누군가 궁금해하는 경우에 그것을 포함시킬 것이라고 생각했습니다. 여기 내가 지금까지 가지고있는 것이있다. 어떤 도움을 주셔서 감사합니다! 난 내가 코멘트자바 열거 형 값과 이름을 반환하는 방법 (카드)

import java.util.Random; 
public class CardDeck { 
public enum Cards { 
    ACE_SPADES (1, 11), 
    ACE_HEARTS (1, 11), 
    ACE_CLOVES (1, 11), 
    ACE_DIAMONDS (1, 11), 
    TWO_SPADES (2, 2), 
    TWO_HEARTS (2, 2), 
    TWO_CLOVES (2, 2), 
    TWO_DIAMONDS (2, 2), 
    THREE_SPADES (3, 3), 
    THREE_HEARTS (3, 3), 
    THREE_CLOVES (3, 3), 
    THREE_DIAMONDS (3, 3), 
    FOUR_SPADES (4, 4), 
    FOUR_HEARTS (4, 4), 
    FOUR_CLOVES (4, 4), 
    FOUR_DIAMONDS (4, 4), 
    FIVE_SPADES (5, 5), 
    FIVE_HEARTS (5, 5), 
    FIVE_CLOVES (5, 5), 
    FIVE_DIAMONDS (5, 5), 
    SIX_SPADES (6, 6), 
    SIX_HEARTS (6, 6), 
    SIX_CLOVES (6, 6), 
    SIX_DIAMONDS (6, 6), 
    SEVEN_SPADES (7, 7), 
    SEVEN_HEARTS (7, 7), 
    SEVEN_CLOVES (7, 7), 
    SEVEN_DIAMONDS (7, 7), 
    EIGHT_SPADES (8, 8), 
    EIGHT_HEARTS (8, 8), 
    EIGHT_CLOVES (8, 8), 
    EIGHT_DIAMONDS (8, 8), 
    NINE_SPADES (9, 9), 
    NINE_HEARTS (9, 9), 
    NINE_CLOVES (9, 9), 
    NINE_DIAMONDS (9, 9), 
    TEN_SPADES (10, 10), 
    TEN_HEARTS (10, 10), 
    TEN_CLOVES (10, 10), 
    TEN_DIAMONDS (10, 10), 
    JACK_SPADES (10, 10), 
    JACK_HEARTS (10, 10), 
    JACK_CLOVES (10, 10), 
    JACK_DIAMONDS (10, 10), 
    QUEEN_SPADES (10, 10), 
    QUEEN_HEARTS (10, 10), 
    QUEEN_CLOVES (10, 10), 
    QUEEN_DIAMONDS (10, 10), 
    KING_SPADES (10, 10), 
    KING_HEARTS (10, 10), 
    KING_CLOVES (10, 10), 
    KING_DIAMONDS (10, 10); 

    public final int faceValue1; 
    public final int faceValue2; 

    private Cards(int faceValue1, int faceValue2) { 
     this.faceValue1 = faceValue1; 
     this.faceValue2 = faceValue2; 
    } 

    public String toString() { // error: non-static method name() cannot 
             be referenced from a static context 
     return Cards.name(); 
    } 

    public int getFaceValue1() { 
     return faceValue1; 
    } 

    public int getFaceValue2() { 
     return faceValue2; 
    } 
} 
Cards[] deck; 

public CardDeck() { 
    deck = new Cards[52]; 
    int i = 0; 
    while(i<52) { 
     for(Cards card : Cards.values()) { 
      deck[i] = card; 
      i++; 
     } 
    } 
    shuffle(deck);        
} 
//This will return the first card after shuffling. 
public Cards deal() { 
    Cards[] cardReturn = new Cards[1]; 
    cardReturn[0] = deck[0];     
    Cards[] tempArr = new Cards[deck.length - 1];  
    for(int i=1; i<deck.length; i++) { 
     tempArr[i-1] = deck[i];   
    } 
    deck = new Cards[tempArr.length];  
    deck = tempArr;      
    return cardReturn[0]; 
} 

//this shuffles the deck 
public void shuffle(Cards[] deckToShuffle) { 
    int index; 
    Cards[] temp = new Cards[1]; 
    Random random = new Random(); 
    for (int i = deckToShuffle.length - 1; i > 0; i--) { 
     index = random.nextInt(i + 1); 
     temp[0] = deckToShuffle[index];  
     deckToShuffle[index] = deckToShuffle[i]; 
     deckToShuffle[i] = temp[0];  
     } 
    deck = deckToShuffle; 
}  
} 
+0

빠른 승인을 받아 주셔서 감사합니다. 한 가지 : 그 문장이 일반적으로 너무 불명확하거나 광범위한 질문을 나타내는 것처럼 "누구든지 도울 수있다"는 말은 피해야합니다. – GhostCat

답변

2

간단하게 아래지고있어 오류를 포함 : 당신의 반환 값을 얻으려면

Cards.name() 

그러나 단순히

name() 

를 호출하지 않습니다.

그 외에도 : 지나치다. 카드 가치를위한 하나, 카드 스위트를위한 하나의 두 개의 enum을 원한다. 그런 다음 가치와 정장을 담을 두 개의 필드가있는 카드 클래스가 있습니다.

4 개의 값을 모두 하나의 열거 형으로 사용하면 코드가 훨씬 복잡해집니다.

값 필드를 public으로 설정하고 getter 메소드를 지정하는 것도 중요하지 않습니다. 필드를 비공개로 설정하는 것이 좋습니다.

마지막으로, 저는 얼굴 값 1과 2 만 부르는 것의 이름을 좋아하지 않습니다.하지만 지금은 더 좋은 생각이 없습니다.

+0

충분히 간단! 고맙습니다! 예, 저는 똑같은 생각을했습니다. 나는 모든 것을 문질러서 그런 식으로 그렇게 시작할 것입니다. –

+0

종종 나쁜 생각이 아닙니다. 정말 물건을 버리고 새로운 아이디어를 내놓는 데 도움이됩니다. 이상적으로 당신은 tdd를 할 것입니다 ... 테스트 코드를 작성할 때 먼저 디자인 아이디어가 "옳지 않다"고 빨리 알 수 있습니다. – GhostCat