Zugriff von Thread auf UI-Thred

  • 4 Antworten
  • Letztes Antwortdatum
W

Wolverine566561

Gast
Hallo zusammen!

Ich habe ein grundsätzliches Problem, bei dem ich Hilfe bräuchte:

Ich habe 1-4 Spieler. Diese Spieler führen nacheinander eine Tätigkeit aus, für die es Punkte gibt. Ist eine gewisse Punktzahl erreicht, hat derjenige Spieler gewonnen.

Soweit das Problem. Jetzt zur Umsetzung in einer Android-App:

Mein erster Versuch sah so aus, dass ich eine Methode geschrieben habe, in der eine WHILE-Schleife ein Flag "spielGewonnen" geprüft hat. Innerhalb dieser Schleife war als nächstes eine FOR-Schleife, die über das Spieler-Array gelaufen ist. Darin wiederum eine WHILE-Schleife, die ein Flag "naechsterSpieler" geprüft hat. In dieser Schleife war dann alles enthalten, was gebraucht wurde: Eingabe des Ergebnisses, Prüfung ob das eingegebene Ergebnis beim aktuellen Spieler zu einer Veränderung des SpielGewonnen-Flags führt, Änderung des "naechsterSpieler"-Flags. Das sah in etwa so aus:

Code:
boolean spielGewonnen = false;

void methode(){
   while(spielGewonnen != true) {
      for(int i = 0; i < spielerArray.length; i++) {
         while(naechsterSpieler != true) {
            // ... Code
         }
      }
   }
}

Das eigentliche Problem ist nun, dass in dieser Methode auf UI-Controls zugegriffen werden muss. Das führt - wie ich feststellen musste - zum einfrieren des UI. Nach einigen Google-Stunden, war ich schlauer: Die Methode in einen eigenen Thread auslagern!

Leider helfen mir die Beiträge die ich durchgelesen - und auch größtenteils verstanden habe - nicht so richtig weiter. Meist wird davon ausgegangen, dass irgendwas im Hintergrund ausgeführt wird und der Fortschritt zum Beispiel in einem ProgressDialog dargestellt wird. Das ist aber nicht, was ich möchte. Ich möchte, dass die Activity quasi darauf wartet, dass eine Eingabe erfolgt. Diese Eingabe dann für den betreffenden Spieler verarbeitet wird und dann der nächste Spieler an der Reihe ist. Dies soll sich solange wiederholen, bis einer der Spieler gewonnen hat.

Soweit ich es bis hierhin verstanden habe, muss ich von dem Thread aus aber wieder auf die UI zugreifen.

Ich wäre sehr dankbar, wenn mir hier jemand etwas genauere Denkanstöße geben könnte - auch gerne per Mail oder Chat, denn ich habe von paralleler Programmierung und grafischen Benutzeroberflächen nicht viel Ahnung. (Ich weiß, dass das keine guten Vorausstzungen sind, aber es ist nun mal so und ich erwarte keine Lösungen in Form von fertigem Code, sondern lediglich Denkanstöße oder ggf. hilfreiche Webseiten, die das Problem etwas genauer behandeln.)

Ich danke auf jeden Fall schon mal ;-)

Grüße
 
Öhm... du gehst bisschen falsch an die Sache dran. Also je nach dem was das für eingaben sind :)

Wenn du zum Beispiel nur ein "einfaches Tick-Tack-Toe" spiel machst, dann benötigtst du keine while(); Denn es passiert einfach gar nichts, bis der user in eine Ecke klickt. Dafür benötigt man keine while():

Wenn du aber auf richtige "spiele eingaben" wartest, also zum beispiel der user kann sich bewegen und dabei muss der hintegrund neu gezeichnet werden, dann bin ich überfragt :D

Gruß
 
Es geht dabei um eine App, die Dart-Spiele verwalten soll. Es werden also nur Benutzereingaben gemacht, mehr nicht. Aber auf die muss ich eben warten. Vielleicht hab ich mich zu sehr in den Ansatz verrant. Wenn Die was "einfacheres" einfällt, bin ich immer offen ;-)
 
Hi,

ich weiß jetzt nicht wie man Dart-Spiele verwaltet ^^, aber dafür benötigtst du keine schleife. Du denkst zu kompliziert :)

Du machst, um es jetzt mal einfach auszudrücken, eine Seite:
Spielername <- Textfeld
Punktestand <- Eingabefeld
Eingabe Speichern <- Button

Beim drücken auf dem Button holst du dir den nächsten spieler (meinet wegen im array :D) und setzt ihn als Spielername.
Beim Button drück musst du selbstverstänlich dann auc erkennen
Code:
WENN am Ende des Arrays angekommen -> Wieder erster spiler
Außerdem muss im Button geprüft werden, ob die Punktzahl + die eingegeben = 200 ist (200 heißt bei mir grade spiel gewonnen xD)..

"Mehr" ist das eigentlich nicht ;)

Gruß
 
SPRACHLOS!

Danke ;)
 

Ähnliche Themen

D
Antworten
8
Aufrufe
905
jogimuc
J
Zurück
Oben Unten