Hallo, ich wollte ein kleines Spiel programmieren. Dazu werden Daten zwischen Host und Client
(also über Netzwerk) hin und her geschickt. Am Ende dieser proezedur soll nun lediglich ein Button auf false
gesetzt werden (damit der andere spieler würfeln kann) und danach soll auf Daten vom Gegner geartet werden.
Dazu habe folgenden Algorithmus programmiert:
Delphi-Quelltext
1: 2:
| repeat until Client.Dataavailable <> 0 |
Nach abfolge dieses algorithmus soll nun die prozedur nue aufgerufen werden (prozedur zum Datenabgleich).
Hier ist mal die ganze Prozedur:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77:
| procedure TThready.execute; var new_color, neue_zahl: integer; empf: string; begin If host_pc = true then begin If Form3.btn_wuerfel.Enabled= true then begin wuerfeln(new_color, neue_zahl); Arbeitssocket.write(IntToStr(new_color) + chr(LF)); repeat until Arbeitssocket.dataAvailable > 0; empf:= Arbeitssocket.readLine; if empf = 'ok' then begin Arbeitssocket.write(IntToStr(neue_zahl) + chr(LF)); Form3.zufallsfarbe(new_color, neue_zahl); Form3.btn_wuerfel.Enabled:= false; Form3.warten; exit; end; end else begin new_color:= StrToInt(Arbeitssocket.readline); Arbeitssocket.write('ok' + chr(LF)); repeat until Client.dataAvailable > 0; empf:= Client.readLine; If empf= 'ok' then begin neue_zahl:= StrToInt(Arbeitssocket.readline); Form3.zufallsfarbe(new_color, neue_zahl); Form3.btn_wuerfel.Enabled:= true; thready.Suspend; end; end; end;
If host_pc = false then begin If Form3.btn_wuerfel.Enabled= true then begin wuerfeln(new_color, neue_zahl); Client.write(IntToStr(new_color) + chr(LF)); repeat until Client.dataAvailable > 0; Client.write(IntToStr(neue_zahl) + chr(LF)); Form3.zufallsfarbe(new_color, neue_zahl); Form3.btn_wuerfel.Enabled:= false; Form3.warten; exit; end else begin new_color:= StrToInt(Client.readline); Client.write('ok' + chr(LF)); repeat until Client.dataAvailable > 0; neue_zahl:= StrToInt(Client.readline); Form3.zufallsfarbe(new_color, neue_zahl); Form3.btn_wuerfel.Enabled:= true; thready.Suspend; end; end; end; |
Ist leider etwas länger geworden aber ch habe sie kommentiert, damit ihr besser versteht was ich mir
dabei gedacht habe.
Nun ist mein Problem das im Abschnitt host_pc= true und btn_wuerfel.enabled= true er nicht indie prozedur warten springt.
(warten weißt den obigen algorithmus zum wartena auf und ruft dann erneut den Thread auf).
An dieser stelle ist es egal was ichs chriebe nach dem Befehl btn_wuerfel.Enabled= false wird kein weiter befehl ausgeführt. Ich habe es auch mit Showmessage oder ähnlichem versucht. nichts geht.
Mir wäre sehr geholfen wenn einer von euch vielleicht ne idee hat, weil ich langsam am verzweifeln bin
Danke im Voraus
Gruß man-u
Moderiert von
raziel: Delphi-Tags hinzugefügt