Was sind die größten Fallstricke bei der Entwicklung eines neuen Spiels?

19

Ich habe vor ein paar Wochen gerade angefangen, ein paar neue webbasierte Spiele für Facebook aufzuspüren (danke David Young für die Nomenklaturkorrektur). Ich arbeite an etwas ähnlichem wie dem rundenbasierten RPG (Vampire Wars). Ich habe die Fähigkeiten, ein Spiel zu programmieren, aber ich bin sehr bemüht, die richtigen Designmuster zu finden und das Produkt an das anzupassen, was ich in meinen Augen sehe.

Normalerweise denke ich beim Erstellen einer Website gerne in Code und finde es schneller, den Code / HTML-Code zu ändern, um ihn zu optimieren. Dies liegt wahrscheinlich daran, dass ich mich in meinen Tätigkeiten SEHR wohl fühle und weiß, was mich erwartet wie ich es immer und immer wieder gemacht habe. An diesem Punkt der Spieleentwicklung beginne ich wieder auf dem Papier (wie früher bei Websites) und frage mich, ob dies nur meine mangelnde Konzentration und Intuition für die Spielelogik ist oder ob dies eine geeignete Möglichkeit ist, meine Gedanken auszudrücken Fortschritt der Codierung.

Ich würde mich über einen Rat freuen, wie ich dieses Problem richtig angehen und mich auf dem Laufenden halten kann. Ich lerne schnell, wie sehr sich eine Game-Engine von einer Standard-Business-Website unterscheidet! Jedes Mal, wenn ich etwas in Ordnung bringe, fühlt es sich nur matschig und unvollständig an und es wird verdammt frustrierend.

Verlängert

Als Beispiel: Die Kampfmaschine, die mir in letzter Zeit so viele Probleme bereitet hat, benötigt eine einfache Angriffsfertigkeit und macht dann einen zufälligen Wurf zwischen -50% und + 50% und multipliziert dann die ursprüngliche Angriffsfertigkeit mit diesem Prozentsatz. Das gleiche gilt für die Verteidigung, und dann greife ich diese ineinander, um festzustellen, ob der Gesundheit des Feindes Schaden zugefügt wird. Ich denke, ich sollte erkennen, dass ich über meinem Kopf bin, als ich mich fragte, ob das überhaupt der richtige Weg ist, oder ob es überhaupt einen „richtigen“ Weg gibt. Ein schwerwiegender Fehler, den ich dabei festgestellt habe, ist, dass zwei Charaktere im gleichen Level mehrere "Würfe" haben können, bei denen der Angriff -50% und die Verteidigung + 50% beträgt, sodass ich EXTREM lange Kampfsequenzen habe, in denen niemand etwas tut. SCHEITERN

Vielleicht hätte mein Beitrag nach vorgeschlagenen Links fragen sollen, die einfache Spielelogik beschreiben.

Erweiterung beenden

Vielen Dank im Voraus!

angryCodeMonkey
quelle
1
Dies ist eine etwas verwandte und interessante Lektüre, die ich als hilfreich empfunden habe
zfedoran

Antworten:

22

Hinzufügen zu vieler Funktionen. Konzentriere dich auf den Kern des Spiels, baue es und füge Features hinzu, wenn alles gut funktioniert. Die Leute konzentrieren sich zu sehr darauf, coole Dinge hinzuzufügen und nie etwas zu tun.

Gespenster
quelle
4
Dies hätte beinahe eines meiner FB-Spiele getötet. Es steckt voller Funktionen, aber das Ganze fühlt sich insgesamt halbherzig an.
Tesserex
Wenn ich mich richtig erinnere, nennt man dieses Phänomen "Feature Creep". Eine gefährliche Falle.
S. Tarık Çetin
14

Dies ist ein großartiger Artikel darüber, wie man ein Spiel prototypisiert. Aus Ihrer Frage geht hervor, dass Sie die Vorstellung, was ein Prototyp sein soll, vermissen.

Prototyping: Sie tun es (wahrscheinlich) falsch

Klappentext:

Fehler Nr. 4: Aufbau eines Systems, kein Spiel
Wenn Sie einen Prototyp erstellen und jemals an etwas arbeiten, das Sie nicht direkt voranbringt, hören Sie sofort damit auf. Als Programmierer tendieren wir dazu, unseren Code zu verallgemeinern, ihn elegant zu gestalten und in der Lage zu sein, mit jeder Situation umzugehen. Wir finden, dass ein Juckreiz schrecklich hart nicht kratzt, aber wir müssen lernen, wie. Es hat viele Jahre gedauert, bis mir klar wurde, dass es nicht um den Code geht, sondern um das Spiel, das Sie am Ende versenden.

Schreiben Sie kein elegantes Spielkomponentensystem, überspringen Sie den Editor vollständig und verdrahten Sie den Status im Code, vermeiden Sie das datengetriebene, selbstanalysierende, verrückte XML und codieren Sie einfach das verdammte Ding.

Bearbeiten:

Ich füge dies nur hinzu, um den Unterschied zwischen Prototype und Tracer Code zu verdeutlichen.

Denken Sie immer daran: Ein Prototyp soll weggeworfen werden! Tracer Code ist nicht.

Die Prototyp-Falle

... Der Tracer-Code-Ansatz spricht ein anderes Problem an. Sie müssen wissen, wie die Anwendung insgesamt zusammen hängt. Sie möchten Ihren Benutzern zeigen, wie die Interaktionen in der Praxis funktionieren, und Sie möchten Ihren Entwicklern ein architektonisches Gerüst geben, an dem Sie Code aufhängen können. In diesem Fall können Sie einen Tracer erstellen, der aus einer einfachen Implementierung des Containerverpackungsalgorithmus (möglicherweise so etwas wie first-come, first-served) und einer einfachen, aber funktionierenden Benutzeroberfläche besteht. Sobald Sie alle Komponenten in der Anwendung zusammengestellt haben, verfügen Sie über ein Framework, mit dem Sie Ihren Benutzern und Entwicklern anzeigen können. Mit der Zeit erweitern Sie dieses Framework um neue Funktionen, indem Sie Routinen mit Stopps ausführen. Das Framework bleibt jedoch intakt, und Sie wissen, dass sich das System weiterhin so verhält, wie es war, als Ihr erster Tracer-Code vervollständigt wurde.

Die Unterscheidung ist wichtig genug, um eine Wiederholung zu rechtfertigen. Beim Prototyping wird Einwegcode generiert. Der Tracer-Code ist schlank, aber vollständig und gehört zum Grundgerüst des endgültigen Systems. Stellen Sie sich Prototyping als Aufklärungs- und Nachrichtensammlung vor, die stattfindet, bevor eine einzelne Leuchtspur abgefeuert wird.

Weitere Informationen zum Tracer-Code-Design von The Pragmatic Programmer

Tracer Bullets und Prototypen

David Young
quelle
Das ist großartig ... Ich werde mir diesen Artikel ansehen müssen. Nur aus dem Auszug, den Sie gepostet haben, klingt es so, als würde ich das Prototyping falsch betrachten, aber es klingt auch so, als wäre es ein häufiger Fehler.
angryCodeMonkey
Der Fehler, den Sie zitiert haben, nervt mich schon eine ganze Weile.
jokoon
4

Fallstricke: Trennen Sie Ihre Logik nicht von Ihren Daten. Wenn Sie nicht testen, ob Ihre Daten die gewünschten Ergebnisse liefern.

Aus Ihrem Kommentar zu Joes Beitrag:

Du willst, dass ich eine Kampfmaschine für Monster-Begegnungen programmiere, BOOM! Ich habe meinen Motor diese Woche mindestens dreimal umgeschrieben und fühle mich nie gut dabei. Ich meine, die Mathematik funktioniert, aber wenn ich es ausprobiere, fühlt es sich einfach wackelig an. Ist das sinnvoll?

Es hört sich so an, als würden Sie den Motor hier mit Daten in Konflikt bringen. Deine Monster-Begegnungsmaschine sollte von Daten gesteuert werden. Wenn die Daten, die sich auf Ihre Spielbalance / Ihren Spielspaß auswirken, falsch sind, sollte es nicht erforderlich sein, Ihre Engine komplett neu zu schreiben. Passen Sie einfach Ihre Balance-Variablen an, bis sie sich richtig anfühlen.

Da Bilanzvariablen manchmal voneinander abhängig sind, kann die Änderung einer Variablen in ein besseres Szenario erhebliche (negative) Auswirkungen auf andere Szenarien haben.

Um zu testen, dass Ihre neu optimierten Daten nicht eine ganze Reihe anderer Fälle durcheinander bringen, sollten Sie ein paar Testfälle aufbewahren und sicherstellen, dass sie nach der Optimierung nicht beschädigt werden. Hier ist ein bekanntermaßen erfundenes Beispiel, wie Sie dies testen würden.

