Paar Anfängerfragen



  • Hallo ich wollt ein kleines Spiel Programmieren und brauch da Hilfe. Es handelt sich um ein Text Only RPG, was ich just for Fun als Hobby plane. Bei folgenden Sachen bräuchte ich Hilfe. Ich arbeitete mit Microsoft Visual C++ 2010.

    1. Wie baut man eine Speicherfunktion ein. Zwar ist mein Spiel alles andere als fertig aber ich frage jetzt schon mal. Sollte ich da beim programmieren irgendwas beachten, nicht dass ich später alles ändern muss. Das Spiel wird sehr lange dauern, Monster kloppen, exp bekommen, items sammeln etc.

    2. Ich habe eine Main.cpp in der der Großteil der Befehle steht, sprich wohin man geht etc. diese wird aber langsam unübersichtlich. Sprich ich würde gerne Dialoge/randomabfragen oder Sachen die viel Platz wegnehmen irgendwo anders speichern, aber wie mache ich das?.

    Das wäre erstmal das was mir Sorgen bereitet.


  • Mod

    Das sind aber ziemlich allgemeine Fragen, wie soll man da drauf groß antworten, außer mit Allgemeinfloskeln?

    1. Wie baut man eine Speicherfunktion ein. Zwar ist mein Spiel alles andere als fertig aber ich frage jetzt schon mal. Sollte ich da beim programmieren irgendwas beachten, nicht dass ich später alles ändern muss. Das Spiel wird sehr lange dauern, Monster kloppen, exp bekommen, items sammeln etc.

    Du musst nichts speziell beachten, was du nicht auch sonst schon (hoffentlich) so machen würdest. Dein Spiel hat ja irgendeinen internen Zustand. Den schreibst du raus. Und liest ihn bei Bedarf wieder ein. Denk auch Teile des Programmzustands, die möglicherweise versteckt sind, wie der Zustand eines PRNG (wobei es jeweils ein sehr unterschiedliches Spielgefühl ergibt, wenn man den PRNG mit abspeichert oder eben nicht).
    Die Einlesefunktion muss auch dran denken, dass Größen, die sich aus dem internen Zustand ergeben, aber nicht unbedingt mit gespeichert werden, korrekt gesetzt werden. Idealerweise sind deine Objekte aber schon von vornherein so gestaltet, dass es überhaupt nicht zu Inkonsistenzen kommen kann.

    1. Ich habe eine Main.cpp in der der Großteil der Befehle steht, sprich wohin man geht etc. diese wird aber langsam unübersichtlich. Sprich ich würde gerne Dialoge/randomabfragen oder Sachen die viel Platz wegnehmen irgendwo anders speichern, aber wie mache ich das?.

    Zwei wichtige Techniken: Allgemein wirst du den Quellcode von einem großen Programm auf mehrere Übersetzungseinheiten verteilen wollen. Meistens macht man eine Quelldatei pro Klasse.
    Dialoge & Co. haben gar nichts im Programm selber verloren. Das gehört in Datendateien. Dein Programm sollte aus möglichst universelle Funktionen bestehen, die diese Daten verarbeiten und damit dann die Dialoge erzeugen. Eine Dialogengine also. Das macht den Quellcode wesentlich kürzer, macht dir weniger Arbeit und macht dich zu einem besseren Programmierer. Das ist eine absolut grundlegende Technik bei der Spieleprogrammierung und bei vielen anderen Programmen auch.



    1. Um zu speichern musst du alle nötigen Werte die für den Spielfluss entscheidend sind abspeichern. Je nachdem wie dein Spiel aufgebaut ist kann das einfacher oder komplizierter sein.

    Der Einfachheit halber würde ich speichern erstmal nur an bestimmten Orten zulassen.
    Wenn du z.B. eine Spielerklasse hast die HP,XP,Items und Stärke beinhaltet musst du auch alle diese Werte abspeichern. Danach natürlich sämtliche Gegner die wichtig sind, wenn du zB einen Boss besiegt hast musst du speichern dass er schon tot ist, bei zufällig auftauchenden Gegnern musst du nichts speichern.

    Und natürlich musst die die Position in der Story abspeichern. Das kommt aber drauf an wie du die Story implementiert hast.
    Bei meinem einem Projekt (allerdings nicht objektorientiert) hatte ich die Story in einzelne Teile unterteilt. Jeder Teil hatte eine ID zugeordnet, und je nach Einscheidung des Spielers wurde dann eine ID für den nächsten Story Teil zurückgegeben. Zu jeder ID gabs dann eine Funktion die ausgeführt wird und dann somit die Story durchspielt. Bei diesem Ansatz muss man nur die ID des nächsten Teils speichern, allerdings kann man dann auch nur zwischen zwei Teilen speichern, aber nicht mittendrin. 😉

    Alternativ kannst du natürlich auch eine eigene kleine Scriptengine aufbauen und dann jedesmal den ganzen State sichern, da gibts viele Ansätze 😃

    2)Du könntest eine eigene kleine Scriptsprache aufbauen. Das muss ja nichts großartig komplexes sein, sondern nur ein simples Textformat das dann von deinem Spiel interpretiert wird. Beispiel:

    Spieler: Hallo.
    Wächter: Stop.
    Wächter: Kein Zutritt.
    option
    -Gehen
    Spieler: Na gut, dann gehe ich wieder.
    -Eintritt verlangen
    Spieler: Aber ich bin {Spielername}
    Wächter: Das interessiert mich nicht.
    Wächer: Ich habe Befehl keinen einzulassen!
    option end

    Alternativ auch ein XML Format oder was bereits existierendes.

    Oder du baust das ganze in C++ ein, aber bitte nicht alles in einem einzelnen File. Wobei ich diesen Ansatz nicht empfehlen würde.



  • ok und wie genau mache ich das.

    Also Klassen habe ich glaube ich soweit einigermaßen verstanden. Ich habe bisher die Klassen Helden und Monster, wobei ich die beiden auch in einer Klasse hätte packen können, naja egal.

    Ich erzähl mal was ich gemacht habe. Ich habe unter Quelldateien eine neue cpp Datei namens texte.ccp erstellt.

    hab dann in meiner main ganz oben #include"texte.cpp" geschrieben und später in der Main ambient_dialog(1);

    in texte.cpp
    ambient_dialog(int number){
    if number = 1 blablabla
    if number = 2 mehr bla bla
    etc.

    }

    Aber irgendwie klappte das nicht.

    Habs dann hinbekommen indem ich die Klasse Texte erstellt habe.
    texte ambient;
    ambient.playdialog(1);

    Aber müsste das nicht auch ohne Klassen gehen.

    Und ja ich habe noch nicht so große Erfahrungen, ich gehöre auch leider zu den Leuten die sich ein Tutorial anschauen, es nicht verstehen und versuchen irgendwie nachzumachen.



  • Wie gesagt: Dialoge auslagern in Daten-Dateien. Dann kann man für dein Spiel scripten ohne es neukompilieren zu müssen. 😉



  • wäre trotzdem nett wenn mir das einer irgendwie erklären könnte wie das geht.

    Mit Dialoge auslagern in Daten-Dateien kann ich persönlich (noch) nichts anfangen. Beispiel wäre ganz toll. Was ich gemacht habe, habe ich ja gepostet.

    Außerdem ne weitere Frage.
    Wie kann ich Variablen in mehrere "Fenster" also main.cpp Monster.cpp Monster.h haben. Sprich ich möchte int storyverlauf=0; sowohl in der Main als auch woanders ändern.



  • Du kannst die Variable den Funktionen/Klassen als Referenz übergeben.

    Die andere Möglichkeit wäre sie global zu machen, das erwähne ich aber nur der Vollständigkeit halber, da globale Variablen schlechter Stil sind.


Log in to reply