Autor Beitrag
Fiete
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 617
Erhaltene Danke: 364

W7
Delphi 6 pro
BeitragVerfasst: Do 06.01.11 15:41 
Dies ist die Erweiterung von Schiffe versenken: Mensch gegen PC

Gespielt wird auf einem 10x10 Feld mit Koordinaten A - J und 1 - 10.
Es gibt 10 Schiffe.
1 Schlachtschiff (4 Kästchen),
2 Kreuzer (3 Kästchen),
3 Zerstörer (2 Kästchen) und
4 U-Boote (1 Kästchen).

Die eigenen Schiffe können frei gesetzt werden oder der PC zeigt einen Vorschlag.

Die Schiffe dürfen sich NICHT berühren!

Zum Spielstart muß der Client sich mit dem Server verbinden - per IP (z.B. 192.168.2.2).
Der voreingestellte Port ist 56789.

Frohes Ballern

Gruß, Fiete
Edit1: SocketRead ist geändert worden, Delay(1000); konnte gelöscht werden :wink:
die eigene Flotte kann vor Kiebitzen versteckt werden(Mausclick)
Einloggen, um Attachments anzusehen!
_________________
Fietes Gesetz: use your brain (THINK)


Zuletzt bearbeitet von Fiete am Fr 14.01.11 11:44, insgesamt 1-mal bearbeitet
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 06.01.11 15:54 
Moin!

Leider ist die Netzwerkanbindung "kaputt", hier ein Beispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
 // Antwort erhalten und auswerten
 procedure TSchiffe.SocketRead(Sender: TObject;Socket: TCustomWinSocket);
  var Meldung:String;
  begin
   Meldung:=Socket.ReceiveText;
   if Length(Meldung)=2 then Auswerten(Meldung)
   else if Length(Meldung)=3 then SchussAuswerten(Meldung)
   else if Meldung='?????' then StellungsSpionage
   else if Length(Meldung)=100 then StellungZeigen(Meldung)
   else if Length(Meldung)<=20 then HinweisZeigen(Meldung);
   // Der folgende Ausdruck ist wahr, wenn beide
   // Boolean-Variablen den Wert True oder beide
   // den Wert False haben
   ShallMove := not (IsServer xor Dran);
   UpdateCaption;Delay(1000);
  end;
Du gehst davon aus, dass die Ereignisse bei den Socket-Komponenten synchron zu den Sendevorgängen sind, das ist aber leider im Allgemeinen falsch. Siehe FAQ-Beitrag dazu. :nixweiss:

In diesem Tutorial wird eine Alternative gezeigt, um das Problem zu umgehen. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Fiete Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 617
Erhaltene Danke: 364

W7
Delphi 6 pro
BeitragVerfasst: Sa 08.01.11 12:28 
Moin Narses,
danke für den Hinweis, werde Dein Tutorial durcharbeiten und das Programm dann verbessern.
Zur Historie von Schiffe versenken im LAN:
die erste Version habe ich 1991 entwickelt unter TP4.
Anno 2000 habe ich es auf Delphi portiert, in der Annahme, daß die Socket-Komponenten synchron arbeiten.
Bin dabei natürlich auf die Nase gefallen, mal hatte die Übertragung geklappt dann wieder nicht.
Meine Lösung war das Einfügen von Delay(1000); // quick and dirty :?
Dann konnte das Spiel genutzt werden.
Gruß
Fiete

_________________
Fietes Gesetz: use your brain (THINK)