2014-01-24 66 views
3

我對Java非常陌生,並且在理解如何洗牌數組(或我的套牌數組)時遇到困難。我已經嘗試過使用Random類,但它不適合我。無論如何,在這裏去我創建的類:簡單的Java卡片遊戲 - 麻煩洗牌(陣列)

CardGame

import java.util.Random; 

public class CardGame { 

    public static void main(String[] args) { 

     // final int SPADES = 0, HEARTS = 1, DIAMONS = 2, CLUBS = 3; 
     final int ACE = 1, TWO = 2, THREE = 3, FOUR = 4, FIVE = 5, SIX = 6, SEVEN = 7, EIGHT = 8; 
     final int NINE = 9, TEN = 10, JACK = 11, QUEEN = 12, KING = 13; 

     Random rand = new Random(); 

     int[][] deck = { 
       { ACE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING }, 

       player1.setHand(deck[i][randIndex]); 
       player2.setHand(deck[i][randIndex]); 
       player3.setHand(deck[i][randIndex]); 
      } 
     } 

     System.out.println(player1.getHand()); 
     System.out.println(player2.getHand()); 
     System.out.println(player3.getHand()); 
    } 
} 

球員

public class Player { 

    final int MAX_HAND = 6; 

    private String playerName; 
    private int playerHand[] = new int[MAX_HAND]; 

    public Player(String name) { 
     playerName = name; 
    } 

    public void setHand(int card) { 

     int currentLength = playerHand.length; 

     if (currentLength == MAX_HAND) { 
      return; 
     } 

     playerHand[currentLength] = card; 
    } 

    public String getHand() { 

     String cardN 
       case 8:  cardNames += "Eight"; break; 
       case 9:  cardNames += "Nine"; break; 
       case 10: cardNames += "Ten";  break; 
       case 11: cardNames += "Jack"; break; 
       case 12: cardNames += "Queen"; break; 
       case 13: cardNames += "King"; break; 
      } 

      if (i < playerHand.length - 2) { 
       cardNames += ", "; 
      } 

     } 

     return playerName + " has " + cardNames + " on his hand."; 
    } 
} 

結果總是:

名1有王牌,他手上有兩個,三個,四個和五個。
Name2擁有Ace, 他的手上有兩個,三個,四個和五個。
Name3擁有Ace,Two,Three,Four 和他手上的Five。

什麼是我做錯了爲內部數組deck生成隨機索引?

謝謝。

+0

更新的問題。它始終輸出相同的結果。 – Aborted

+1

查看['Collections.shuffle'](http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#shuffle%28java.util.List%29) –

+0

現在我必須堅持使用陣列。這只是令我困擾的隨機性部分,否則這個簡單的遊戲將被視爲完成。 – Aborted

回答

1

更換switch (i)switch (playerHand[i])getHand()方法並調用nextInt()每個球員不只是在每次迭代一次。

變化setHand()


int index = 0; 
public void addCard(int card) { 
    if (index == MAX_HAND) { 
      return; 
    } 
    playerHand[index++] = card; 
} 
+0

現在結果變成了'Name1擁有,,並且在他手上。 Name2擁有,,和在他的手上。 Name3擁有,,和在他的手上.'。出了什麼問題?這是令人困惑的... – Aborted

+0

@Aborted這是因爲你不是真的設置卡。看我的編輯。 –

+0

這幾乎工作!唯一的問題是,它設置了4個隨機卡而不是5個。 – Aborted

0

您需要在每次設置卡後調用rand.nextInt。

   player1.setHand(deck[i][rand.nextInt(deck[i].length)]); 
       player2.setHand(deck[i][rand.nextInt(deck[i].length)]); 
       player3.setHand(deck[i][rand.nextInt(deck[i].length)]); 
+0

結果是一樣的。 – Aborted