AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Server/Client Verbindung für ein Spiel

Server/Client Verbindung für ein Spiel

Ein Thema von milos · begonnen am 1. Jul 2014 · letzter Beitrag vom 2. Jul 2014
Antwort Antwort
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
486 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Server/Client Verbindung für ein Spiel

  Alt 1. Jul 2014, 23:59
Hallo,

ich habe mich dazu entschlossen ein Spiel nachzuprogrammieren das recht Simpel ist, aber auch sehr Spass macht.
Das Spiel von dem ich rede nennt sich Curve Fever und es ist ein Multiplayer Spiel das ähnlich aufgebaut ist wie Snake, nur das man einen Strich hinter sich her zieht der nicht weg geht, aber einige Lücken drin hat wo man durchfahren kann. Das Ziel ist als letzter "Wurm" zu überleben.

Das Spiel an sich zu entwickeln ist kein Problem. Das habe ich schon erledigt, allerdings wollte ich das Netzwerkzeugs am schluss machen, da ich es noch nie gemacht habe, also habe ich einfach mal das Spiel gemacht und dann bemerkt dass das alles nicht so wirklich läuft wie ich das wollte da ich Performanceprobleme hatte. Ich habe mich nun dazu entschlossen den Server und den Client zu trennen und den Server für mehrere Räume zu optimieren und nicht nur für eine aktive Spielsitzung.

Was ich mir gedacht habe:
Client-Anwendung:
- eine Lobby in der man den Raum auswählen kann in dem man spielen will oder auch Räume erstellen kann die z.B. mit einem Passwort verschlossen sind.
- Form-Thread: das Spiel welches nur Zeichnet und nur die Bewegung seit dem letzten bekannten Punkt den man vom Server kennt berechnet (Wird später jedoch von den Originalen Serverdaten ersetzt).
- Eigener Thread: Client Verbindung zum Server. Synchronisiert Spieldaten wie Position, Richtung, uws. aller Spieler und Items.

Server-Anwendung:
- Verwaltung von Räumen
- Verwaltung von Verbindungen
- Pro Raum ein Thread: Berechnung der nächsten Positionen mit delta timing und die aktuellen Spieldaten den Spielern verschicken.

Wäre dies so theoretisch möglich?


Ich habe schon ein wenig mit TidTCPClient und TidTCPServer rumgespielt jedoch verstehe ich es nicht wirklich.
Ich kann einen Client erstellen der Connecten, Disconnecten und einen UnicodeString verschicken kann (wäre jedoch nicht so optimal für ein spiel oder?) und einen Server der Verbindungen und Trennungen wahrnimmt und UnicodeStrings empfangen kann im Execute Event. Jedoch habe ich beim Server keine Ahnung von wem die Nachricht kommt, da ich das irgendwie nirgends sehe und ich kann den Clients irgendwie auch keine Nachricht verschicken...

Wie gesagt, ich habe bisher die Indy Komponenten benutzt da ich viel gutes über sie gehört habe, jedoch finde ich nicht wirklich viel über eine einfache Server/Client verbindung mit den Komponenten auf Google.
Ich habe bisher noch nicht viel erfahrung mit TCP/IP und wäre dankbar wenn mir jemand helfen könnte

MfG
Milos
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: Server/Client Verbindung für ein Spiel

  Alt 2. Jul 2014, 02:13
Hast wohl nicht gut genug gegoogelt
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.027 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Server/Client Verbindung für ein Spiel

  Alt 2. Jul 2014, 02:59
Für Spiele würde ich ICS nehmen!

Mavarik
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
2.839 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Server/Client Verbindung für ein Spiel

  Alt 2. Jul 2014, 09:22
Jedoch habe ich beim Server keine Ahnung von wem die Nachricht kommt, da ich das irgendwie nirgends sehe und ich kann den Clients irgendwie auch keine Nachricht verschicken...
Das sind lösbare Probleme

Zuerst muss man sich ein Protokoll ausdenken, das die Nachrichten genau spezifiziert die man über das Netzwerk verschicken will. Zur Identifizierung des Clients kann das Protokoll zum Beispiel erfordern, dass als erstes eine Login-Nachricht gesendet wird.
Diese kann dann zum Beispiel einen Client-Namen enthalten (alle Client-Namen müssen eindeutig sein, bei einem Online Spiel ist das sicher sinnvoll).

Indy erlaubt es einer Connection ein selbstdefiniertes Objekt (ContextClass) zuzuordnen. Dieses wird beim Connect erzeugt und kann dann zum Beispiel eine Property 'UserID' enthalten. Wenn dann im OnExecute die Login-Nachricht eintrifft, kann man der UserID den Wert zuweisen, der in der eingelesenen Nachricht steht. Und damit kann man später beliebige Connections anhand der UserID identifizieren.

Ein Chat-Programm mit Indy wäre schon mal ein guter Enstieg in das Thema. Als nächstes müsste man Chat-Nachrichten dann zur Übertragung der Spieldaten verwenden. Dahinter steckt natürlich einiger Aufwand, wenn man (threadsicher) auf dem Server aus allen einteffenden Nachrichten eine Spielwelt aktualisieren und Daten an die (richtigen) Connections zurücksenden will...
Michael Justin
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf