Hallo
Ich habe vor ein Spiel zu programmieren.
allgemeine Vorstellung/Hintergrundinformationen:
Ich spreche hierbei von einem Spiel einer etwas größeren Dimension. Also keine App, kein Flash oder anderes Mini-Game.
Es soll sich später mal um ein multiplayerfähiges clientbasiertes Onlinegame handeln.
Ich habe bereits schon 2 kleinere Spiele(2D-Grafik) entwickelt. Und zwar:
ein Kartenspiel (Delphi, keine OOP, naive KI)
und eine abgewandelte Version von Schach. (Java, inkl. OOP, spielbar im Netzwerk/über Internet, intelligente KI)
Jetzt habe ich vor das ganze auf eine neue Stufe zu bringen.
Allgemeine Beschreibung des Spiels: Mehrere Spieler können sich in einer 3D-Welt bewegen und Aktionen durchführen. Also z.B. gegeneinander kämpfen, handeln oder whatever. Vergleichbar sind Spiele wie BF3, GW2 oder ähnliches.
Mir ist natürlich klar, dass ich es nicht schaffen werde so ein komplexes Spiel wie z.B. GW2 komplett alleine zu programmieren.
Ich ziele vor allem darauf ab mir Kenntnisse darüber zu verschaffen, wie ich überhaupt vorgehen müsste, um so ein Ziel zu erreichen, um dann zumindest eine Mini-Version von so einem Spiel zu erstellen. Also ein Spieler kann dann anfangs ruhig als ein Klotz dargestellt werden. Und Kämpfe könnten dann auch erstmal ein simples Schere-Stein-Papier-Match via Chat sein.
Genug Vorspiel^^, hier meine Fragen:
1) Programmiersprachen
2) OOP in Verbindung mit Datenbanken
Ich habe bereits bei Websiten und anderen Spielen gesehen, dass diese über Datenbanken realisiert werden. Also wenn zum Beispiel ein neuer Account angelegt werden soll, dann wird in der SQL-Datenbank ein neuer Eintrag erstellt bei dem dann Dinge, wie Account-Nr, Account-Name, ... eingefügt werden.
Mir ist hierbei insbesondere der Zusammenhang zwischen meinem objekt-orientiert-geschriebenen (C++)-Code und einer entsprechenden Datenbank nicht schlüssig.
Bei meinen bisher entwickelten Spielen habe ich noch keinen Wert darauf gelegt, dass man sein Spiel speichern kann. Im Wesentlichen war es mir wichtig, das ich Spiellogik und Aussehen gestalten konnte. Allerdings ist mir damals schon aufgefallen, dass es bei der Speicherung zu sehr vielen Problematiken kommen kann.
Speziell, das man vergessen könnte Datensätze zu speichern, da man auf Grund der vielen erstellten Objekte durcheinander gekommen sein könnte.
Ich weiß durchaus, dass eine Datenbank an sich nur ein Speicher ist, deren Inhalt ausgelesen und manipuliert werden kann, so wie es einem gerade gefällt und vor allem werden die Änderungen auch direkt gespeichert.
Eine Datenbank ist quasi das, was ich brauche, um effektiv Daten von (mehreren) Spielern live zu bearbeiten - das ist mir bewusst.
Um jetzt auf meine eigentliche Frage zurück zu kommen:
Oder um es anders zu formulieren: Ich kann mir momentan noch nicht genau vorstellen, wie die genaue Referenzierung zwischen einzelnen Objekten und Datenbank-Inhalten gestaltet werden soll.
Also wie läuft das dann ab:
Ich hoffe ich konnte das Problem auf den Punkt bringen
3) Verbindung einer Grafik-Engine mit dem Spiel
Während ich bei 2D-Spielen einfach ein Bild erstellt habe und dies dann ziemlich einfach in meinem Fenster anzeigen lassen konnte, stellen sich mir bei einem 3D-Spiel ganz andere Probleme.
Ich habe vor mein Spiel mit einer Grafik-Engine darstellen zu lassen. Dabei habe ich bisher herausgefunden, dass eine Grafik-Engine im Wesentlichen die Objekte für mich rendert, so dass z.B. Sonneneinstrahlung/ Wind usw. berücksichtigt werden können. Es handelt sich quasi um eine Schnittstelle auf die ich zugreifen kann.
Mein Frage:
4) Netzwerkfähigkeit / allgemeine Spielmodellierung
Im Wesentlichen weiß ich, dass es immer genau einen Host gibt und mehrere Clients.
Der Host besitzt also die Spiellogik und die Datenbank.
Die Clients müssen dann entsprechend der Spiellogik handeln, die vom Host vorgegeben wurde. Die Clients besitzen dann die Datei zum Starten des Spiels, Texturen, 3D-Objekte, Musik usw.
Meine Fragen:
5) Sicherheit, Datenschutz
Ich habe leider viel zu oft erlebt, wie schnell es geht, dass Server abgeschossen werden.
Oder das Leute permanent im Spiel cheaten.
Meine Fragen:
6) Verbindung von Website und Spiel / Realisierung von Registrierungen neuer Accounts
Im Endeffekt soll das Spiel dann später über eine Website erreichbar sein. Ein Account kann dann via der Website erstellt werden und muss dann in der Spieledatenbank auftauchen.
abschließende Bemerkungen:
Danke für das Durchlesen und jede kommende Antwort! Ich bin über jeden Link zu einem entsprechenden Tutorial oder jeglicher helfenden Website dankbar.
Ich hoffe ich konnte meine Probleme auf den Punkt bringen und verständlich darstellen
Liebe Grüße
Ich habe vor ein Spiel zu programmieren.
allgemeine Vorstellung/Hintergrundinformationen:
Ich spreche hierbei von einem Spiel einer etwas größeren Dimension. Also keine App, kein Flash oder anderes Mini-Game.
Es soll sich später mal um ein multiplayerfähiges clientbasiertes Onlinegame handeln.
Ich habe bereits schon 2 kleinere Spiele(2D-Grafik) entwickelt. Und zwar:
ein Kartenspiel (Delphi, keine OOP, naive KI)
und eine abgewandelte Version von Schach. (Java, inkl. OOP, spielbar im Netzwerk/über Internet, intelligente KI)
Jetzt habe ich vor das ganze auf eine neue Stufe zu bringen.
Allgemeine Beschreibung des Spiels: Mehrere Spieler können sich in einer 3D-Welt bewegen und Aktionen durchführen. Also z.B. gegeneinander kämpfen, handeln oder whatever. Vergleichbar sind Spiele wie BF3, GW2 oder ähnliches.
Mir ist natürlich klar, dass ich es nicht schaffen werde so ein komplexes Spiel wie z.B. GW2 komplett alleine zu programmieren.
Ich ziele vor allem darauf ab mir Kenntnisse darüber zu verschaffen, wie ich überhaupt vorgehen müsste, um so ein Ziel zu erreichen, um dann zumindest eine Mini-Version von so einem Spiel zu erstellen. Also ein Spieler kann dann anfangs ruhig als ein Klotz dargestellt werden. Und Kämpfe könnten dann auch erstmal ein simples Schere-Stein-Papier-Match via Chat sein.
Genug Vorspiel^^, hier meine Fragen:
1) Programmiersprachen
- Warum wird z.B. C++ von allen immer als die Sprache angesehen mit der Spiele programmiert werden sollten.
- Inwiefern sollte man wann Java/C#/C/C++ nehmen, um welche Spiele zu erstellen?
2) OOP in Verbindung mit Datenbanken
Ich habe bereits bei Websiten und anderen Spielen gesehen, dass diese über Datenbanken realisiert werden. Also wenn zum Beispiel ein neuer Account angelegt werden soll, dann wird in der SQL-Datenbank ein neuer Eintrag erstellt bei dem dann Dinge, wie Account-Nr, Account-Name, ... eingefügt werden.
Mir ist hierbei insbesondere der Zusammenhang zwischen meinem objekt-orientiert-geschriebenen (C++)-Code und einer entsprechenden Datenbank nicht schlüssig.
Bei meinen bisher entwickelten Spielen habe ich noch keinen Wert darauf gelegt, dass man sein Spiel speichern kann. Im Wesentlichen war es mir wichtig, das ich Spiellogik und Aussehen gestalten konnte. Allerdings ist mir damals schon aufgefallen, dass es bei der Speicherung zu sehr vielen Problematiken kommen kann.
Speziell, das man vergessen könnte Datensätze zu speichern, da man auf Grund der vielen erstellten Objekte durcheinander gekommen sein könnte.
Ich weiß durchaus, dass eine Datenbank an sich nur ein Speicher ist, deren Inhalt ausgelesen und manipuliert werden kann, so wie es einem gerade gefällt und vor allem werden die Änderungen auch direkt gespeichert.
Eine Datenbank ist quasi das, was ich brauche, um effektiv Daten von (mehreren) Spielern live zu bearbeiten - das ist mir bewusst.
Um jetzt auf meine eigentliche Frage zurück zu kommen:
- Wie verbinde ich meinen Code mit einer SQL-Datenbank? (also wie hängt OOP mit Datenbanken zusammen?)
Oder um es anders zu formulieren: Ich kann mir momentan noch nicht genau vorstellen, wie die genaue Referenzierung zwischen einzelnen Objekten und Datenbank-Inhalten gestaltet werden soll.
Also wie läuft das dann ab:
- Designe ich mein Spiel im objekt-orientierten Stil und setze die Werte der Objekte dann immer den Werten aus der Datenbank gleich, um damit effektiv arbeiten zu können?
- Oder lässt man den objekt-orientierten Stil, so wie man ihn ohne Datenbanken kennt einfach komplett fallen und arbeitet nur noch direkt an Datenbanken?
Ich hoffe ich konnte das Problem auf den Punkt bringen
3) Verbindung einer Grafik-Engine mit dem Spiel
Während ich bei 2D-Spielen einfach ein Bild erstellt habe und dies dann ziemlich einfach in meinem Fenster anzeigen lassen konnte, stellen sich mir bei einem 3D-Spiel ganz andere Probleme.
Ich habe vor mein Spiel mit einer Grafik-Engine darstellen zu lassen. Dabei habe ich bisher herausgefunden, dass eine Grafik-Engine im Wesentlichen die Objekte für mich rendert, so dass z.B. Sonneneinstrahlung/ Wind usw. berücksichtigt werden können. Es handelt sich quasi um eine Schnittstelle auf die ich zugreifen kann.
Mein Frage:
- Wie verbinde ich eine Grafik-Engine mit meinem Code?
- Wie kann ich Gegenstände in Bezug auf Gestalt, Position in der Welt via meinem Code verändern?
4) Netzwerkfähigkeit / allgemeine Spielmodellierung
Im Wesentlichen weiß ich, dass es immer genau einen Host gibt und mehrere Clients.
Der Host besitzt also die Spiellogik und die Datenbank.
Die Clients müssen dann entsprechend der Spiellogik handeln, die vom Host vorgegeben wurde. Die Clients besitzen dann die Datei zum Starten des Spiels, Texturen, 3D-Objekte, Musik usw.
Meine Fragen:
- Muss ein Client die komplette Spiellogik enthalten oder enthält er wirklich nur die Startdatei? Wie sieht es dann z.B. bezüglich der Steuerung aus?
- Wie wird so eine Host-Client - Modell erstellt?
- Inwiefern muss ich Ports freigeben und wann?
- Was sollte ein typischer Host/Client alles besitzen?
5) Sicherheit, Datenschutz
Ich habe leider viel zu oft erlebt, wie schnell es geht, dass Server abgeschossen werden.
Oder das Leute permanent im Spiel cheaten.
Meine Fragen:
- Wie schütze ich meinen Server auf dem dann später das Spiel läuft, so dass das Server nicht überlastet wird und dann down geht? (z.B. auf Grund von zu viele Paketversendungen, DOS-Angriffe, Spam-Bots)
- Wie schütze ich mein Spiel vor Einflüssen von Drittprogrammen, wie der Cheat-Engine? ( so dass sich kein Spieler einen Vorteil cheaten kann?)
- Wie schütze ich Login-Daten von Usern, so dass sie nicht von Dritten oder allgemein ausgelesen werden können?
6) Verbindung von Website und Spiel / Realisierung von Registrierungen neuer Accounts
Im Endeffekt soll das Spiel dann später über eine Website erreichbar sein. Ein Account kann dann via der Website erstellt werden und muss dann in der Spieledatenbank auftauchen.
- Werden solche Registrierungen dann über 2 Datenbanken gehandlet, also eine für die Website und den Website-Bereich und dann eine weitere separate Datenbank für das Spiel?
- Oder existiert nur eine einzige Datenbank, die dann Website und Spiel vereint?
abschließende Bemerkungen:
Danke für das Durchlesen und jede kommende Antwort! Ich bin über jeden Link zu einem entsprechenden Tutorial oder jeglicher helfenden Website dankbar.
Ich hoffe ich konnte meine Probleme auf den Punkt bringen und verständlich darstellen
Liebe Grüße