Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Hilfe bei Sockets (https://www.delphipraxis.net/165368-hilfe-bei-sockets.html)

ByTheTime 26. Dez 2011 23:42

Hilfe bei Sockets
 
Hallo,
Ich möchte ein simples Client/Server Spiel entwickeln. Leider habe ich noch ein Paar Probleme.

Spielprinzip:
2 Spieler (Clients) verbinden sich mit einem Server (IP aus Edit-Feld). Sobald der Server 2 Clienten hat, startet er das Spiel (Problem 1). Die beiden Spieler drücken jeweils einen Button. Jeder Buttonklick wird gesendet. Der Server schickt diesen Wert (als Text) rum. Die 2 Clients wandeln ihn in einen Integer um und rechnen ihm auf eine ProgressBar (die eigene ist grün, die des Gegners rot). Wer zuerst die Bar vollhat gewinnt :). Ich habe das so gelöst, das bei OnClientConnect eine Variable vom Typ Integer aufgezählt wird (Startwert 0, bei Connection +1, bei Disconnection -1). Ein Timer überprüft die Variable. Ist sie = 2, dann hält er an und sendet an die Clients einen Countdown:
Delphi-Quellcode:
For I := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
    begin
     with ServerSocket1.Socket.Connections [I] do
      if (Connected) then
       begin
        SendText('Ready?');
        delay(1000);
        SendText('3');
        delay(1000);
        SendText('2');
        delay(1000);
        SendText('1');
        delay(1500);
        SendText('RACE!!!');
       end;
    end;

//Problem 2
Zusammengefasst:
1. Mein Problem 1 ist, das ich, wenn 2 Clients verbunden sind, jede weitere unterbinden muss, wie stelle ich das am besten an? Ich hätte einer eingehenden Verbindung einen SendText geschickt, und der Client ließt denn: if Socket.ReveiceText = 'disconnect please' then blablablablabla
2. Problem 2 sieht man oben (Code). Das ganze funktioniert ja an sich... Jedoch erhält erst Client A das Ganze und dann erst Client B. Wie schicke ich meinen Countdown an beide Clients gleichzeitig?!

Anmerkung: Wenn ihr Ideen habt, die das Spiel verbessern könnten, dürft ihr euch auch gerne äußern (z.B. Serverliste, etc.)

Aphton 27. Dez 2011 02:51

AW: Hilfe bei Sockets
 
#1 Beim OnClientConnect (oder hieß es OnConnect) Ereignis folgendes eintragen
Delphi-Quellcode:
  if ServerSocket1.Socket.ActiveConnections = 2 then
    Socket.Close; // oder ähnlich~
#2 Da sowieso nur 2 Spieler gleichzeitig verbunden sind (sicher), geht folgendes
Delphi-Quellcode:
ServerSocket1.Socket.Connections[0].SendText('Ready?');
ServerSocket1.Socket.Connections[1].SendText('Ready?');
delay(1000);
ServerSocket1.Socket.Connections[0].SendText('3');
ServerSocket1.Socket.Connections[1].SendText('3');
delay(1000);
ServerSocket1.Socket.Connections[0].SendText('2');
ServerSocket1.Socket.Connections[1].SendText('2');
delay(1000);
ServerSocket1.Socket.Connections[0].SendText('1');
ServerSocket1.Socket.Connections[1].SendText('1');
delay(1500);
ServerSocket1.Socket.Connections[0].SendText('RACE!!!');
ServerSocket1.Socket.Connections[1].SendText('RACE!!!');


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz