Ich bin ungefähr tausend Codezeilen lang, um mein eigenes 2D-Weltraumspiel zu entwickeln, das Netzwerke zufällig generierter Sternensysteme erstellt und sie mit einer zufälligen Auswahl von Planeten, Stationen, Schiffen und Waffen bevölkert.
Es wird möglicherweise Hunderte von verschiedenen Stationen / Schiffen / usw. geben, die das Spiel verwenden muss - also hier ist, was ich mich gefragt habe. Sollte ich die Zeit aufwenden, um einen "softcoded" -Datenlader zu erstellen, der alle diese Informationen in (zum Beispiel) XML-Dateien speichert und daher später etwas einfacher zu ändern ist, oder sollte ich einfach mit dem arbeiten, was ich habe mache gerade jetzt - Hardcodierung aller Objekte in die Hauptmaschine des Spiels.
Ich bin die einzige Person im Projekt, und wie gesagt, es ist nur ein Hobby, das ich in meiner Freizeit außerhalb der Universität mache. Aber würde die Community empfehlen, in die Schaffung eines zusätzlichen Systems zur Speicherung von Daten in zusätzlichen Dateien zu investieren?
Was sind die Vorteile einer solchen Softcodierung von Daten gegenüber einer einfachen Hardcodierung über Konstruktoren? Gibt es einen langfristigen Vorteil, wenn externe Dateien geändert werden können? Wenn ich nicht nach Mods für das Spiel suche, sind externe Dateien erforderlich? Wenn es nur eine Hobby-Sache ist, auf die ich in ein paar Wochen oder Monaten verzichten könnte, sollte ich dann Zeit damit verschwenden?
quelle
Antworten:
Ja. Sie sollten ein System implementieren, um Inhalte außerhalb Ihres Hauptmoduls zu laden.
Überschriften für prägnante Antworten.
Nein, es verbraucht nicht zu viel Zeit.
Ich denke, die Frage, ob es sich um eine gültige Zuteilung Ihrer begrenzten Zeit handelt, ist umstritten. schon allein deshalb, weil es nur ein kleiner Teil der gesamten Projektzeit sein wird.
Sie werden Hunderte (Tausende) Stunden für ein abgeschlossenes Spielprojekt aufwenden. Vielleicht nicht auf einem Pong-Klon, aber sicherlich für Ihr komplexes Weltraumspiel. Vergleichen Sie das mit einem Konfigurationsdatei-Reader. Das Implementieren eines Systems, um XML in den Hauptkonstruktor zu leiten und anschließend den Spielprozess neu zu starten, dauert möglicherweise 10 oder 20 Stunden. Selbst wenn Sie 50 oder 100 benötigen, ist dies ein winziger Bruchteil der gesamten Projektzeit.
Das spart Zeit
Es ist kein Zeitaufwand; Es ist eine Zeitinvestition. Und es wird sich auszahlen.
Workflow ist wichtig, und ein Konfigurationsladeprogramm verbessert Ihren Workflow. Indem Sie ein System erstellen, mit dem Sie Konfigurationen im Handumdrehen bearbeiten können, sparen Sie unzählige Neuerstellungen. Sie können sich das Spiel ansehen, während es ausgeführt wird, XML optimieren und es in Sekundenschnelle erneut überprüfen. Oder Sie können sich den Code ansehen, eine Codezeile (unter Tausenden) finden, seine Werte äußerst sorgfältig bearbeiten (schließlich befinden Sie sich in Ihrer Haupt-Engine), neu erstellen, ausführen, das Spiel wieder in den Testzustand versetzen und sich anstrengen Erinnern Sie sich daran, wie es vor der Änderung aussah, und prüfen Sie, ob Ihre Änderung den von Ihnen beabsichtigten Effekt hatte. Vorausgesetzt, dass nichts in Ihrem Motor kaputt geht, ist Ihr Zug sicherlich gestört.
Denken Sie aus einer grundlegenderen comp-sci-Perspektive daran, dass der zeitaufwändigste Teil des Schreibens von Software nicht darin besteht, einige zusätzliche Tastenanschläge oder Leerzeichen zu verwenden. Es ist Wanzenjagd. Und wenn Sie etwas mehr Zeit aufwenden, um die Dinge durch das Schreiben von ausführlicherem Code klarer zu machen, sparen Sie sich später viel mehr Zeit. In Ihrem Fall führt das Schreiben eines Inhaltsimporters zu einem saubereren Code, der leichter zu lesen ist. Anstelle von Meilen und Meilen von fest codierten Werten bietet Ihre Quelle ein einfaches Laden von Dateien. Ebenso können Sie die Konfigurationsdatei lesen, ohne durch den Code der Game-Engine zu waten. Beide Teile sind leichter zu warten und zu debuggen.
Ein-Mitglieder-Teams profitieren am meisten
Wenn Sie einen Künstler damit beauftragt hätten, einen Teil dieser Inhalte zu erstellen, müssten Sie Tools erstellen, mit denen sie arbeiten können. Sie müssen Pixelbearbeitungen vornehmen und die Effekte schnell erkennen. Sie würden es nicht wagen, sie zu zwingen, Code neu zu erstellen, um jede Änderung zu sehen. Ihre Zeit ist teuer und Sie möchten sie nicht verschwenden.
Stellen Sie sich nun vor, der Künstler ist sehr ungelernter und langsamer (Programmierer) und hat viele andere Sorgen, weil er auch der Hauptprogrammierer und Musiker ist. Sie wollen diese Zeit definitiv nicht verschwenden, sonst wird das Projekt nie abgeschlossen. Und dieser beschissene Künstler wird die Ausbildung zum besseren Künstler hassen, weil er seine ganze Zeit damit verbringt, Asset-Strings in Code umzubenennen.
Tu dir das nicht an. Stellen Sie die Werkzeuge her, und Sie haben mehr Zeit, um ein Spiel zu machen.
quelle
Dies ist eine gute Frage und die beste Antwort, die ich geben kann, ist, dass nur Erfahrung Ihnen wirklich sagen kann, wann es eine gute Idee ist, den Weg zu beschreiten, der schwieriger / zeitaufwändiger ist. Wenn dir jemand sagt, du solltest es IMMER "richtig" machen, dann sind sie einfach falsch.
Sie verstehen bereits, dass es ein Kompromiss ist. Einerseits ist Hardcoding so verlockend, weil es schnell und einfach zu erlernen ist, aber auf lange Sicht werden das Hinzufügen von Funktionen und das Debuggen zum Albtraum. Auf der anderen Seite erfordert das Schreiben eines großartigen, flexiblen und erweiterbaren Systems eine hohe Anfangsinvestition, erleichtert aber auf lange Sicht das Leben um einiges.
Das Ziel ist es, etwas fertig zu machen, und wenn Sie in der Entwicklung eines großartigen Systems festsitzen, wird das Ziel weiter zurückgehen und Sie verlieren die Motivation. Hardcodierung ist unter bestimmten Umständen in Ordnung, aber Sie müssen die Konsequenzen verstehen, die sich daraus ergeben. Hier sind einige Gründe, warum Hardcoding eine schlechte Idee ist:
Sie denken vielleicht, dass Ihr Projekt klein ist, aber es ist möglich, dass es wächst, wenn Sie weitere Funktionen hinzufügen. Wenn Sie mit der Hardcodierung beginnen, wird es eine Zeit kommen, in der die Energie, die erforderlich ist, um sie zu warten (sie mit neuem Material zu aktualisieren und die Vielzahl unvermeidlicher Fehler zu beheben), die anfänglichen Gewinne ernsthaft zu überwiegen beginnt.
Hardcodierung ist per definitionem projektspezifisch. Für das nächste Projekt müssen Sie wieder von vorne anfangen, möglicherweise müssen Sie die Daten erneut hartcodieren (weil Sie sich damit wohlfühlen werden). Wenn Sie die Zeit in ein anständiges Ladesystem gesteckt hätten, könnten Sie diese Arbeit und die Kopfschmerzen für alle zukünftigen Projekte überspringen.
Im Moment arbeiten Sie vielleicht alleine, aber es kann vorkommen, dass Sie jemand anderen in das Projekt einbeziehen möchten. Wirst du dir die Zeit nehmen, dein widerliches Parochialsystem zu erklären und eine Dokumentation dafür zu schreiben?
Beim Hardcodieren muss man oft wissen, was bestimmte magische Zahlen bedeuten, oder komplizierte Klassenabhängigkeiten. Vielleicht können Sie jetzt alles im Kopf behalten, aber warten Sie, bis Sie eine Weile nicht mehr mit dem Code zu tun haben. Auch mit umfangreichen Kommentaren ist eine schlecht gestaltete Struktur die Hölle, in die man zurückkehren kann.
Ich würde sagen, Sie sollten sich frei fühlen, hartes Code-Zeug nur für die kleinsten Details zu schreiben. Wenn Sie auch nur die geringste Vorstellung davon haben, dass das Element, an dem Sie arbeiten, von jemand anderem verwendet wird, viel größer wird oder in einem anderen Projekt verwendet wird, nehmen Sie sich jetzt die Zeit, es richtig zu machen.
Auf der anderen Seite ist es einfach und schnell, einen Prototyp wie ein Verrückter zu erstellen und bestimmte Dinge hart zu programmieren, sodass Sie sich ganz auf das Experimentieren konzentrieren können. Das hängt von Ihrem Arbeitsstil ab.
quelle
Sie sprechen von datengesteuerter Programmierung .
Bei kleinen Projekten lohnt sich die Investition möglicherweise nicht, da es häufig viel wichtigere Funktionen gibt, die Sie verbessern können.
Eine datengesteuerte Programmierung kann jedoch SEHR einfach implementiert werden. Wenn Sie es ernst meinen, sollten Sie wahrscheinlich XML, JSON oder YAML verwenden, aber Sie können auch reine Textdateien verwenden.
Datengesteuerte Programmierung
Vorteile
Nachteile
quelle