TestResult TestPlayerKillsMonsterDuringAttack(PlayerStats, MonsterStats, seed)
{
   Player player(PlayerStats);
   Monster monster(MonsterStats);

EncounterEngine.SeedRNG(seed);
while(1) { result = EncounterEngine.Attack(player, monster); if (result == PLAYER_DEAD) return TEST_FAIL; if (result == MONSTER_DEAD) return TEST_PASS; // result == MONSTER_DAMAGED, PLAYER_DAMAGED is expected. } }

Z.B. Wenn Sie dies mit PlayerStats.Level == 5 und MonsterStats.Level == 3 aufrufen, würden Sie erwarten, dass der Spieler dieses Monster letztendlich immer besiegt.

jpaver
quelle
Der Rat, den ich hier bekomme, ist großartig, und ich kann sehen, dass ich in vielen Fällen den falschen Ansatz gewählt habe. Der Grund, warum ich den Motor neu geschrieben habe, ist, dass ich denke, dass ich ihn zu kompliziert mache. Meine neueste Version der Battle Engine ist eine Klasse mit (im Moment) einer einzelnen öffentlichen Funktion und mehreren Unterstützungen. Die Hauptfunktion 'Kampf' besteht nicht nur darin, den Grundangriff gegen die Verteidigung zu berechnen, sondern auch den Erstschlag zu bestimmen und die Würfe zu überprüfen, um festzustellen, ob Ihre taktischen Fähigkeiten Ihnen einen Zweitschlag usw. usw. ermöglichen schwierig!
AngryCodeMonkey
Trennen Sie Ihre Logik nicht von Ihren Daten. Das ist ein großartiger Punkt, der fast immer Probleme auf der Straße oder beim Aktualisieren verursachen wird!
Gespenster
2

Die Tücke hier ist meines Erachtens, dass Sie Programmieren und Spieledesign als dieselbe Aufgabe behandeln, obwohl es sich in Wirklichkeit um separate Aufgaben handelt. Wie Sie vermuten, handelt es sich hierbei nicht um ein Programmier- oder Algorithmusproblem (Sie können das Kampfsystem nach Belieben codieren), sondern darum, was Spaß macht und für den Spieler interessant ist.

Die Antwort ist, nach Ressourcen zu Spieldesign und Spielbalance zu suchen. Es gibt tatsächlich Universitäten, die ein ganzes vierjähriges Studienprogramm für die von Ihnen angesprochenen Themen anbieten. Es ist also unmöglich, Ihnen nur eine schnelle und schmutzige Antwort zu geben (so wie Sie wahrscheinlich verblüfft wären, wenn jemand sagte: " Ja, ich habe diese Idee für ein Spiel, aber ich weiß nicht, wie ich es programmieren soll. Worauf sollte ich achten? "). Es gibt Bücher, Kurse und Online-Schriften zum Thema Spieledesign. suche sie aus.

Ian Schreiber
quelle
1

Die größte Gefahr beim Schreiben von Spielen besteht darin, sich darüber Gedanken zu machen, ob Sie die richtigen Entwurfsmuster verwenden, anstatt nur Code zu schreiben, mit dem Sie sich wohl fühlen.

user744
quelle
Das Problem, das ich gerade habe, ist, dass ich mich bei dem Code, den ich schreibe, gut fühle. Sie möchten ein Buchhaltungs-Backend für Ihr Unternehmen, kein Problem ... Sie möchten, dass ich eine Battle Engine für Monster-Begegnungen programmiere, BOOM! Ich habe meinen Motor diese Woche mindestens dreimal umgeschrieben und fühle mich nie gut dabei. Ich meine, die Mathematik funktioniert, aber wenn ich es ausprobiere, fühlt es sich einfach wackelig an. Ist das sinnvoll?
angryCodeMonkey
warum den Motor neu schreiben? Sie könnten spielspezifischen Code in einer Skriptsprache wie lua implementieren. Ändern Sie Variablen oder die Art und Weise, wie die Mathematik berechnet wird, und müssen Sie niemals neu kompilieren, um die Dinge zu überprüfen. gamedev.net/reference/articles/article1932.asp
David Young
1

Ich würde Steve Pavlinas Artikel über Zeitmanagement und Selbstmotivation empfehlen : http://stevepavlina.narod.ru/

Er ist auch Programmierer. Seine Lifestyle-Experimente haben ein gewisses Medieninteresse geweckt.

oben rechts
quelle