2016-04-07 3 views
0

Mitte Projekt hier und auf der Suche nach einem schnellen und schmutzigen Weg aus einer klebrigen Situation.Karte Ratespiel, zweite Karte wird nicht mittleren Faden zeichnen

Das Spiel sieht so aus. Um zu spielen, klicken Sie auf eine Karte und dann auf eine andere, und wenn sie übereinstimmen, bleiben beide angezeigt. Match all und Spiel ist vorbei.

enter image description here

In meinem Fall, wenn ich eine Karte angezeigt, wenn der Benutzer die zweite Karte auswählt, die Verarbeitungslogik, sollte die Karte gesetzt sichtbar und nur dann prüfen, wenn es eine Übereinstimmung gibt. Und wenn nicht, schicke die Karte zurück auf das alte Bild.

Dieser Code, hoffe ich, hilft Ihnen zu verstehen, was ich versuche zu tun.

gridLayout.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      //HOW DO I FORCE THE INTERFACE TO REDRAW BEFORE CONTINUING THE THREAD? 
      engine.setCardStateToShow(position); 
      gridLayout.invalidate(); 
      gridLayout.invalidateViews(); 
      try{ 
       Thread.sleep(1000); 
      }catch (Exception x){ 

      } 
      //DETERMINE IF THE CARDS MATCH AND IF NOT -- SET CARD INVIS 
      String message = engine.itemClicked(position, gridLayout); 
      Toast.makeText(getApplication(), message, Toast.LENGTH_SHORT).show(); 

      //If engine returns a value of WASWINNER, we can end the activity and end the game. 
      if (message.equals(GameEngine.WASWINNER)) { 
       startActivity(endActivity); 
      } 
     } 
    }); 
} 

Das Endergebnis, wie es steht, ist die Anwendung ändert sich das Bild überprüft Spiel zu zeigen, wenn keine Übereinstimmung Änderungen nicht zeigen. Und erst danach wird die Schnittstelle erneut mit den neuen Werten gezeichnet, sodass sie für den Endbenutzer, wenn keine Übereinstimmung vorhanden ist, niemals die "falsche" Kachel sehen, da sie auf "nicht anzeigen" zurückgesetzt wird.

Vielen Dank im Voraus und bitte korrigieren Sie mich, wenn die Frage hätte besser gestellt werden können.

+0

Bitte senden Sie keine Screenshots des Codes. Bitte posten Sie den gesamten Text als Text. –

+0

Entschuldigung, ich bin noch relativ neu hier. Ich werde versuchen, die Regeln zu finden und zu lesen. – JoshuaTree

Antwort

0

Okay, ich habe dieses Problem gelöst, indem ich die abstrakte Klasse AsyncTask benutzt habe. Durch die Verwendung von AsyncTask konnte ich effektiv "Multi-Threads" durchführen und die Vergleichslogik von der UI-Logik trennen. Als Ergebnis konnte ich die Benutzeroberfläche direkt und separat verwalten, wie in der folgenden grundlegenden Erklärung gezeigt.

Mit der onPreExecute() zeigte ich die Karten.

BY mithilfe von doInBackground() Ich konnte überprüfen und setzen Karte Show State Processing.

Mit onPostExecute() konnte ich die Karten auf der Grundlage der Ergebnisse der DoInBackground() -Methode der AsyncTask-Implementierung direkt in den UI-Thread zu ihrem endgültigen Ansichtszustand zurückkehren.