2016-05-16 6 views
-2

Ich versuche, ein Memory-Matching-Spiel zu programmieren - die Standard-Art von Konzentration Spiel, wo der Spieler Bildkarten gezeigt wird, sind sie umgedreht, und sie müssen die entsprechenden Karten entsprechen.Wie mische ich imageIcons in ein Array?

Es gibt ein paar Dinge, die mich völlig verwirrt haben, wo ich überhaupt anfangen sollte, und ich würde es wirklich schätzen, wenn ich einen Rat bekommen könnte. Ich bin mir nicht sicher, wie ich die Bilder bei jedem Neustart des Spiels in einer Reihe von Schaltflächen mischen würde. Ich habe mir überlegt, eine Integer-Matrix zu erstellen und die Zahlen und Bilder getrennt zu mischen, aber 1) Ich bin mir nicht sicher, wie ich ImageIcons auf einer Schaltfläche mische, und 2) die 2 Zahlen, die übereinstimmen sollen, würden unterschiedliche Bilder haben.

Ich dachte auch darüber nach, ein String-Array zu machen, um die Dateinamen der ImageIcons zu mischen, aber ich denke, dass jedes einzelne Image-Icon neu zugewiesen werden müsste (es gibt 48 Karten und 24 Paare, das würde viel Zeit in Anspruch nehmen). Könnte ich ein paar Ideen bekommen, wie ich dieses Problem angehen kann? Gibt es eine einfachere/effizientere Lösung als die, die ich mir ausgedacht habe? Ich weiß, dass es einen Fisher-Yates Shuffle-Algorithmus für Karten gibt, aber ich kann es nicht ganz verstehen.

Antwort

0

Verwenden Sie die Collection-Klasse, um Ihre Daten zu mischen. Zum Beispiel können Sie eine Reihe von Würfel mischen, von 1 bis 6 nummeriert als

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; 
    } 

folgen können Sie diese Methode aufrufen, jedes Mal, wenn die Würfel mischen wollen. Es gibt ein imageIcon-Shuffle-Array zurück.

+0

Also, nur um zu verdeutlichen: zum Beispiel könnte ich ein String-Array von Dateinamen mischen und dann, mit einer for-Schleife, die neuen gemischten Dateinamen als ImageIcons im JButton-Array instanziieren? – mk8139

+0

Ja. Beachten Sie, dass die for-loop-Methode zum Erstellen von ImageIcons nur funktioniert, wenn sich die Dateinamen im gleichen Verzeichnis wie Ihre Hauptklasse befinden. – blueFalcon

+0

Wie würde ich sicherstellen, dass die ImageIcons funktionieren würden, wenn sich der Pfad der Dateinamen ändert? Es wäre im selben Verzeichnis wie meine Hauptklasse, aber hypothetisch, wenn ich das gesamte Verzeichnis auf einen anderen Computer verschieben würde, würde der Pfad der Bilder anders sein, es wäre nicht mehr /Desktop/icons/bob.jpg beispielsweise. Müsste ich den Pfad bearbeiten? – mk8139

Verwandte Themen