Ich möchte ein Online Schiffe versenken machen.
Nun muss ich (der server) die Positionen der gegnerischen Schiffe übergeben:
Delphi-Quellcode:
if online_server >= 1 then begin
feld_a := 1; // server wartet nur noch auf denclient
for I := 1 to 10 do begin
for J := 1 to 10 do begin
Nachricht.feld[I,J] := mein_feld[I,J]; //ints
end;
end;
for I := 1 to 5 do begin
for J := 1 to 5 do begin
Nachricht.schiffe[I,J] := meine_schiffe[I,J]; //ints
end;
end;
for I := 1 to 5 do begin
Nachricht.namen_schiffe[I] := schiffs_namen[I]; //strings
end;
Nachricht.aktion := 'server_feld';
with Server.Socket do begin
for I := 0 to ActiveConnections-1 do
Connections[I].SendBuf (Nachricht, SizeOf(Nachricht))
end; {with}
end;
So sieht der Record Nachricht aus:
Delphi-Quellcode:
type TChatNachricht = Record
chat : string[255];
name : string[255];
aktion : string[255];
feld : array[1..10,1..10] of integer;
schiffe : array[1..5,1..5] of integer;
namen_schiffe : Array[1..5] of string;
spiel_status : integer;
schuss_x, schuss_y, treffer : integer; //schuss_x/schuss_y enthaelt entweder dein schuss koordinaten oder die vom gegner. Treffer enthaelt entweder 3 - wasser getroffen oder 4 - schiff getroffen
end;
Hier empfängt der client die Daten:
Delphi-Quellcode:
if Nachricht.aktion = 'server_feld' then begin
for I := 1 to 10 do begin
for J := 1 to 10 do begin
gegner_feld[I,J] := Nachricht.feld[I,J];
end;
end;
for I := 1 to 10 do begin
for J := 1 to 10 do begin
gegner_schiffe[I,J] := Nachricht.schiffe[I,J];
end;
end;
for I := 1 to 5 do begin
schiffs_namen_KI[I] := Nachricht.namen_schiffe[I];
end;
feld_a := 1; //server ist fertig mit dem setzen, es wird auf den client gewartet
end;
Nach dem senden, stürtzt der Client mit folgender Fehlermeldung ab: Ungültige Zeigeroperation
Darf man überhaupt so arrays so versenden?