2016-05-13 3 views
0

Ich habe eine Frage und ich hoffe, dass jemand von Ihnen mir helfen kann.Android Studio, sortiere int Array für Speicherspiel

Ich versuche, mein eigenes Memory Game App im Android Studio zu machen.

I erstellt eine Image Array (bArray), in der alle Tasten gespeichert sind. In der oncreate Methode bekam ich eine for-Schleife, um jedem ImageButton ein zufälliges Tag zu geben.

Mit Hilfe dieser Tags ich ein Bild zu jedem ImageButton zuweisen, aber ich möchte nur ein Bild zweimal zugewiesen werden und nicht z. drei Mal.

Also muss ich feststellen, dass Umbauten, die mehr als doppelt vergeben werden und sie mit anderen Tags zu ersetzen.

Ich weiß nicht, wie das zu tun. Ich hoffe, dass Sie mir helfen können. Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen.

for(ImageButton b : bArray) { 
    Random random = new Random(); 
    i_rndTag = random.nextInt(bilderArray.length); 
    b.setTag(i_rndTag); 
} 
+0

hatte Glück, ich fühle mich wie ein Memory-Spiel App schreiben für Demenzpatienten. –

Antwort

0

bevöl einen Array mit 1 Kopie jeder Bild-Referenz (imageArray). Erstellen Sie ein weiteres Array (indexUsageArray) mit der gleichen Anzahl von Elementen und speichern Sie, wie oft das Bild verwendet wurde. Verifiziere den Zufallsindex gegen das Verwendungs-Array, wenn die Verwendungsanzahl gleich 2 ist, führe den Zufallsgenerator erneut aus und überprüfe, bis du einen Index hast, der NICHT zweimal benutzt wurde.

try { 
     String TAG = "RandomGame"; 
     String[] imageArray = {"bread.jpg","potatoe.jpg","eaters.jpg","earlobe.jpg","paintbrush.jpg"}; 
     int counterMax = imageArray.length; 
     int[] indexUsageArray = new int[counterMax]; 
     // there are 2 copies of each image 
     String[] imageToDisplayAtPosition = new String[2*counterMax]; 
     Random random; 
     int randomIntTemp = 0; 
     for (int i=0;i<counterMax;) { // only increase i AFTER completed attempt at randomization assignement 
      random = new Random(); 
      randomIntTemp = random.nextInt(2*counterMax); 
      if (indexUsageArray[i] < 2) { 
       //Log.w(TAG,"randomIntTemp:["+randomIntTemp+"] i:["+i+"] indexUsageArray[i]:["+indexUsageArray[i]+"] imageToDisplayAtPosition:["+imageToDisplayAtPosition[randomIntTemp]+"]"); 
       if (imageToDisplayAtPosition[randomIntTemp] == null) { 
        imageToDisplayAtPosition[randomIntTemp] = imageArray[i]; 
        indexUsageArray[i]++; 
       } // try another random position for same image 
      } else { // assigned both positions, move to next image 
       i++; 
      } 
     } 
     Log.w(TAG,"Assignments"); 
     for (int j=0;j<2*counterMax;j++) { 
      Log.w(TAG,"j:["+j+"] image:["+imageToDisplayAtPosition[j]+"]"); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

, die (zum Beispiel) ergibt:

j:[0] image:[earlobe.jpg] 
j:[1] image:[eaters.jpg] 
j:[2] image:[potatoe.jpg] 
j:[3] image:[eaters.jpg] 
j:[4] image:[earlobe.jpg] 
j:[5] image:[bread.jpg] 
j:[6] image:[paintbrush.jpg] 
j:[7] image:[potatoe.jpg] 
j:[8] image:[paintbrush.jpg] 
j:[9] image:[bread.jpg] 
+1

Es tut mir leid, aber ich denke, dass ich nicht weiß, was du meinst. Könnten Sie mir bitte ein Codebeispiel für Ihre Lösung geben? Ich habe diese zwei Arrays, aber was mache ich als nächstes? Wie kann ich speichern, wie oft das Bild zugewiesen wurde? – DIvin93

+0

@ DIvin93 da gehst du. Vergiss nicht zu zeigen, wie dankbar du für meine sonntägliche Freundlichkeit bist. –

+1

Vielen Dank! – DIvin93

-1

Vielleicht Ihre eigene Klasse, die Sie verwenden:

class CustomImageButton { 

private int count; 
private ImageButton imageButton; 
private final int range = 32; 

public CustomImageButton() { 
    imageButton = new ImageButton; 
} 

public void setTag() { 
    if (count < 2) { 
    imageButton.setTag(new Random().nextInt(range)); 
    count++; 
    } 
    return; 
} 

} 
+0

hasst du nicht gerade downvoting drivebys? Wenn Sie sich so stark über eine Antwort fühlen, können Sie am wenigsten sagen, WARUM Sie Ihre Meinung ändern. –

Verwandte Themen