Echtzeitstrategie mit Allegro und Multiplayer
-
Hat hier jmnd schon Erfahrungen mit Multiplayerprogrammierung z.b. für Echtzeitstrategie spiele? Habe da ein Projekt laufen und will mich damit ernsthaft auseinandersetzen wie ich einen Multiplayer-modus unter verwendung von allegro realisieren kann.
Meine Fragen:
Welches Protokoll kann ich am besten nutzen? (Vorgesehen UDP)
Dann womit kann ich das am besten umsetzen (WINSOCK | RAKNET | GNE ...)Das Spiel ist in Objective C/C++ programmiert
Einheiten usw. sind Arrays von Strukturen (Statisch)
Ich benutze Bloodshed Dev C++ als IDEHabe keine Erfahrung mit Thread programmierung aba könnte mich da einarbeiten.
Ich habe ne menge zeugs für WINSOCK daher wollt ich mich darauf konzentrieren
habe aber bisher nichts in der art umgesetzt ...
-
NA9x2000 schrieb:
Welches Protokoll kann ich am besten nutzen?
UDP wenn die Geschwindigkeit wichtig ist, nicht aber die Verlässlichkeit.
TCP für das Umgekehrte.
Es kann natürlich auch beides zum Einsatz kommen.NA9x2000 schrieb:
Dann womit kann ich das am besten umsetzen
Raw Winsock, volle Kontrolle.
NA9x2000 schrieb:
Das Spiel ist in Objective C/C++ programmiert
Einheiten usw. sind Arrays von Strukturen (Statisch)
Ich benutze Bloodshed Dev C++ als IDEIch empfehle C++ und Visual Studio. Habe keine Ahnung von ObjC, aber weißt du, was dynamische Speicherallokierung ist?
NA9x2000 schrieb:
Habe keine Erfahrung mit Thread programmierung aba könnte mich da einarbeiten.
Dann setze dir vielleicht erst ein kleineres Ziel, außer du hast die Motivation und Geduld (Ich lerne auch gerne mit komplexeren Projekten, manche können's halt, manche nicht).
Mit mehreren Threads wechselt man ständig zwischen mehreren Programmabläufen hin und her, sie laufen dann _scheinbar_ gleichzeitig.
Du musst dann einfach synchronisieren, wo es nötig ist. Du kannst nämlich nicht bestimmen, wieviel ein Thread abarbeitet, bevor ein anderer dran ist.
Somit könnte es sein, dass Thread 1 in drei Schritten deinem String-Objekt ein Element hinzufügt, aber nur einen Schritt schafft, und dann Thread 2 dasselbe mit demselben Objekt tun will, dies aber schon bei Schritt 1 ist und Thread 2 diesen Schritt 1 wiederholt. Das wäre fatal.
Stichworte critical sections, events, mutexs, semaphores, Interlocked...-Funktionen des WinApi.NA9x2000 schrieb:
Ich habe ne menge zeugs für WINSOCK daher wollt ich mich darauf konzentrieren
habe aber bisher nichts in der art umgesetzt ...Wie meinen?
MfG
-
OK Raw Winsock hört sich sehr gut an ist die frage ob das unabhängig vom visual studio verwendet werden kann und ob und wo die funktionen dafür definiert sind
ja ich verstehe eine ganze menge von dynamischer speicher reservierung und dynamischen listen habe aber die erfahrung gemacht das zb verkettete listen langsamer sind als ein statisches array
meine klassen werden bei laufzeit angelegt und per konstruktor und destruktor zurückgesetzt und funzt einwandfrei die struktur wie die klassen zusammenhängen ist das einzige problem weil ich komplett ohne struktogramme angefangen habe um zeit und arbeit zu sparen aber das funzt auch mit ein paar hässlichen tricks. das werde ich natürlich im verlauf des projektes nach und nach beseitigen. das hat bisher mit klassen gut funktioniert
ich habe einige IDEs (VS ab 5, Borland C++ 5) zur verfügung will mich aber vorerst vom ms c compiler fernhalten - benutze da eher die open source variante gcc.exe
ist die große frage wie ich winsock oder raw winsock benutze und in das projekt einbinde <- das ist erstmal ganz wichtig um zu erkennen wie ichs verwenden kann
würde am liebsten ne klasse draus proggndann wäre ein tipp für ein strukturiertes tut sehr gut also angefangen mit übersicht der funktionen, datentypen und verwendung, aufbau von verbindungen schritt für schritt (und das am besten noch in verbundung mit allegro)
ansonsten wenn sowas nicht verfügbar ist würde ich gerne wissen ob und wie es in kombination mit allegro funktioniert (erfahrungsberichte)
also einfach hinweise und tipps zur benutzung mit allegro, was ich unbedungt beachten sollte und was halt wichtig ist um eine gute performance zu erreichen
zeit spielt erstmal keine rolle bin geduldig und gehe die sache gelassen an. wichtig ist mir dass es einwandfrei funktioniert und versuche möglichst viele fehlerquellen zu berücksichtigen. stabilität ist mir sehr wichtig und versuche auch logische fehler im programm zu vermeiden damit fehler im längeren spielbetrieb aus bleiben da diese schwer zu finden sind.
-
folgendes habe ich bereits festgestellt:
(bitte letzten post berücksichtigen)wenn ich allegro.h und windows.h einbinde gibt es einen konflikt mit der BITMAP struktur
-> evtl. lösung winalleg.h einbinden habs bisher nicht probiert
-> optimale lösung wäre auf windows.h zu verzichten geht das? und wenn nicht auch egal oder?
-> muss ich mit weiteren konflikten rechnen?winsock kann nicht ohne weiteres kompilliert werden keine ahnung welche libs ich brauche und kann ich die statisch einbinden oder brauche ich dlls (mit denen ich keine erfahrung habe weis nur ungefähr wies funzt)
brauche ich für winsock threads oder kann ich das mit timern lösen?
-> eigentlich müsste die übermittlung der befehle reichen da jedes spiel die berechnung und bewegung autonom übernehmen kann die intervalle für die synchronisation müssten nicht so eng hintereinander folgen
-
NA9x2000 schrieb:
OK Raw Winsock hört sich sehr gut an ist die frage ob das unabhängig vom visual studio verwendet werden kann und ob und wo die funktionen dafür definiert sind
Natürlich kannst du das ohne VS benutzen. Weißt du überhaupt, wie man Bibliotheken benutzt?
NA9x2000 schrieb:
ja ich verstehe eine ganze menge von dynamischer speicher reservierung und dynamischen listen habe aber die erfahrung gemacht das zb verkettete listen langsamer sind als ein statisches array
Die Operationen beider Datenstrukturen haben bestimmte Komplexitäten und damit Vor- und Nachteile. Keine der beiden Strukturen ist generell "besser".
NA9x2000 schrieb:
meine klassen werden bei laufzeit angelegt und per konstruktor und destruktor zurückgesetzt
?? Ein Destruktor setzt nichts zurück, sondern räumt Speicher auf, wenn ein Objekt zerstört wird.
NA9x2000 schrieb:
ich habe einige dev (VS ab 5, Borland C++ 5) zur verfügung will mich aber vorerst vom ms c compiler fernhalten - benutze da eher die open source variante gcc.exe
Du willst mit Windows Sockets arbeiten, aber den MS Compiler meiden? Wozu das?
NA9x2000 schrieb:
ist die große frage wie ich winsock oder raw winsock benutze und in das projekt einbinde <- das ist erstmal ganz wichtig um zu erkennen wie ichs verwenden kann
Wie bei allen anderen Gebieten auch: Doku/Tutorials lesen
NA9x2000 schrieb:
würde am liebsten ne klasse draus proggn
NA9x2000 schrieb:
dann wäre ein tipp für ein strukturiertes tut sehr gut also angefangen mit übersicht der funktionen, datentypen und verwendung, aufbau von verbindungen schritt für schritt (und das am besten noch mit allegro)
-
:p rofl ja ist ja gut missverständnisse ... natürlich werden sie nicht nur zurückgesetzt sondern auch freigegeben ...
danke für den link lustigerweise hats schon was gebracht weil ich den ersten treffer bei google schon sehr hilfreich finde THX
manchmal ist das einfachste auch zu schwer
nun gut da hoffentlich das geklärt ist suche ich trotzdem nach etwas erfahrung was winsock in verbindung mit allegro betrifft
ich werde mich damit befassen wäre gut wen jmnd was dazu schreiben könnte
THX
-
WinSock und allegro haben keine Berührungspunkte, also gibt es auch nix was man beachten müsste wenn man beides zusammen verwenden möchte.
Ich würde dir aber eher raten, eine auf Spiele spezialisierte Library wie RakNet zu verwenden. RakNet wird dir, egal ob du dich mit WinSock schon auskennst oder nicht, viel viel Arbeit sparen.
Der einzige Grund direkt WinSock zu verwenden, wäre, wenn du den Umgang mit WinSock lernen willst.
Ansonsten...
ist die große frage wie ich winsock oder raw winsock benutze und in das projekt einbinde
#include <WinSock2.h> #pragma comment(lib, "Ws2_32.lib") // funktioniert mit MSVC, bei GCC wirst du vermutlich in den Projekteinstellungen einen entsprechenden Eintrag machen müssen // WinSock verwenden
EDIT: Wenn du GCC verwendest, kann es sein, dass das Header-File und/oder .lib File anders heissen, da GCC üblicherweise mit dem offiziellen Platform SDK nix anfangen kann.
-
FAT! ok ich habe mir ersteinmal das tut durchgelesen und halte es durchaus für machbar ... (WINSOCK)
da du das thema raknet angesprochen hast würde ich gerne wissen ob du dafür auch n nettes tut hast (kann sein dass ich zu doof bin aber) habe danach schonmal gesucht aber nichts weiteres dazu gefunden
auf jeden fall schonmal ein dickes DANKE für die infos
NFG NA
-
NTFS!
Die RakNet hat eine durchaus gute Doku, die auch ein paar einfache Tutorials enthält. Weiters gibt's ein eigenes Forum auf der Seite des RakNet Entwicklers.
Ich verlinke die mal nicht, denn wenn du die nicht selbst findest, dann ist wirklich alles zu spät.
-
Ok, ich wie man merkt ist RakNet für euch erste Wahl.
Was ist zweite Wahl? Die Lizenz von RakNet ist für mich unbrauchbar.
-
nurf schrieb:
Was ist zweite Wahl? Die Lizenz von RakNet ist für mich unbrauchbar.
Warum? Glaubst du, du kannst mit deinem Spiel Geld machen?