Ich implementiere ein Online-Multiplayer-Spiel, bei dem der Client in AS3 (Flash) geschrieben sein muss, um das Spiel in C ++ in Browser und Server einzubetten (ein abstrakter Teil davon ist bereits geschrieben und wird mit anderen Spielen verwendet).
Netzwerkmodelle können sich voneinander unterscheiden, aber derzeit schaue ich auf die Logik des Spiels, die sowohl auf Client- als auch auf Serverteilen ausgeführt wird, aber sie sind in verschiedenen Sprachen geschrieben, obwohl dies nicht das Hauptproblem ist.
Mein vorheriges Spiel (ziemlich großes - wurde mit den Bemühungen von ~ 5 Programmierern in 1,5 Jahren implementiert) wurde hauptsächlich in elektronischen Tabellen als strukturierte Objekte mit implementierter Vererbung "geschrieben" : Es wurde ein eigenständiges Tool geschrieben, das AS3 und C ++ (Sprachen von Plattformen, für die Plattformen erstellt wurden) generierte Das Spiel wurde veröffentlicht) unter Verwendung einer bestimmten elektronischen Tabellendatei (.xls oder .ods). Diese Datei enthielt ~ 50 Tabellen mit jeweils ~ 50 Zeilen und ~ 50 Spalten und wurde hauptsächlich von Spieledesignern geschrieben, die keine Programmiersprachen kennen. Aber dieses Spiel war Einzelspieler.
Nachdem ich ein Problem mit meinem derzeit implementierten MMO gemeldet habe, schaue ich auf eine riesige Pipeline, in der folgende Probleme gelöst werden können:
Beschreibungen der Spielobjekte (welche Raumschiffe im Spiel vorhanden sind, wie viel HP sie haben, wie schnell sie sich bewegen, welchen Schaden sie verursachen ...)
Aktionsbeschreibungen (was Spieler oder NPCs tun können: sich gegenseitig angreifen, Ressourcen sammeln, Strukturen aufbauen, sich bewegen, teleportieren, Zauber wirken) - Aktionen werden über den Server zwischen Clients übertragen
Einflüsse (was passiert, wenn eine bestimmte Aktion auf ein bestimmtes Objekt angewendet wird, z. B. "Schiff A hat Schiff B angegriffen: Feld" HP "von Schiff B um Feld" Schaden "von Schiff A reduziert"
Einflüsse können viel schwieriger sein, ja, ei "Schaden ist doppelt so groß, wenn das Schiff nachts> = 5 Verbündete in einem Bereich von 200 Einheiten um sich hat" und so weiter. Wenn eine solche Logik in ein "Entwurfsdokument" geschrieben werden kann, ist es leicht möglich:
Lassen Sie Designer ihre Arbeit ohne Eingreifen des Programmierers oder fehleranfällige Programmierung erledigen
Überprüfen Sie die beschriebene Logik
Übertragen (transformieren, konvertieren) in eine beliebige Programmiersprache, in der es ausgeführt wird
Hat jemand an so etwas gearbeitet? Gibt es einige Werkzeuge / Motoren / Pipelines, die sich damit befassen? Wie gehe ich am besten gleichzeitig mit all diesen Problemen um oder stelle ich mir meine Aufgaben und Probleme richtig vor?
quelle
Hier einige Details zu den Gründen für Kylotans Antwort .
Problem Dekonstruktion
Das "Designdokument", an dem Ihre Designer arbeiten, ist effektiv eine Programmiersprache auf hoher Ebene. Sie haben eine High-Level-API (Ihren XLS / ODS-Loader), in die sie ihren "Code" schreiben.
Sie wollen ausdrücken ...
range = 200
), die bedingt sein können (z. B.damage = 2*normalDamage
während der Nacht)... in irgendeinem Format.
Die Fragen verdichteten sich: Wie sollte dieses Format sein? Wie kann ich es in einer Pipeline zum Laufen bringen?
Antworten
Dafür sind Skriptsprachen gedacht.
Warum? Sie können Eigenschaften in einer Tabelle ausdrücken , aber Sie können kein Verhalten ohne Programmierung ausdrücken .
Warum nicht einfach eine komplexere API schreiben? Stellen Sie sich vor, Sie hätten Folgendes getan: Sie würden die API erweitern, damit Designer bedingte Anweisungen schreiben können. Dann vielleicht Event Callback Funktionen. Und dann würden Sie feststellen, dass Sie eine Skriptsprache implementiert haben.
Glücklicherweise sind Skriptsprachen ( Lua ist sehr beliebt) einfach zu schreiben und leicht mit "schwerem" Code (wie C ++) zu verbinden.
Unter der Annahme von C ++ - Kerncode könnten Sie eine Schnittstelle
game
zur Skriptsprache verfügbar machen und die Skriptsprache für Werte und Verhaltensweisen aus dem Kerncode aufrufen, wann immer Sie diese benötigen.In Lua könnten die obigen Beispiele folgendermaßen ausgedrückt werden:
Ihre Spieledesigner müssten natürlich die Lua-Grundlagen lernen. (Oder von welcher Skriptsprache Sie auch wählen.)
quelle
Sie können sich eathena project ansehen , einen mmorpg-Serverklon. Ich habe damit geübt, weil es eine einfache Skriptsprache zum Entwerfen des gesamten Spiels enthält und Sie kostenlose Tools zum Entwerfen der Szenen finden oder sie einfach selbst erstellen können. Es gibt viele Informationen darüber.
Als ich ein Neuling war, schrieb ich einen Reader für einige dieser Dateien wie .gat, die eine Kachelbeschreibung und dergleichen enthielten. Sie können einen Blick auf die Quellen bei Google Code werfen und Screenshots über Tests der Funktionen bei Picasa sehen
Es gibt vielleicht andere kostenlose Quellen für MMO-Server, aber das ist die, die ich am meisten kenne :). Ich hoffe, es hilft.
quelle
Ich habe in mehreren Spielen mit verschiedenen Teams professionell gearbeitet und ich muss Ihnen sagen, dass Spieledesigner (sie nennen sie hier gerne "Planer") es lieben, Excel zu verwenden, um alle Daten im Spiel zu optimieren. Als Programmierer wären wir Idioten, wenn wir sie nicht benutzen lassen würden.
Mit Excel und einem guten und schnellen Ad-hoc-Excel-zu-Code-Konverter können sie nicht nur ein ihnen bekanntes Tool verwenden, sondern auch Formeln erstellen, Durchschnittswerte, Diagramme überprüfen, Links zu anderen Dateien erstellen usw. Stellen Sie sicher, dass ihre Daten genau so sind, wie sie es möchten.
In der Vergangenheit habe ich beim Erstellen einer neuen Funktion mit optimierbaren Daten ein neues Excel-Buch erstellt. Das erste Blatt enthält die exportierbaren Daten, die eine bestimmte Formatierung haben müssen, damit der Konverter sie eindeutig konvertieren kann. Daher erstelle ich ein Skelett mit einigen Testdaten und erkläre kurz, was geändert werden kann und was nicht. Der Rest der Blätter ist für sie kostenlos.
Der Konverter ist ein einfaches Skript, das in Ruby, Python, C # oder meinem Favoriten erstellt werden kann: VBA. Es nimmt die Daten aus dem exportierbaren Datenblatt und erstellt eine oder mehrere Quelldateien (in C, C ++, Assembly, PHP, SQL, INI oder was auch immer Ihr Spiel versteht), die die erforderlichen Daten als fest codierte Daten und Orte enthalten sie im richtigen Quellordner.
Jedes Mal, wenn eine Änderung vorgenommen wird, führt der Planer den Konverter aus und erstellt das Spiel oder was auch immer sie tun muss (Sie haben einen Ein-Klick-Erstellungsprozess und die Möglichkeit für jedes Teammitglied, eine separate Spielumgebung zu haben, oder?) . Sie kann ihre Änderungen dann sofort auf ihrer Workstation testen, ohne einen Programmierer anrufen zu müssen.
Sobald sie mit ihren Änderungen zufrieden ist, drängt sie sie zur Quellcodeverwaltung, und alle sind glücklich!
Dies ist eine sehr nützliche Methode, mit der Spielplaner Spieldaten ändern können. Da die resultierenden Daten fest codiert sind, können sie in der endgültigen Binärdatei schneller ausgeführt werden.
Selbstverständlich funktioniert dies optimal mit tabellarischen Daten wie Monsterattributen, Zauberparametern, Bühnenkonfiguration und dergleichen. Es ist erwähnenswert, dass Excel-Tabellen besonders nützlich sind, um alle Spieltexte zu speichern, denen jeder danken wird, wenn es Zeit ist, das Spiel in Spanisch, Französisch, Deutsch und 10 andere Sprachen zu übersetzen.
Dies funktioniert jedoch nicht mit skriptfähigen Daten wie Enemy / AI-Verhalten und Menüs. Für diese haben wir in der Vergangenheit eine Reihe grundlegender Bausteine festgelegt (die KI für einen feigen Feind, einen aggressiven Feind, einen Heiler usw.) und sie entweder mit einer anderen Excel-Tabelle versehen lassen oder ihnen grundlegende geben Anweisungen, wie man sie optimiert, um ihre eigenen Zwecke zu erreichen.
Schließlich sehr komplexe Daten, wie die tatsächlichen Ebenen; oder Daten, die tabellarisch sein können, aber nicht einfach zu verstehen sind, indem nur Zahlen angezeigt werden, wie z. B. Positionen von Feinden / Agenten, können weder mit Skripten noch mit Excel-Tabellen erstellt werden. Sie müssen einen kleinen Editor erstellen, der Daten auf leicht verständliche Weise anzeigt und Daten so generiert, dass das Spielprogramm sie verstehen kann. Ich bevorzuge C # mit Windows Forms, da es sehr einfach ist, irgendetwas darin zu machen.
Erwarten oder verlangen Sie nicht, dass Ihre Spiel-Tweaker alles selbst schreiben. Das ist nur, dass du faul bist. Das Schreiben von Programmen, auch wenn Skripte unsere Aufgabe sind, nicht ihre, ist zumindest faul und im schlimmsten Fall gefährlich.
Aber das habe ich jedenfalls erlebt. Abschließend halte ich es für das Beste, mit Ihren Tweakern zu sprechen, sie zu fragen, welche Daten sie optimieren möchten und wie sie sich vorstellen, sie zu optimieren, und eine Lösung zu finden, die so nah wie möglich an den gewünschten ist. Die Spielbalance ist sehr wichtig und wir möchten, dass sie ihre Arbeit so gut wie möglich machen.
Das ist eine der vielen Aufgaben eines Spielprogrammierers.
quelle