2 beinahe gleiche Klassen, wie umsetzen?



  • Hallo Zusammen,

    Ich habe folgende Frage:

    Nehmen wir an ich möchte folgende Objekte erstellen:

    Mann
    int Alter
    int Leben
    int Geld
    int Unterschied
    int Unterschied 2

    Frau
    int Alter
    int Leben
    int Geld
    int Unterschied 3

    wie soll ich diese als Klassen darstellen?

    Gruss,

    TMeier



  • Als weiteres Beispiel:

    class Item

    Objekte:
    Messer (Waffe)
    int Dmg
    int Preis

    Helm (Rüstung)
    int Rüstungswert
    int Preis



  • Worum genau handelt es sich bei den Unterschieden? Wieso genau muss Preis Member von Waffe sein? Sollte der Preis nicht vielleicht eher im Shop gespeichert sein, der die Waffe Verkauft?



  • dot schrieb:

    Worum genau handelt es sich bei den Unterschieden? Wieso genau muss Preis Member von Waffe sein? Sollte der Preis nicht vielleicht eher Member des Shop sein, der die Waffe Verkauft?

    Ja das wäre noch besser.

    Mein Ziel ist es ein kleines RPG zu erstellen, welches ich dann weiter ausbauen will.

    Am Anfang möchte ich nur mal:

    Charakter, Monster
    - Waffen
    - Rüstungen
    - Tränke

    Kampffunktion mit würfeln 😃

    Das system weis ich bereits.



  • TMeier schrieb:

    Nehmen wir an ich möchte folgende Objekte erstellen:

    Mann
    int Alter
    int Leben
    int Geld
    int Unterschied
    int Unterschied 2

    Frau
    int Alter
    int Leben
    int Geld
    int Unterschied 3

    Also wenn Mann und Frau dieselben Eigenschaften haben, dann mach eine Klasse "Person" und mti den Eigenschaften Alter,Leben,Geld,... Haben sie jedoch mehrere Unterschiedliche Eigenschaften, dann mach eine abstrakte Basisklasse "Person", in der du die Gemeinsamkeiten unterbringst. Dann leite jeweils "Mann" und "Frau" ab und werde konkreter.



  • Hier trifft sichs gut, eine gemeinsame Basiklasse Human
    zu machen.

    class Human{
    int alter;
    int leben;
    int geld;
    }
    

    und dann von diese ableiten.



  • Klingt bis jetzt gut 🙂

    Ich habe schnell eine Frage, für mich sind Klassen realtiv neu, daher frage ich mich nun wie ich am besten herausfinde wie ich was aufbauen soll.

    Für ein RPG brauche ich ja eine Welt, die stellt den Körper dar.
    Im Körper habe ich dan den Kopf (Klasse Monster mit objekten Charakter, NPC),
    den Hals (die Items mit objekten Waffen, Rüstungen, usw.), usw...

    Ist das dann so aufgebaut?

    Gruess,

    TMeier



  • So:

    class Mann
    {
        int alter, leben, geld;
        int unterschied, unterschied2;
    };
    class Frau
    {
        int alter, leben, geld;
        int unterschied3;
    };
    

    oder so:

    class Person
    {
    protected:
        virtual ~Person()=0;
        int alter, leben, geld;
    };
    class Mann : public Person
    {
        int unterschied, unterschied2;
    };
    class Frau : public Person
    {
        int unterschied3;
    };
    

    oder so:

    struct PersonenDaten
    {
        int alter, leben, geld;
    };
    class Mann
    {
        PersonenDaten data;
        int unterschied, unterschied2;
    };
    class Frau
    {
        PersonenDaten data;
        int unterschied3;
    };
    

    oder so:

    class Person
    {
        enum Gender { maennlich, weiblich };
        Gender gender;
        int alter, leben, geld;
        int unterschied, unterschied2; // unterschied -> unterschied3 wenn gender == weiblich
    };
    

    was da das 'beste' oder besser das geeignetste für Deine Applikation ist, hängt davon ab, was Du mit den Objekten in Deinem Programm vorhast. Wie - in welcher Weise sollen sie von wem benutzt werden? Inklusive Datenhaltung - also wie werden sie abgespeichert? Wie funktioniert der Zugriff?



  • Werner_logoff schrieb:

    So:

    class Mann
    {
        int alter, leben, geld;
        int unterschied, unterschied2;
    };
    class Frau
    {
        int alter, leben, geld;
        int unterschied3;
    };
    

    oder so:

    class Person
    {
    protected:
        virtual ~Person()=0;
        int alter, leben, geld;
    };
    class Mann : public Person
    {
        int unterschied, unterschied2;
    };
    class Frau : public Person
    {
        int unterschied3;
    };
    

    oder so:

    struct PersonenDaten
    {
        int alter, leben, geld;
    };
    class Mann
    {
        PersonenDaten data;
        int unterschied, unterschied2;
    };
    class Frau
    {
        PersonenDaten data;
        int unterschied3;
    };
    

    oder so:

    class Person
    {
        enum Gender { maennlich, weiblich };
        Gender gender;
        int alter, leben, geld;
        int unterschied, unterschied2; // unterschied -> unterschied3 wenn gender == weiblich
    };
    

    was da das 'beste' oder besser das geeignetste für Deine Applikation ist, hängt davon ab, was Du mit den Objekten in Deinem Programm vorhast. Wie - in welcher Weise sollen sie von wem benutzt werden? Inklusive Datenhaltung - also wie werden sie abgespeichert? Wie funktioniert der Zugriff?

    Erst Mal: WOW o.O *__*

    Das hilft mir schon viel, muss nur noch die Variante 2 und 4 verstehen 😃

    Die Klassen wie verwenden?
    Hmmm ich weiss nicht ob ich das richtig verstehe, aber ich möchte am Schluss einen Charakter erstellen welcher dann per Entscheidungen durch die Welt geht udn auf Monster udn Rätsel trifft.

    Gruss,

    TMeier



  • Stimmt das so?

    class monster 
    { 
    public: 
        virtual ~monster()=0; 
        int Leben, Mana, Geld, EXP, Level, WaffeAngriff, WaffeVerteidigung, WaffeSchaden, RuestungsWert; 
    	string WaffeName;
    }; 
    
    class Charakter : public monster 
    { 
        int HelmWert, BrustWert, HandWert, ArmWert, HoseWert, GurtWert, SchuheWert, Schildwert; 
    	string HelmName, BrustName, HandName, ArmName, HoseName, GurtName, SchuheName, SchildName;
    };
    


  • TMeier schrieb:

    Hmmm ich weiss nicht ob ich das richtig verstehe, aber ich möchte am Schluss einen Charakter erstellen welcher dann per Entscheidungen durch die Welt geht udn auf Monster udn Rätsel trifft.

    Meinst du nicht, dass dich dein Projekt ein ganz klein wenig überfordert? Wenn du dir bei den von Werner genannten Beispielen schon schwer tust, gehen deine C++-Grundlagenkenntnisse praktisch gegen Null. Die besten Chancen solch ein Projekt umzusetzen, hast du, wenn du dir ein ordentliches Grundlagenbuch zur Hand nimmst und dein Vorhaben um um einige Monate verschiebst ;).



  • TMeier schrieb:

    Stimmt das so?

    class monster 
    { 
    public: 
        virtual ~monster()=0; 
        int Leben, Mana, Geld, EXP, Level, WaffeAngriff, WaffeVerteidigung, WaffeSchaden, RuestungsWert; 
    	string WaffeName;
    }; 
    
    class Charakter : public monster 
    { 
        int HelmWert, BrustWert, HandWert, ArmWert, HoseWert, GurtWert, SchuheWert, Schildwert; 
    	string HelmName, BrustName, HandName, ArmName, HoseName, GurtName, SchuheName, SchildName;
    };
    

    Danach möchte ich im Main den Charakter erstellen sprich mit:

    charakter Ich("Name",Leben,Mana,Geld,EXP,Level.....);
    Oder gibt es da eine bessere möglichkeit?

    Gruss,

    TMeier



  • out schrieb:

    TMeier schrieb:

    Hmmm ich weiss nicht ob ich das richtig verstehe, aber ich möchte am Schluss einen Charakter erstellen welcher dann per Entscheidungen durch die Welt geht udn auf Monster udn Rätsel trifft.

    Meinst du nicht, dass dich dein Projekt ein ganz klein wenig überfordert? Wenn du dir bei den von Werner genannten Beispielen schon schwer tust, gehen deine C++-Grundlagenkenntnisse praktisch gegen Null. Die besten Chancen solch ein Projekt umzusetzen, hast du, wenn du dir ein ordentliches Grundlagenbuch zur Hand nimmst und dein Vorhaben um um einige Monate verschiebst ;).

    Die Basics verstehe ich schon, nur war mir der Virtual nicht bekannt^^

    Ich tu mich ein wenig schwer mit Objekten und Klassen.

    Gruss,

    TMeier



  • Mach doch erst mal ein Konzept, daraus ergibt sich schon recht viel. Zum Beispiel was man wie verknüpfen könnte. Dann modellierst du daraus ein grobes OOP-Design und die Algorithmen die du eventuell brauchst. Programmiert wird meist erst ganz zum Schluss, wenn du weißt was du alles brauchst und wie es unfair zusammenhängen soll. Vergiss die Fehlerbehandlung nicht, die meiste Zeit programmiert man nicht, sondern sucht Fehler. Jedenfalls geht es mir immer so.

    Wenn dir Klassen neu sind, lerne erst mal das und dann noch ein paar Design-Pattern, OOP-Allgemein und die Grundlagen der Sprache natürlich in der du programmieren willst.

    Meist vergeht schon ein Jahr oder mehr bis man anfangen kann ganz kleine Spielchen zu schreiben. Wenn du dir die Zeit zum Lernen nicht nimmst, bist du schnell frustriert, weil du an jeder Kleinigkeit scheiterst und fragen musst.



  • TMeier schrieb:

    out schrieb:

    TMeier schrieb:

    Hmmm ich weiss nicht ob ich das richtig verstehe, aber ich möchte am Schluss einen Charakter erstellen welcher dann per Entscheidungen durch die Welt geht udn auf Monster udn Rätsel trifft.

    Meinst du nicht, dass dich dein Projekt ein ganz klein wenig überfordert? Wenn du dir bei den von Werner genannten Beispielen schon schwer tust, gehen deine C++-Grundlagenkenntnisse praktisch gegen Null. Die besten Chancen solch ein Projekt umzusetzen, hast du, wenn du dir ein ordentliches Grundlagenbuch zur Hand nimmst und dein Vorhaben um um einige Monate verschiebst ;).

    Die Basics verstehe ich schon, nur war mir der Virtual nicht bekannt^^

    Ich tu mich ein wenig schwer mit Objekten und Klassen.

    Gruss,

    TMeier

    Also was ich verstehe:
    was Methoden und Eigenschaften sind.
    Die Wörter public, privat...

    Nur mit der Aufteilung und wie Klassen sinnvoll sind versteh ich noch nciht ganz.
    Also sprich die EInteilung und den Zugriff.

    Wenn ich die Klasse Waffe:Item habe wie kann ich dann die Waffe dem Charakter geben das verstehe ich nicht.

    Gruss,

    TMeier



  • Butterbrot schrieb:

    Mach doch erst mal ein Konzept, daraus ergibt sich schon recht viel. Zum Beispiel was man wie verknüpfen könnte. Dann modellierst du daraus ein grobes OOP-Design und die Algorithmen die du eventuell brauchst. Programmiert wird meist erst ganz zum Schluss, wenn du weißt was du alles brauchst und wie es unfair zusammenhängen soll. Vergiss die Fehlerbehandlung nicht, die meiste Zeit programmiert man nicht, sondern sucht Fehler. Jedenfalls geht es mir immer so.

    Wenn dir Klassen neu sind, lerne erst mal das und dann noch ein paar Design-Pattern, OOP-Allgemein und die Grundlagen der Sprache natürlich in der du programmieren willst.

    Meist vergeht schon ein Jahr oder mehr bis man anfangen kann ganz kleine Spielchen zu schreiben. Wenn du dir die Zeit zum Lernen nicht nimmst, bist du schnell frustriert, weil du an jeder Kleinigkeit scheiterst und fragen musst.

    Danke, bin bereits daran hab ein kleines Grob konzept aber wie oben gesagt das geben einer Waffe zum Beispiel verstehe ich nicht und wie ich ein Inventar erstellen soll.

    Also wenn ich eine Kampffunktion habe wie kriege ich das Monster und den Charakter da rein?
    Wie gebe ich ihm beim Sieg die EXP und Loot?

    Da komme ich nicht weiter^^

    Gruss,

    TMeier



  • Keine Ahnung, legt dir ne Instanz/en von deinem Char und den Monstern an, übergibt sie deiner Kampffunktion und verändere nach deinem ausgedachten Algo die Werte und zeige diese dann an oder so.

    Es gibt da bestimmt 1000 oder mehr Möglichkeiten, nimmt erst mal eine und guck ob du damit zurecht kommst. Das beste Design für dein Spiel wird dir hier niemand liefern können.

    EDIT: Schau dir vielleicht mal die Themen vom GameDesign an. Es reicht ja schon das Inhaltsverzeichnis von einem Buch aus dem Bereich mal zu lesen und dann nach den Themen zu googeln. Is ne Menge Holz, wenn man es "richtig" machen will: http://www.amazon.de/Die-Kunst-Game-Designs-Professional/dp/3826691881/ref=sr_1_1?ie=UTF8&qid=1349772140&sr=8-1



  • Butterbrot schrieb:

    Keine Ahnung, legt dir ne Instanz/en von deinem Char und den Monstern an, übergibt sie deiner Kampffunktion und verändere nach deinem ausgedachten Algo die Werte und zeige diese dann an oder so.

    Es gibt da bestimmt 1000 oder mehr Möglichkeiten, nimmt erst mal eine und guck ob du damit zurecht kommst. Das beste Design für dein Spiel wird dir hier niemand liefern können.

    Vielen Dank 🙂

    Ich denke ich werde das jetzt mal versuchen.
    Ich denke ein Inventar wäre am besten in einem externen Textfile anzulegen?
    Oder in einem Array?

    Textfile:
    Name Angriff Verteidigung Rüstungswert Preis
    Schwert 12 13 0 100
    Fackel 0 0 0 8
    Schild 0 8 10 50

    Oder Array genau so anlegen und dann parsen?

    Gruss,

    TMeier



  • Butterbrot schrieb:

    EDIT: Schau dir vielleicht mal die Themen vom GameDesign an. Es reicht ja schon das Inhaltsverzeichnis von einem Buch aus dem Bereich mal zu lesen und dann nach den Themen zu googeln. Is ne Menge Holz, wenn man es "richtig" machen will: http://www.amazon.de/Die-Kunst-Game-Designs-Professional/dp/3826691881/ref=sr_1_1?ie=UTF8&qid=1349772140&sr=8-1

    Habe 3 C++ Bücher eins ist mist (dieser verhasste Typ da xD)
    Die anderen 2 hab ich nur angeschnitten.

    Was ich gerne machen würde wäre folgendes:

    Ich möchte ein öffentliches Projekt machen (Das RPG) und da zur gleichen Zeit meine anderen 2 Bücher versuchen anzuwenden und dann sozusagen gemeinsam mit anderen mich austauschen.

    Ich würde dann, da jede Woche was reinschreiben und auch Nachfragen.

    Ich denke dann könnten andere gleich mit lernen.
    Ich könnte auch jeweils kleine erklärungen reinschreiben warum ich das so mache und dann mich verbessern lassen sofern ich etwas falsch verstanden habe.

    Wie wäre das?

    Gruss,

    TMeier



  • Wenn du die Sachen persistent speichern möchtest, dann ist eine Textdatei eine Möglichkeit. Auch hier gibt es wieder 1000 Möglichkeiten(Textdatei, binär, verschlüsselt, Datenbank etc.), du verstehst?^^ Wenn du die Daten nur zur Laufzeit ablegen willst, dann lassen die Daten in deiner Inventar-Klasse. Dort kannst du dann mit dem C++ Containern deiner Wahl die einzelnen Items(meist auch Instanzen von Klassen) ablegen. Auch hier wieder 1000 Möglichkeiten^^

    Das frustrierende für dich ist im Moment was ganz menschliches. Der Mensch ist im allgemeinen unglücklicher je mehr Auswahl er hat. Deswegen kommen wir am besten zurecht, wenn wir mit unseren Ressourcen haushalten müssen. Dadurch entstehen sehr oft Innovationen.

    Wenn du dann schon eine Weile entwickelst, wirst du nach deinen Vorlieben vielleicht nur noch 10 Möglichkeiten oft nutzen und allein dadurch sinkt die Frustration.


Log in to reply