2012-11-19 6 views
1

블랙 잭 게임에 도움이 필요합니다. 배열에 카드 덱이 있고 카드를 꺼내어 배열을 처리 할 때마다 크기보다 하나 적은 배열이 다시 채워집니다. 그래서 나는 각각의 n 번째 선수블랙 잭 인쇄 카드 인쇄

 deck=createCardArray(); 
     shuffle(deck); 
     int[] players = createPlayers(n); 
     int[] points = createPoints(n); 

     for(int i = 1 ; i<= players.length; i++){ 
      Card a = dealCard(deck); 
      updatePoints(players, points, i, a); 
      Card b = dealCard(deck); 
      updatePoints(players, points, i, b); 
      printStats(players, points, a, b); 
     } 

내가 뭘 원하는 것은 각 플레이어에 두 개의 카드를 처리 한 후 카드와 최종 점수를 인쇄하는 두 개의 카드를 다루는이 루프가 있습니다. 그래서 다음과 같습니다이 메소드하여 printStats 있습니다

public static void printStats(int[] nplayers, int[] points, Card a, Card b){ 
    for (int i=0; i<nplayers.length;i++){ 
     System.out.println("Player " + nplayers[i] + ": Points " + points[i]); 
     System.out.println("Card 1: " + a.showCardSuit() + " " + a.showCardValue()); 
     System.out.println("Card 2: " + b.showCardSuit() + " " + b.showCardValue()); 
     System.out.println(); 
    } 
} 

그것이마다 반복 할 것을 그것을 수행하고 카드 포인트 및 선수마다 출력 무엇. 하지만이 카드를 실행하면 마지막 플레이어의 두 장의 카드 만 제공됩니다. 나는 이것이 왜 일어나는 지 이해합니다. 하지만이 문제를 해결하는 방법에 대한 제안을 원합니다.

새로운 2 차원 배열 길이 플레이어와 2Xn 크기를 만들어야합니까, 아니면 다른 방법으로해야합니까?

+0

정말로 모든 루프에서'printStats'를 호출하고 있습니까? – thedan

+0

나는 다른 방법을 모른다. – user1796681

+0

printStats는 모든 플레이어의 카드와 포인트를 보는 방법이다. 이 유형의 메소드는 일반적으로 모든 플레이어가 카드와 포인트를 보았을 때 호출됩니다. 아직 모든 것을 설정하고있는 동안에는 호출되지 않습니다. 배열을 추가하지 않고도 디자인을 단순화 할 수있는 방법은 아래의 내 대답을 참조하십시오. – thedan

답변

1

호출하려는 메서드가 포함 된 Player 클래스를 만들어 디자인을 향상시킬 수 있습니다. 간단한 구현은 다음과 같습니다.

public class Player{ 
     Card a; 
     Card b; 

     public Card getA() { 
      return a; 
     } 
     public void setA(Card a) { 
      this.a = a; 
     } 
     public Card getB() { 
      return b; 
     } 
     public void setB(Card b) { 
      this.b = b; 
     } 

     public int points(){ 
      //calculation for returning point value 
      int points = 0; 
      return points; 
     } 

    } 

이제 2 개의 배열 대신에 각 플레이어가 포함 된 배열 하나가 있습니다. 이 배열을 반복 할 때 setA()setB() 메서드를 사용하여 플레이어에게 카드를 제공합니다. 모든 플레이어가 카드를 가지고 나면 배열을 다시 반복하고 getA()getB()을 사용하여 카드를 인쇄합니다. points()을 사용하면 여분의 배열을 드래그하지 않고 모든 플레이어의 손에 대한 포인트를 쉽게 계산할 수 있습니다.

명시 적으로 A, B 속성을 사용하여 카드를 보관하는 대신 List 또는 ArrayList를 사용하면 훨씬 유용 할 수 있습니다. 이렇게하면 2 장의 카드 만 사용하는 oter 카드 게임에 대해 동일한 시스템을 사용할 수 있습니다.

0

플레이어는 "손이 있습니다"... 그래서 플레이어에게 카드를 줘! 즉, 플레이어의 현재 카드를 나타내는 필드를 만듭니다. 그런 다음 카드를 거래 할 때 player.hit(Card newCard)을 수행 한 다음 자신의 손을 표시하려면 그냥 수행하십시오. List<Card> player.getHand()