<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Klassen als Variable an andere Klassen übergeben?]]></title><description><![CDATA[<p>Halli Hallo liebe Gemeinde <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ich lerne zurzeit recht fleissig c++ und bin momentan bei dem Thema Klassen.<br />
Um einfach zu üben, schreibe ich (wie so viele <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> ) an einem kleinen Konsolen Rollenspiel.</p>
<p>Soweit funktionieren die ersten Dinge schon ganz gut. Nun möchte ich aber der Klasse &quot;Player&quot; gerne bei den public variablen die Klasse &quot;Weapon&quot; mitgeben.</p>
<p>Also z.b. Wenn man ein Schwert anlegt, dass dann auch bei dem Objekt &quot;Spieler 1&quot; als angelegte Waffe das Objekt &quot;Schwert&quot; vorzufinden ist.</p>
<p>Die Idee hinter dem ganzen ist, dass ich den Schaden wie folgt berechnen möchte:</p>
<p>Beim Angriff soll vom angelegten Waffenobjekt die Funktion Attack(); aufgerufen werden, in welcher ich den schaden der Waffe &quot;auswürfel&quot; und ggf. noch extra effekte hinzufügen kann. (Also Schwerter verursachen schwere Wunden, Äxte haben eine Chance die Rüstung zu verringern, sowas in der Art)</p>
<p>Hier mal ein paar codeschnippsel:</p>
<pre><code class="language-cpp">// Player.h

class Player
{
    private:
    string name;
    int level;
    int hp;
    int maxhp;
    int strength;
    int dexterity;
    int intelligence;
    int wisdom;
    int magic;
    int defense;
    int exp;
    int maxexp;

    public:
    Player();
    ~Player();
    void ShowInfo();
    void SetName(string newname);
    void CheckLevel();
    string GetName();
    int GetHp();
    int GetMaxhp();
    int GetStrength();
    int GetDexterity();
    int GetIntelligence();
    int GetWisdom();
    int GetMagic();
    int GetExp();
    int GetLevel();
    int GetDefense();
    void SetStrenght(int newstr);
    void SetDexterity(int newdex);
    void SetIntelligence(int newint);
    void SetWisdom(int newwis);
    void SetMagic(int newmag);
    void SetDefense(int newdef);
};
</code></pre>
<pre><code class="language-cpp">//Player.cpp (ich weiss, dass noch nicht alle Funktionen eingebaut sind, mache //ich noch, möchte aber zuerst das Waffenproblem lösen ;) )

#include &quot;Library.h&quot; //Inkludiert meine ganzen header

Player::Player() //default constructor
{
    SetName(&quot;Held&quot;);
    strength = 0;
    intelligence = 0;
    dexterity = 0;
    wisdom = 0;
    magic = 0;
    defense = 0;
    maxhp = 20;
    hp = 20;
    level = 1;
    exp = 0;
    maxexp = 250;
}

Player::~Player()
{
}

void Player::ShowInfo()
{
    cout &lt;&lt; &quot;lvl: &quot;&lt;&lt; level &lt;&lt; endl;
    cout &lt;&lt; &quot;Hp : &quot;&lt;&lt; hp &lt;&lt; &quot;/&quot; &lt;&lt; maxhp &lt;&lt; endl;
    cout &lt;&lt; &quot;str: &quot;&lt;&lt; strength &lt;&lt; endl;
    cout &lt;&lt; &quot;dex: &quot;&lt;&lt; dexterity &lt;&lt; endl;
    cout &lt;&lt; &quot;int: &quot;&lt;&lt; intelligence &lt;&lt; endl;
    cout &lt;&lt; &quot;mag: &quot;&lt;&lt; magic &lt;&lt; endl;
    cout &lt;&lt; &quot;wis: &quot;&lt;&lt; wisdom &lt;&lt; endl;
    cout &lt;&lt; &quot;def: &quot;&lt;&lt; defense &lt;&lt; endl;
    cout &lt;&lt; &quot;exp: &quot;&lt;&lt; exp &lt;&lt; &quot;/&quot; &lt;&lt; maxexp &lt;&lt; endl;
}

void Player::SetName(string newname)
{
    name = newname;
}

string Player::GetName()
{
    return name;
}

int Player::GetHp()
{
    return hp;
}

int Player::GetMaxhp()
{
    return maxhp;
}

int Player::GetStrength()
{
    return strength;
}

int Player::GetDexterity()
{
    return dexterity;
}

int Player::GetWisdom()
{
    return wisdom;
}

int Player::GetMagic()
{
    return magic;
}

int Player::GetExp()
{
    return exp;
}

int Player::GetDefense()
{
    return defense;
}

void Player::SetDefense(int newdef)
{
    defense = defense + newdef;
}

void Player::SetDexterity (int newdex)
{
    dexterity = dexterity + newdex;
}

void Player::SetIntelligence(int newint)
{
    intelligence = intelligence + newint;
}

void Player::SetMagic(int newmag)
{
    magic = magic + newmag;
}

void Player::SetStrenght(int newstr)
{
    strength = strength + newstr;
}

void Player::SetWisdom(int newwis)
{
    wisdom = wisdom + newwis;
}
</code></pre>
<pre><code class="language-cpp">//Weapons.h

#ifndef WEAPONS_H_INCLUDED
#define WEAPONS_H_INCLUDED

#endif // WEAPONS_H_INCLUDED

class Weapon
{
    private:
    string name;
    int min_damage;
    int max_damage;
    int value;

    public:
    Weapon();
    ~Weapon();
    int Attack(int str);
    void SetName(string newname);
    void SetDamage(int min, int max);
    void SetValue(int newvalue);
};
</code></pre>
<pre><code class="language-cpp">//Weapons.cpp

Weapon::Weapon() //default constructor
{
    name = &quot;Waffe&quot;;
    min_damage = 1;
    max_damage = 2;
    value = 5;
}

Weapon::~Weapon()
{

}

int Weapon::Attack(int str)
{
    srand((unsigned)time(NULL));
    int dice = max_damage - min_damage; // Würfel erstellen
    int dmg = (rand()%dice) +1; // Würfeln
    dmg = dmg + str; // Erwürfelter Schaden + Stärke
    return dmg;
}

void Weapon::SetName(string newname)
{
    name = newname;
}

void Weapon::SetDamage(int min, int max)
{
    min_damage = min;
    max_damage = max;

    if(min_damage &gt; max_damage) //Wenn der min_damage grösser als der max dmg ist, werden die Werte getauscht.
    {
        int temp = min_damage;
        max_damage = min_damage;
        min_damage = temp;
    }
}

void Weapon::SetValue(int newvalue)
{
    value = newvalue;
}
</code></pre>
<pre><code class="language-cpp">//Weaponlist.cpp

#include &quot;Library.h&quot;

Weapon Bronzeschwert;
Bronzeschwert.SetName(&quot;Bronzeschwert&quot;);
Bronzeschwert.SetDamage(4, 12);
Bronzeschwert.SetValue(20);
</code></pre>
<p>Sooo, ist en bissl viel aber ich denke mal ist immer hilfreicher wenn man mehr postet statt weniger <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Also könnt ihr mir da irgendwie helfen? Und wenn ihr noch Anmerkungen und Verbesserungsvorschläge zum Programmierstil etc. habt immer gerne her damit <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Im Voraus schonmal danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/269071/klassen-als-variable-an-andere-klassen-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 06:53:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/269071.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Jun 2010 10:16:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klassen als Variable an andere Klassen übergeben? on Fri, 18 Jun 2010 10:18:13 GMT]]></title><description><![CDATA[<p>Halli Hallo liebe Gemeinde <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ich lerne zurzeit recht fleissig c++ und bin momentan bei dem Thema Klassen.<br />
Um einfach zu üben, schreibe ich (wie so viele <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> ) an einem kleinen Konsolen Rollenspiel.</p>
<p>Soweit funktionieren die ersten Dinge schon ganz gut. Nun möchte ich aber der Klasse &quot;Player&quot; gerne bei den public variablen die Klasse &quot;Weapon&quot; mitgeben.</p>
<p>Also z.b. Wenn man ein Schwert anlegt, dass dann auch bei dem Objekt &quot;Spieler 1&quot; als angelegte Waffe das Objekt &quot;Schwert&quot; vorzufinden ist.</p>
<p>Die Idee hinter dem ganzen ist, dass ich den Schaden wie folgt berechnen möchte:</p>
<p>Beim Angriff soll vom angelegten Waffenobjekt die Funktion Attack(); aufgerufen werden, in welcher ich den schaden der Waffe &quot;auswürfel&quot; und ggf. noch extra effekte hinzufügen kann. (Also Schwerter verursachen schwere Wunden, Äxte haben eine Chance die Rüstung zu verringern, sowas in der Art)</p>
<p>Hier mal ein paar codeschnippsel:</p>
<pre><code class="language-cpp">// Player.h

class Player
{
    private:
    string name;
    int level;
    int hp;
    int maxhp;
    int strength;
    int dexterity;
    int intelligence;
    int wisdom;
    int magic;
    int defense;
    int exp;
    int maxexp;

    public:
    Player();
    ~Player();
    void ShowInfo();
    void SetName(string newname);
    void CheckLevel();
    string GetName();
    int GetHp();
    int GetMaxhp();
    int GetStrength();
    int GetDexterity();
    int GetIntelligence();
    int GetWisdom();
    int GetMagic();
    int GetExp();
    int GetLevel();
    int GetDefense();
    void SetStrenght(int newstr);
    void SetDexterity(int newdex);
    void SetIntelligence(int newint);
    void SetWisdom(int newwis);
    void SetMagic(int newmag);
    void SetDefense(int newdef);
};
</code></pre>
<pre><code class="language-cpp">//Player.cpp (ich weiss, dass noch nicht alle Funktionen eingebaut sind, mache //ich noch, möchte aber zuerst das Waffenproblem lösen ;) )

#include &quot;Library.h&quot; //Inkludiert meine ganzen header

Player::Player() //default constructor
{
    SetName(&quot;Held&quot;);
    strength = 0;
    intelligence = 0;
    dexterity = 0;
    wisdom = 0;
    magic = 0;
    defense = 0;
    maxhp = 20;
    hp = 20;
    level = 1;
    exp = 0;
    maxexp = 250;
}

Player::~Player()
{
}

void Player::ShowInfo()
{
    cout &lt;&lt; &quot;lvl: &quot;&lt;&lt; level &lt;&lt; endl;
    cout &lt;&lt; &quot;Hp : &quot;&lt;&lt; hp &lt;&lt; &quot;/&quot; &lt;&lt; maxhp &lt;&lt; endl;
    cout &lt;&lt; &quot;str: &quot;&lt;&lt; strength &lt;&lt; endl;
    cout &lt;&lt; &quot;dex: &quot;&lt;&lt; dexterity &lt;&lt; endl;
    cout &lt;&lt; &quot;int: &quot;&lt;&lt; intelligence &lt;&lt; endl;
    cout &lt;&lt; &quot;mag: &quot;&lt;&lt; magic &lt;&lt; endl;
    cout &lt;&lt; &quot;wis: &quot;&lt;&lt; wisdom &lt;&lt; endl;
    cout &lt;&lt; &quot;def: &quot;&lt;&lt; defense &lt;&lt; endl;
    cout &lt;&lt; &quot;exp: &quot;&lt;&lt; exp &lt;&lt; &quot;/&quot; &lt;&lt; maxexp &lt;&lt; endl;
}

void Player::SetName(string newname)
{
    name = newname;
}

string Player::GetName()
{
    return name;
}

int Player::GetHp()
{
    return hp;
}

int Player::GetMaxhp()
{
    return maxhp;
}

int Player::GetStrength()
{
    return strength;
}

int Player::GetDexterity()
{
    return dexterity;
}

int Player::GetWisdom()
{
    return wisdom;
}

int Player::GetMagic()
{
    return magic;
}

int Player::GetExp()
{
    return exp;
}

int Player::GetDefense()
{
    return defense;
}

void Player::SetDefense(int newdef)
{
    defense = defense + newdef;
}

void Player::SetDexterity (int newdex)
{
    dexterity = dexterity + newdex;
}

void Player::SetIntelligence(int newint)
{
    intelligence = intelligence + newint;
}

void Player::SetMagic(int newmag)
{
    magic = magic + newmag;
}

void Player::SetStrenght(int newstr)
{
    strength = strength + newstr;
}

void Player::SetWisdom(int newwis)
{
    wisdom = wisdom + newwis;
}
</code></pre>
<pre><code class="language-cpp">//Weapons.h

#ifndef WEAPONS_H_INCLUDED
#define WEAPONS_H_INCLUDED

#endif // WEAPONS_H_INCLUDED

class Weapon
{
    private:
    string name;
    int min_damage;
    int max_damage;
    int value;

    public:
    Weapon();
    ~Weapon();
    int Attack(int str);
    void SetName(string newname);
    void SetDamage(int min, int max);
    void SetValue(int newvalue);
};
</code></pre>
<pre><code class="language-cpp">//Weapons.cpp

Weapon::Weapon() //default constructor
{
    name = &quot;Waffe&quot;;
    min_damage = 1;
    max_damage = 2;
    value = 5;
}

Weapon::~Weapon()
{

}

int Weapon::Attack(int str)
{
    srand((unsigned)time(NULL));
    int dice = max_damage - min_damage; // Würfel erstellen
    int dmg = (rand()%dice) +1; // Würfeln
    dmg = dmg + str; // Erwürfelter Schaden + Stärke
    return dmg;
}

void Weapon::SetName(string newname)
{
    name = newname;
}

void Weapon::SetDamage(int min, int max)
{
    min_damage = min;
    max_damage = max;

    if(min_damage &gt; max_damage) //Wenn der min_damage grösser als der max dmg ist, werden die Werte getauscht.
    {
        int temp = min_damage;
        max_damage = min_damage;
        min_damage = temp;
    }
}

void Weapon::SetValue(int newvalue)
{
    value = newvalue;
}
</code></pre>
<pre><code class="language-cpp">//Weaponlist.cpp

#include &quot;Library.h&quot;

Weapon Bronzeschwert;
Bronzeschwert.SetName(&quot;Bronzeschwert&quot;);
Bronzeschwert.SetDamage(4, 12);
Bronzeschwert.SetValue(20);
</code></pre>
<p>Sooo, ist en bissl viel aber ich denke mal ist immer hilfreicher wenn man mehr postet statt weniger <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Also könnt ihr mir da irgendwie helfen? Und wenn ihr noch Anmerkungen und Verbesserungsvorschläge zum Programmierstil etc. habt immer gerne her damit <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Im Voraus schonmal danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1914342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1914342</guid><dc:creator><![CDATA[Fkscorpion]]></dc:creator><pubDate>Fri, 18 Jun 2010 10:18:13 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Variable an andere Klassen übergeben? on Fri, 18 Jun 2010 10:24:34 GMT]]></title><description><![CDATA[<p>Anmerkungen:<br />
- Setter heißen normalerweise, dass ein Attribut auf den entsprechenden Wer gesetzt wird. Du addierst aber einen Wert hinzu, das ist irreführend. Ich würde daher die Getter umbenennen in AddWisdom etc.<br />
- Schau mal in deinem Buch nach &quot;Initialisierugsliste&quot;, dann musst du im Konstruktor die Werte nicht überschreiben sondern initialisierst sie gleich richtig.<br />
- Schau mal nach Referenzen, du übergibst den String in der SetName-Methode per value, mit der Referenz sparst du dir eine Kopie.</p>
<p>Zum Thema: Objekte übergibt man an Methoden genau so wie du das bisher gemacht hast per value oder eben per Referenz. Ob die Objekte jetzt einen simplen eingebauten Typ haben (int), oder einen Klassentyp aus der Standardbibliothek (std::string) oder einen selbst definierten Klassentyp (Weapon) macht da keinen Unterschied.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1914350</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1914350</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 18 Jun 2010 10:24:34 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Variable an andere Klassen übergeben? on Fri, 18 Jun 2010 10:30:17 GMT]]></title><description><![CDATA[<p>Godclass ...<br />
Einige deiner Setter sind unnötig. Warum sollte man den Namen des Spielers öfters umbennen können? Sowas kommt in den Konstruktor. Genau wie bei deiner Waffenklasse, da ändert sich der Name nicht und der Angriff der Waffe bleibt auch gleich, er wird später höchstens modifiziert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1914353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1914353</guid><dc:creator><![CDATA[freaky]]></dc:creator><pubDate>Fri, 18 Jun 2010 10:30:17 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Variable an andere Klassen übergeben? on Fri, 18 Jun 2010 10:52:32 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Anmerkungen:<br />
- Setter heißen normalerweise, dass ein Attribut auf den entsprechenden Wer gesetzt wird. Du addierst aber einen Wert hinzu, das ist irreführend. Ich würde daher die Getter umbenennen in AddWisdom etc.</p>
</blockquote>
<p>Stimmt, da war ich zu voreilig, danke für den Hinweis, werde ich ändern <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>- Schau mal in deinem Buch nach &quot;Initialisierugsliste&quot;, dann musst du im Konstruktor die Werte nicht überschreiben sondern initialisierst sie gleich richtig.</p>
</blockquote>
<p>Auch das werde ich tun, danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>- Schau mal nach Referenzen, du übergibst den String in der SetName-Methode per value, mit der Referenz sparst du dir eine Kopie.</p>
</blockquote>
<p>Okay auch hier werde ich noch etwas lesen müssen.</p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>Zum Thema: Objekte übergibt man an Methoden genau so wie du das bisher gemacht hast per value oder eben per Referenz. Ob die Objekte jetzt einen simplen eingebauten Typ haben (int), oder einen Klassentyp aus der Standardbibliothek (std::string) oder einen selbst definierten Klassentyp (Weapon) macht da keinen Unterschied.</p>
</blockquote>
<p>Dieser Satz verwirrt mich ein kleines bisschen.</p>
<p>Meinst du das so, dass z.b. Bei der Player class dann in der Attack Methode sowas steht wie:</p>
<pre><code class="language-cpp">int attack()
{
   schaden = Schwert.attack();
  // restlicher code
}
</code></pre>
<p>und wenn ja, ist für mich trotzdem noch die Frage wie ich im Spielerobjekt festlegen kann, dass der Spieler jetzt ein Schwert trägt.</p>
<p>Oder kann ich da irgendwie einfach einen Pointer anlegen a la</p>
<pre><code class="language-cpp">*angelegtewaffe = Schwert;

und dann die Funktion quasi abändern in
int attack()
{
Schaden = &amp;angelegtewaffe.attack();
}
</code></pre>
<p>FreakY&lt;3Cpp schrieb:</p>
<blockquote>
<p>Godclass ...<br />
Einige deiner Setter sind unnötig. Warum sollte man den Namen des Spielers öfters umbennen können? Sowas kommt in den Konstruktor. Genau wie bei deiner Waffenklasse, da ändert sich der Name nicht und der Angriff der Waffe bleibt auch gleich, er wird später höchstens modifiziert.</p>
</blockquote>
<p>Naja ich dachte, dass man später vielleicht noch Titel tragen kann, aber beim genaueren Nachdenken könnte ich natürlich auch einfach eine zweite Variable dafür anlegen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Bei den Waffen wollte ich dann halt noch sowas hinzufügen wie aus diablo 2</p>
<p>&quot;Schwert der Flammen&quot; oder so, wenn man es. z.b. verzaubert hat und dementsprechend sollte sich auch der Schaden ändern, daher diese Funktionen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1914360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1914360</guid><dc:creator><![CDATA[Fkscorpion]]></dc:creator><pubDate>Fri, 18 Jun 2010 10:52:32 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Variable an andere Klassen übergeben? on Fri, 18 Jun 2010 19:48:24 GMT]]></title><description><![CDATA[<p>Lustig das alle irgendwie ein RPG Kampfsystem implementieren wollen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<pre><code class="language-cpp">//Item.h

#ifndef ITEM_H_INCLUDED
#define ITEM_H_INCLUDED

class Item
{
    protected:
    string name;

    public:
    Item(string name = &quot;&quot;, weight = &quot;0&quot;) : name(name) /*, weight(weight), durability(100) */ {};

    string getName() const { return name;}
}; 
#endif // ITEM_H_INCLUDED
</code></pre>
<pre><code class="language-cpp">//Weapons.h

#ifndef WEAPONS_H_INCLUDED
#define WEAPONS_H_INCLUDED

class Weapon : public Item
{
    protected:
    int min_damage;   // -10 erlaubt, ich schlag dich und heil dich dabei ?
    int max_damage;
    int bonus_damage;

    public:
    Weapon(string name=&quot;Waffe&quot;, int minDam=1, int maxDam=2);

    int attack();
    void setBonus(const int bonus);
}; 
#endif // WEAPONS_H_INCLUDED
</code></pre>
<pre><code class="language-cpp">class MagicWeaponEffect: public Weapon
{
    public:
        MagicWeaponEffect(string name=&quot;its magic&quot;, int minDam=5, int maxDam=5) : Weapon(name, minDam, maxDam) {};
}
</code></pre>
<pre><code class="language-cpp">Weapon::Weapon(string name, int minDam, int maxDam) : Item(name), min_damage(minDam), max_damage(maxDam), bonus_damage(0) 
{ 
    if (min_damage &lt; max_damage) std::swap(min_damage, max_damage); // algorithm.h

    srand((unsigned)time(NULL));  
}

int Weapon::attack()
{
;
    int dice = max_damage - min_damage; // Würfel erstellen
    int dam = (rand()%dice) +1; // Würfeln
    dam += bonus_damage; 

    if (dam&gt;0) return dam;

    return 0;
}

void Weapon::setBonus(const int bonus)
{
    bonus_damage = bonus;
}
</code></pre>
<p>Dann kannst du (falls du mehrere Waffen mitführst) folgendes machen:</p>
<pre><code class="language-cpp">int Player::volleAttacke(const Weapon &amp;w, const MagicWeaponEffect &amp;m) const
{
   return GetStrength() + w.attack() + m.attack();
}
</code></pre>
<p>irgendwo dann:</p>
<pre><code class="language-cpp">enemy.reduceHPby(player.volleAttacke(SchwertA, Flammenschlag));  // oder so ...
</code></pre>
<p>Natürlich könnstest du auch einfach eine der Waffen als aktiv (in Hand) markieren und automatisch auf den Schaden der aktiven<br />
Waffe zurückgreifen, ... oder oder oder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1914538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1914538</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Fri, 18 Jun 2010 19:48:24 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Variable an andere Klassen übergeben? on Sat, 19 Jun 2010 07:33:50 GMT]]></title><description><![CDATA[<p>Fkscorpion schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Und zu guter letzt verwundert mich auch, wie viele doch noch mit scheinbar alten Headern oder &quot;using namespace&quot; in Headern arbeiten.</p>
<pre><code class="language-cpp">// &lt;-- C++ Standard Header benutzen wie &lt;string&gt;
// &lt;-- Kein using namespace in Headern (Hat mehr Nach- als Vorteile)

class Player
{
    private:
        std::string name; // Im Header besser mit Namensraum
...
};
</code></pre>
<p>using namespace sollte ausschließlich in die Sourcedateien (wenn überhaupt) und dort hinter allen includes.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1914628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1914628</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Sat, 19 Jun 2010 07:33:50 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Variable an andere Klassen übergeben? on Sat, 19 Jun 2010 09:40:24 GMT]]></title><description><![CDATA[<p>Ich sehe es ganauso wie 'asc'.</p>
<p>Als Nachtrag möchte ich noch hinzufügen, daß man auch folgende Variante verwenden kann (um nicht explizit immer 'std::' im gesamten Header verwenden zu müssen):</p>
<pre><code class="language-cpp">// eigenen Namensbereich benutzen
namespace RPG
{
    using std::string; // nur innerhalb dieses Namensbereiches gültig

    class Player
    {
    private:
        string name;
    ...
    };
}
</code></pre>
<p>(steht z.B. auch im Stroustrup &quot;Die C++ Programmiersprache&quot; unter Kapitel 8.2.2 &quot;Using-Deklarationen&quot; bzw. 8.2.3 &quot;Using-Direktiven&quot;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1914660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1914660</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sat, 19 Jun 2010 09:40:24 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen als Variable an andere Klassen übergeben? on Thu, 24 Jun 2010 13:42:13 GMT]]></title><description><![CDATA[<p>Okay, euch allen schonmal ein grosses Dankeschön für eure Hilfsbereitschaft,<br />
vor allem padreigh, der ja schon &quot;fast&quot; alles fertig geschrieben hat <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Ich hab mittlerweile die namespaces rausgenommen und mich auch schon prima drann gewöhnt einfach ein std:: vorher zu schreiben. Ich hatte die namespaces benutzt weil es in den Buch Beispielen auch so war und bequemer zu schreiben für cout etc. Mittlerweile habe ich aber wieder etwas mehr gelernt und verstehe nun auch die Syntax hinter std:: <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ich werd wohl das ganze Projekt einfach nochmal von vorne anfangen und mit versuchen mit den gelernten Sachen umzusetzen, bevor ich jetzt ein codegewurschtel hoch10 habe.</p>
<p>Sollte es nennenswerte Ergebnisse geben, werde ich Sie hier posten.</p>
<p>Ansonsten: Danke nochmals und bis zur nächsten Frage <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1916803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1916803</guid><dc:creator><![CDATA[Fkscorpion]]></dc:creator><pubDate>Thu, 24 Jun 2010 13:42:13 GMT</pubDate></item></channel></rss>