2016-05-16 26 views
-2

我正在嘗試編碼內存匹配遊戲 - 標準類型的集中游戲,其中玩家顯示圖片卡,他們翻轉過來,他們必須匹配相應的卡。如何在數組中混洗imageIcons?

有幾件事讓我完全無所適從,甚至應該從哪裏開始,如果能得到一些建議,我會非常感激。我不確定我每次重新開始遊戲時如何在一系列按鈕中洗牌圖像。我考慮製作一個整數矩陣並分別對數字和圖像進行混洗,但1)我不確定如何在一個按鈕上洗牌ImageIcons,以及2)應該匹配的2個數字會有不同的圖像。

我也考慮過創建一個String數組來混洗ImageIcons的文件名,但我認爲這將需要重新分配每個圖片圖標(有48張卡片和24對,這樣會佔用很多時間)。我可以就如何解決這個問題得到一些想法嗎?有沒有比我想象的更容易/更有效的解決方案?我知道有一種Fisher-Yates shuffle算法用於卡片,但我不太明白。

回答

0

使用Collection類來洗牌您的數據。例如,您可以根據以下

public ImageIcon [] shuffle() { 
     String [] dicesName = {"dice1.png", "dice2.png", "dice3.png", "dice4.png", "dice5.png", "dice6.png"}; 
     List<String> dices = Arrays.asList(dicesName); 
     Collections.shuffle(dices); 

     ImageIcon[] dicesShuffled = new ImageIcon[6]; 
     for (int i = 0; i < dices.size(); i++) { 
      dicesShuffled[i] = new ImageIcon(getClass().getResource(dices.get(i))); 
     } 
     return dicesShuffled; 
    } 

你可以要洗牌的骰子,每次調用此方法洗牌骰子的數組,從1-6編號。它返回一個imageIcon混洗陣列。

+0

所以,只是澄清:例如,我可以洗牌字符串數組的文件名,然後,使用for循環,實例化新的洗牌文件名爲JButton數組中的ImageIcons? – mk8139

+0

是的。請注意,創建ImageIcons的for-loop方法僅適用於文件名與主類位於同一目錄中的情況。 – blueFalcon

+0

如果文件名的路徑改變,我將如何確保ImageIcons能夠正常工作?它與我的主類在同一個目錄中,但假設我將整個目錄移動到另一臺計算機上時,圖像的路徑將會不同,它不再是/Desktop/icons/bob.jpg,例如。我需要編輯路徑嗎? – mk8139