2016-05-16 11 views
-2

私は、メモリマッチングゲームをコーディングしようとしています - プレイヤーに絵カードが表示され、それらが裏返され、対応するカードと一致しなければならない集中ゲームの標準タイプ。配列内のimageIconをシャッフルする方法は?

私はどこから始めるべきかについて私を完全に犠牲にしていることがいくつかあります。私が助言を得ることができれば本当に感謝します。私は、ゲームを再起動するたびにボタンの配列で画像をシャッフルする方法がわからない。私は整数行列を作成し、数値と画像を別々にシャッフルすることを考えましたが、1)ボタン上でImageIconをシャッフルする方法がわからず、2)一致するはずの2つの数値が異なる画像を持っていました。

ImageIconのファイル名をシャッフルする文字列配列も考えましたが、それぞれのイメージアイコンを再割り当てする必要があると思います(48枚と24ペアなので時間がかかります)。この問題にどう対処するかについてのアイデアを得ることができますか?私が思っていたよりも簡単で効率的なソリューションがありますか?私は、Fisher-Yatesのシャッフルアルゴリズムがカードに使われていることを知っていますが、それはかなり理解できません。

答えて

0

データをシャッフルするためにコレクションクラスを使用します。たとえば、あなたが従う

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配列のImageIconとしてインスタンス化できますか? – mk8139

+0

はい。 ImageIconを作成するfor-loopメソッドは、ファイル名がメインクラスと同じディレクトリにある場合にのみ機能することに注意してください。 – blueFalcon

+0

ファイル名のパスが変更された場合、ImageIconが確実に機能するようにはどうすればよいですか?私のメインクラスと同じディレクトリにありますが、ディレクトリ全体を別のコンピュータに移動すると、画像のパスが異なり、/Desktop/icons/bob.jpgではなくなり、例えば。パスを編集する必要がありますか? – mk8139

関連する問題