Autor Beitrag
man-u
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Sa 02.12.06 17:15 
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:

ausblenden 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:

ausblenden volle Höhe Delphi-Quelltext
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
  //Abchnitt in dem nur der Host_pc arbeitet
  If host_pc = true then
  begin
    //Nur wenn der Host am zug ist (Button = true)
    If Form3.btn_wuerfel.Enabled= true then
    begin
      //erhalten der neu gewürfelten Daten
      wuerfeln(new_color, neue_zahl);
      //senden der Farbe an den Client
      Arbeitssocket.write(IntToStr(new_color) + chr(LF));
      //warten bis der Client antwortet
      repeat
      until Arbeitssocket.dataAvailable > 0;
      empf:= Arbeitssocket.readLine;
      //wenn richtig geantwortet, dann...
      if empf = 'ok' then
       begin
       //sende die neue Zahl an den Client
        Arbeitssocket.write(IntToStr(neue_zahl) + chr(LF));
       //aufruf der Prozedur um die ermittelten werte zu verarbeiten
        Form3.zufallsfarbe(new_color, neue_zahl);
       //Button sperren damit der Host nicht mehr würfeln kann
        Form3.btn_wuerfel.Enabled:= false;
       //Host soll warten, bis wieder Daten vom Gegner kommen
        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;

  //Abchnitt in dem nur der Client arbeitet
  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
    //empfangen der vom Host gewürfelten Farbe
      new_color:= StrToInt(Client.readline);
    //senden einer Bestätigung  
      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 user profile iconraziel: Delphi-Tags hinzugefügt