<?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[[Anfänger] Fragen zur Programmierung mit Klassen]]></title><description><![CDATA[<p>Hallo, ich freue mich, nun hier auch mal selber Fragen zu stellen.</p>
<p>Seit ein paar Tagen plane ich nun, ein einfaches, textbasiertes Rollenspiel nach AD&amp;D-inspiriertem Regelwerk zu programmieren. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Folgende Problemchen tuen sich auf, bei dessen Lösung ihr mir vielleicht Hinweise geben könnt:</p>
<p>Gibt es so etwas wie &quot;dynamische Objekte&quot;? Ich möchte mir nach Zufallsprinzip (erstmal</p>
<pre><code class="language-cpp">srand / rand
</code></pre>
<p>) mehrere, durchnummerierte &quot;Gegner&quot; erstellen. Dazu gibt es die Klasse &quot;cCharacter&quot;, die mehrere int und string Variablen beinhaltet (diese Variablen sollen auch größtenteils mit Werten aus rand gefüllt werden). Bisher habe ich aber es noch nicht hinbekommen, solch &quot;dynamische&quot; Objektnamen (z.B. &quot;Gegner0001&quot;, &quot;Gegner0002&quot;) zu erstellen, mit denen ich dann sogar noch Funktionen aufrufen kann (z.B. &quot;Gegner0002:InitiativeWuerfeln()&quot; ).<br />
Weiterhin stellt sich mir die Frage, wie ich es hinbekomme, dass alle &quot;Gegner&quot; erstmal die Funktion &quot;InitiativeWuerfeln()&quot; ausführen?</p>
<p>Vielleicht reicht es mir auch erstmal, wenn ihr mir sagen könnt, welche C++ Funktionalitäten ich mir mal genauer ansehen sollte. Bringen mir Container oder Listen etwas?<br />
Ich danke schon mal im Voraus! <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>Edit: nochmal zum Verständnis: &quot;Gegner000*&quot; sind Objekte der Klasse cCharakter.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/292471/anfänger-fragen-zur-programmierung-mit-klassen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 11:35:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/292471.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 10 Sep 2011 14:51:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Sat, 10 Sep 2011 14:53:20 GMT]]></title><description><![CDATA[<p>Hallo, ich freue mich, nun hier auch mal selber Fragen zu stellen.</p>
<p>Seit ein paar Tagen plane ich nun, ein einfaches, textbasiertes Rollenspiel nach AD&amp;D-inspiriertem Regelwerk zu programmieren. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Folgende Problemchen tuen sich auf, bei dessen Lösung ihr mir vielleicht Hinweise geben könnt:</p>
<p>Gibt es so etwas wie &quot;dynamische Objekte&quot;? Ich möchte mir nach Zufallsprinzip (erstmal</p>
<pre><code class="language-cpp">srand / rand
</code></pre>
<p>) mehrere, durchnummerierte &quot;Gegner&quot; erstellen. Dazu gibt es die Klasse &quot;cCharacter&quot;, die mehrere int und string Variablen beinhaltet (diese Variablen sollen auch größtenteils mit Werten aus rand gefüllt werden). Bisher habe ich aber es noch nicht hinbekommen, solch &quot;dynamische&quot; Objektnamen (z.B. &quot;Gegner0001&quot;, &quot;Gegner0002&quot;) zu erstellen, mit denen ich dann sogar noch Funktionen aufrufen kann (z.B. &quot;Gegner0002:InitiativeWuerfeln()&quot; ).<br />
Weiterhin stellt sich mir die Frage, wie ich es hinbekomme, dass alle &quot;Gegner&quot; erstmal die Funktion &quot;InitiativeWuerfeln()&quot; ausführen?</p>
<p>Vielleicht reicht es mir auch erstmal, wenn ihr mir sagen könnt, welche C++ Funktionalitäten ich mir mal genauer ansehen sollte. Bringen mir Container oder Listen etwas?<br />
Ich danke schon mal im Voraus! <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>Edit: nochmal zum Verständnis: &quot;Gegner000*&quot; sind Objekte der Klasse cCharakter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117634</guid><dc:creator><![CDATA[thuering]]></dc:creator><pubDate>Sat, 10 Sep 2011 14:53:20 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Sat, 10 Sep 2011 14:57:47 GMT]]></title><description><![CDATA[<p>1. Deine Variablennummerierung erfordert Container, wie schon von dir vermutet.<br />
2. rand() gibt einen int zurück und zwar nur in einem bestimmten Bereich. Für die zufällige Initialisierung deines Characters brauchst du einen eigenen Code.<br />
3. Wenn dir die rand()-Funktionalitäten nich ausreichen, dann schau dir mal die random-Klassen aus boost oder C++11 an.<br />
4. cCharacter? Komischer Name. Ist das Ungarische Notation? (die ist nämlich böööse und veraltet <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/2117637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117637</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sat, 10 Sep 2011 14:57:47 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Sat, 10 Sep 2011 15:04:12 GMT]]></title><description><![CDATA[<p>Vielleicht das hier?</p>
<pre><code class="language-cpp">vector&lt;cCharakter*&gt; dieGegner;//Sorry, Speicherloch vorprogrammiert. Läßt sich aber besser suchen. 
//Speicherloch dann wegmachen mit ptr-Container. Erstmal hinkriegen, schlage ich vor. 

//je nach Gusto
dieGewgner.push_back(new cCharakter(&quot;Rudi Rüssel&quot;,70,5));
dieGewgner.push_back(new cCharakter(&quot;Klaus &amp; Klaus&quot;,375,600));
dieGewgner.push_back(new cCharakter(&quot;Vlad der Pfähler&quot;,1720,315));
for(int i=0;i&lt;20;++i)
   dieGewgner.push_back(new cCharakter(&quot;ein streunender Hund&quot;,120+rand()%50,30+rand()%10));
if(rand()%100==1)//Zu nur 1% Wahrscheinlichkeit
   dieGewgner.push_back(new cCharakter(&quot;Esmeralda Wetterwachs&quot;,10000,10000));//Die alte hat nen guten Tag. Und Du bist tot. 
else
   dieGewgner.push_back(new cCharakter(&quot;Esmeralda Wetterwachs&quot;,1200,1000));//Nicht so schlimm wie Vlad, aber schon kernig.

//
Gegner[2].InitiativeWuerfeln();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2117638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117638</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 10 Sep 2011 15:04:12 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Sun, 11 Sep 2011 10:32:18 GMT]]></title><description><![CDATA[<p>thuering schrieb:</p>
<blockquote>
<p>Klasse cCharakter.</p>
</blockquote>
<p>Solche Namen sind recht unbeliebt, nenne deine Klassen ruhig Charakter.</p>
<p>Zu deinem Problem:<br />
Es gibt verschiedenen Möglichkeiten so &quot;dynamische&quot; Objekte zu erstellen. (Viele Standardcontainer, new).<br />
Die Einfachste dürfte sein std::vector.</p>
<p>Ich denke mal die für dich richtige Methode dürfte so etwas in der Art sein.</p>
<pre><code class="language-cpp">class Character
{
  // Eigenschaften die jeder Charakter hat
  // Methoden (u.U. virtual) die jeder Charakter hat
};

class Player : public Character
{
};

class Enemy : public Character
{
};

class EnemieManager
{
  std::vector&lt;Enemy&gt; enemies;
public:
  void addEnemie(Enemy enemy)
  {
    enemies.push_back(enemy);
  }
  void handleEvent(IrgendEineEventKlasse event)
  {
    for (std::vector&lt;Enemy&gt;::iterator i = enemies.begin();
      i != enemies.end(); ++i)
    {
      i-&gt;handleEvent(event);
    }
  }
};
</code></pre>
<p>Eventuell noch mit pure virtual + Zeigern auf Basisklasse im Vektor.</p>
<p>Edit:<br />
Ich wusste doch, dass irgendetwas nicht stimmt.</p>
<p>Edit2:<br />
Als Rechtschreibefreak würde ich mich aber ganz und gar nicht bezeichnen. <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/2117639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117639</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sun, 11 Sep 2011 10:32:18 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Sat, 10 Sep 2011 15:05:34 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/25760">@cooky451</a>: Dir (als Rechtschreibfreak, wenn ich mich richtig erinnere <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="😉"
    /> ) ist hoffentlich bewusst, dass es im Singular &quot;Enemy&quot; und nicht &quot;Enemie&quot; heißt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117640</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sat, 10 Sep 2011 15:05:34 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Sat, 10 Sep 2011 15:11:33 GMT]]></title><description><![CDATA[<p>Vielen Dank für die sehr schnellen Antworten, ich werde mich dann mal ausgiebig mit Containern &amp; Vektoren beschäftigen.</p>
<p>Ich habe hier Heiko Kalistas Buch &quot;C++ für Spieleprogrammierer&quot;, Videokurs Video2Brain &quot;Visual C++ 2008&quot; und den Galileo Computing Videokurs &quot;C++ programmieren&quot;. Empfiehlt ihr davon etwas ausdrücklich?</p>
<p>Ist &quot;boost&quot; eine Standard-Library?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117642</guid><dc:creator><![CDATA[thuering]]></dc:creator><pubDate>Sat, 10 Sep 2011 15:11:33 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Sat, 10 Sep 2011 15:14:23 GMT]]></title><description><![CDATA[<p>thuering schrieb:</p>
<blockquote>
<p>Vielen Dank für die sehr schnellen Antworten, ich werde mich dann mal ausgiebig mit Containern &amp; Vektoren beschäftigen.</p>
</blockquote>
<p>Das ist eine gute Idee, da das zentrale Konzepte sind. Iteratoren kannst du dir dann gleich mit angucken. <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="🙂"
    /><br />
(Und Vererbung auch, ist im Endeffekt alles nicht so kompliziert, wie es anfangs aussieht.)</p>
<p>thuering schrieb:</p>
<blockquote>
<p>Ich habe hier Heiko Kalistas Buch &quot;C++ für Spieleprogrammierer&quot;, Videokurs Video2Brain &quot;Visual C++ 2008&quot; und den Galileo Computing Videokurs &quot;C++ programmieren&quot;. Empfiehlt ihr davon etwas ausdrücklich?</p>
</blockquote>
<p>Ne. Aber ich würde auch sonst nicht viel ausdrücklich empfehlen.</p>
<p>thuering schrieb:</p>
<blockquote>
<p>Ist &quot;boost&quot; eine Standard-Library?</p>
</blockquote>
<p>Nein. boost ist eine sehr umfangreiche und gute externe Bibliothek, hat aber mit der Standardbibliothek nicht viel zu tun. boost kann später hilfreich sein, aber ich würde mich erst mal mit den Standardkonzepten vertraut machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117644</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 10 Sep 2011 15:14:23 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Sat, 10 Sep 2011 15:19:06 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>thuering schrieb:</p>
<blockquote>
<p>Ist &quot;boost&quot; eine Standard-Library?</p>
</blockquote>
<p>Nein. boost ist eine sehr umfangreiche und gute externe Bibliothek, hat aber mit der Standardbibliothek nicht viel zu tun. boost kann später hilfreich sein, aber ich würde mich erst mal mit den Standardkonzepten vertraut machen.</p>
</blockquote>
<p>Viele Leute hier benutzen Boost, als hätte es jeder einigermaßen gute Programmierer installiert und auch das C++-Kommitee scheint die Library nicht schlecht zu finden und hat Teile davon in die neue Standardlibrary von C++11 übernommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117646</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sat, 10 Sep 2011 15:19:06 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Sat, 10 Sep 2011 15:21:27 GMT]]></title><description><![CDATA[<p>thuering schrieb:</p>
<blockquote>
<p>Ich habe hier Heiko Kalistas Buch &quot;C++ für Spieleprogrammierer&quot;, Videokurs Video2Brain &quot;Visual C++ 2008&quot; und den Galileo Computing Videokurs &quot;C++ programmieren&quot;. Empfiehlt ihr davon etwas ausdrücklich?</p>
</blockquote>
<p>Ich kenne alle drei nicht. Würde aus der Entfernung aber alle drei ablehnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117647</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 10 Sep 2011 15:21:27 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Sat, 10 Sep 2011 15:28:01 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>thuering schrieb:</p>
<blockquote>
<p>Ist &quot;boost&quot; eine Standard-Library?</p>
</blockquote>
<p>Nein. boost ist eine sehr umfangreiche und gute externe Bibliothek, hat aber mit der Standardbibliothek nicht viel zu tun. boost kann später hilfreich sein, aber ich würde mich erst mal mit den Standardkonzepten vertraut machen.</p>
</blockquote>
<p>In der Tat hat Boost sogar viel mit der Standardbibliothek zu tun. Ursprünglich war das die Spielwiese für Erweiterungen von <code>std</code> und in den aktuellen Standard wurden viele nützliche Dinge aus Boost übernommen. Für Netzwerk- oder Dateisystemkram gilt Boost in Ermangelung von Alternativen für viele als Standard. Ohne Boost könnte ich mit C++ nicht arbeiten, weil erst Konstrukte wie <code>shared_ptr</code> und <code>ptr_vector</code> die manuelle Speicherverwaltung benutzbar machen. Ähnliches gilt für <code>bind</code> + <code>function</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117648</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Sat, 10 Sep 2011 15:28:01 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Sat, 10 Sep 2011 15:38:00 GMT]]></title><description><![CDATA[<p>TyRoXx schrieb:</p>
<blockquote>
<p>Ohne Boost könnte ich mit C++ nicht arbeiten, weil erst Konstrukte wie <code>shared_ptr</code> und <code>ptr_vector</code> die manuelle Speicherverwaltung benutzbar machen. Ähnliches gilt für <code>bind</code> + <code>function</code> .</p>
</blockquote>
<p>Ich kann ohne boost arbeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117650</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 10 Sep 2011 15:38:00 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Sat, 10 Sep 2011 19:35:52 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>TyRoXx schrieb:</p>
<blockquote>
<p>Ohne Boost könnte ich mit C++ nicht arbeiten, weil erst Konstrukte wie <code>shared_ptr</code> und <code>ptr_vector</code> die manuelle Speicherverwaltung benutzbar machen. Ähnliches gilt für <code>bind</code> + <code>function</code> .</p>
</blockquote>
<p>Ich kann ohne boost arbeiten.</p>
</blockquote>
<p>Ich kann auch (noch) ohne boost arbeiten, aber ich hab ja einen Großteil von C++11. <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="😉"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117721</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sat, 10 Sep 2011 19:35:52 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Sat, 10 Sep 2011 20:17:59 GMT]]></title><description><![CDATA[<p>thuering schrieb:</p>
<blockquote>
<p>Vielen Dank für die sehr schnellen Antworten, ich werde mich dann mal ausgiebig mit Containern &amp; Vektoren beschäftigen.</p>
<p>Ich habe hier Heiko Kalistas Buch &quot;C++ für Spieleprogrammierer&quot;, Videokurs Video2Brain &quot;Visual C++ 2008&quot; und den Galileo Computing Videokurs &quot;C++ programmieren&quot;. Empfiehlt ihr davon etwas ausdrücklich?</p>
</blockquote>
<p>Das Buch von Kalista ist nicht schlecht, wenn ich es nicht verwechsle. Es ist zwar nicht so umfangreich/genau wie z.B. &quot;C++ Primer&quot;, aber spannender, weil man ja sozusagen auf ein Spiel hinarbeitet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2117742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2117742</guid><dc:creator><![CDATA[Wurst]]></dc:creator><pubDate>Sat, 10 Sep 2011 20:17:59 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Mon, 12 Sep 2011 21:17:26 GMT]]></title><description><![CDATA[<p>Hallo,<br />
nun habe ich schon ein bißchen über Container, Vektoren, Listen und Iteratoren gelesen. Aber vielleicht habt ihr trotzdem noch einen kleinen Hinweis für mich?</p>
<p>Da wäre die Klasse <em>Charakter</em> mit den in <em>main()</em> erzeugten Objekten <em>Spieler<br />
Gegner0001<br />
Gegner0002<br />
Gegner0003</em><br />
Alle besitzen die Membervariablen (ist dass die richtige Bezeichnung dafür?)<br />
*int ******<em>.Initiative</em></p>
<p>Diese Initiative wird mittels Funktion (<em>fInitiative()</em>) per Zufall ermittelt. Jetzt möchte ich, dass alle Objekte der Klasse Charakter die Funktion <em>fInitiative()</em> aufrufen, damit bei allen Objekten die <em>int Initiative</em> gesetzt wird. Das bekomme ich sicherlich noch selber hin, am besten wohl mit einem <em>for_each</em>.</p>
<p>Jetzt aber, möchte ich, dass die Objekte, beginnend mit dem, dass den <strong>niedrigsten</strong> <em>int Initiative</em> Wert hat, alle nacheinander die Funktion <em>fAttack()</em> ausführen. Soll ich da was mit <em>sort()</em> aus der STL machen? Wenn ja, wie soll ich da vorgehen?</p>
<p>Vielen Dank, auch für das, was ihr hier alle schon geschrieben und geholfen habt!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2118456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118456</guid><dc:creator><![CDATA[thuering]]></dc:creator><pubDate>Mon, 12 Sep 2011 21:17:26 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Mon, 12 Sep 2011 21:52:10 GMT]]></title><description><![CDATA[<p>Ja, du solltest std::sort() verwenden.<br />
Dafür könntest du den Vergleichsoperator für deine Charaktere überladen, aber ich weiß nicht, ob das Sinn macht.<br />
Vermutlich besser ist, den dritten Parameter von sort() zu nutzen, nämlich ein Funktionsobjekt, dass für zwei zu vergleichende Objekte entscheidet, welches kleiner ist.</p>
<p>Das sähe in etwa so aus:</p>
<pre><code class="language-cpp">struct vergleiche_initiativen : public std::binary_function&lt;Charakter, Charakter, bool&gt;
{
    bool operator()(const Charakter&amp; c1, const Charakter&amp; c2) const {return t1.initiative &lt; t2.initiative;}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2118467</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118467</guid><dc:creator><![CDATA[wx++]]></dc:creator><pubDate>Mon, 12 Sep 2011 21:52:10 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Mon, 12 Sep 2011 22:05:10 GMT]]></title><description><![CDATA[<p>Wird die Initiative jede Runde neu gesetzt?<br />
Was möchtest du machen, falls zwei Charaktere die gleiche Initiative haben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2118471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118471</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Mon, 12 Sep 2011 22:05:10 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Mon, 12 Sep 2011 22:20:06 GMT]]></title><description><![CDATA[<p>Ja, es gibt jede Runde einen neuen Initiative-Wurf. Ich denke dabei an eine Do-While-Schleife, bis Spieler oder alle Gegner HP &lt;= 0 haben.</p>
<p>Wegen der Initiative: Ich hatte mir überlegt, das vielleicht eine Art Zähler durchläuft, der die momentane Initiative-Zahl beinhaltet. Erst wenn alle Charaktere die momentane Aktion der jeweiligen Initiative (z.B. Spieler, Gegner0001 und Gegner0002 haben alle Initiative 5) abgeschlossen haben, wird erst geprüft, ob jemand durch die Aktionen gestorben ist. Dann kommen die Charaktere dran, die Initiative 6 oder höher haben.<br />
Spieltechnisch gesehen entspricht das zumindest am ehesten dem originalen AD&amp;D-Regelwerk <a href="http://en.wikipedia.org/wiki/Advanced_Dungeons_%26_Dragons_2nd_edition#Advanced_Dungeons_.26_Dragons" rel="nofollow">http://en.wikipedia.org/wiki/Advanced_Dungeons_%26_Dragons_2nd_edition#Advanced_Dungeons_.26_Dragons</a>, auf welches ich mich teilweise stützen möchte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2118472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118472</guid><dc:creator><![CDATA[thuering]]></dc:creator><pubDate>Mon, 12 Sep 2011 22:20:06 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Tue, 13 Sep 2011 00:26:14 GMT]]></title><description><![CDATA[<blockquote>
<p>Erst wenn alle Charaktere die momentane Aktion der jeweiligen Initiative (z.B. Spieler, Gegner0001 und Gegner0002 haben alle Initiative 5) abgeschlossen haben, wird erst geprüft, ob jemand durch die Aktionen gestorben ist. Dann kommen die Charaktere dran, die Initiative 6 oder höher haben.</p>
</blockquote>
<p>In rundenbasierten Spielen würde ich eine Gleichzeitigkeit eher vermeiden wollen, das kann sonst zu bizarren Situationen führen. (Wobei das halt dein Bier ist. :))<br />
Meine Idee wäre so etwas:</p>
<pre><code class="language-cpp">class Character
{
  int initiative_;
public:
  Character()
    : initiative_(newRound())
  {}
  void newRound()
  {
    initiative_ = irgendwasZufaelliges();
  }
  //friend bool compareInitiative(const Character&amp; a, const Character&amp; b)
  //{
  //  return a.initiative_ &lt; b.initiative_;
  //}
}; 

class Manager
{
  std::vector&lt;Character&gt; characters;
public:
  void addEnemie(Character character)
  {
    enemies.push_back(character);
  }
  void attack()
  {
    for (unsigned int initiative = 1; initiative &lt; 101; ++initiative)
    {
      std::vector&lt;std::vector&lt;Character&gt;::iterator&gt; round;
      for (std::vector&lt;Character&gt;::iterator i = characters.begin();
        i != characters.end(); ++i)
      {
        if (i-&gt;initiative() == initiative)
          round.push_back(i);
      }
      std::random_shuffle(round.begin(), round.end());
      for (std::vector&lt;std::vector&lt;Character&gt;::iterator&gt;::const_iterator i = round.begin(); // langsam wirds ironisch..
        i != round.end(); ++i)
      {
        (*i)-&gt;attack();
      }
    }
  }
  void newRound()
  {
    for (std::vector&lt;Enemy&gt;::iterator i = enemies.begin();
      i != enemies.end(); ++i)
    {
      i-&gt;newRound(); // Jeder Charakter setzt seine eigene Initiative
    }
    //std::sort(enemies.begin(), enemies.end(), compareInitiative);
  }
}
</code></pre>
<p>Ob sort() laufzeittechnisch Sinn macht, kann ja jemand anders ausrechnen, obwohl das bei solche Anwendungen eh völlig egal ist.</p>
<p>Edit:<br />
In dem &quot;original&quot;-Spiel gibt es Gleichzeitigkeit? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Wo genau liest du das, konnte es da nicht finden..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2118477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118477</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Tue, 13 Sep 2011 00:26:14 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Mon, 12 Sep 2011 23:14:20 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Vielleicht macht ein std::vector&lt;Character&amp;&gt; round; mehr Sinn.</p>
</blockquote>
<p>In einen vector kann man keine Referenzen stecken <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/2118490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118490</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 12 Sep 2011 23:14:20 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Mon, 12 Sep 2011 23:25:40 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>cooky451 schrieb:</p>
<blockquote>
<p>Vielleicht macht ein std::vector&lt;Character&amp;&gt; round; mehr Sinn.</p>
</blockquote>
<p>In einen vector kann man keine Referenzen stecken <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>
</blockquote>
<p>Hmja, ein resize() dürfte dann schwer fallen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2118492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118492</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Mon, 12 Sep 2011 23:25:40 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Tue, 13 Sep 2011 07:31:29 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>In dem &quot;original&quot;-Spiel gibt es Gleichzeitigkeit? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Wo genau liest du das, konnte es da nicht finden..</p>
</blockquote>
<p>Du hast recht, das steht gar nicht in dem Wiki-Artikel. Aber es gibt Gleichzeitigkeit in AD&amp;D (siehe <a href="http://www.ebay.de/itm/270813851609?ssPageName=STRK:MEWAX:IT&amp;_trksid=p3984.m1438.l2649" rel="nofollow">http://www.ebay.de/itm/270813851609?ssPageName=STRK:MEWAX:IT&amp;_trksid=p3984.m1438.l2649</a> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> ) - wir reden hier aber auch von einem Pen&amp;Paper-Spiel. Ich meine aber sogar, dass selbst in der bekannten PC-Umsetzung &quot;Baldurs Gate&quot; die Gleichzeitigkeit umgesetzt wird.<br />
Warum auch nicht: Während ich dem fiesen Ork ein Schwert in den Bauch bohre, schlägt er mir noch mit seinem Streitkolben den Schädel ein... <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="😉"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Das werde ich dann auch regelgetreu umsetzen.</p>
<p>Ich danke für die vielen Vorschläge. Ich selber habe mir natürlich auch noch weiter Gedanken gemacht. Ich glaube, ich werde es erstmal mit einer einfachen for-Schleife versuchen, die jeden Initiative-Wert durchgeht und dann jeden drankommen lässt.<br />
Ich denke auch, ich werde meine Lösung dann hier posten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2118542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118542</guid><dc:creator><![CDATA[thuering]]></dc:creator><pubDate>Tue, 13 Sep 2011 07:31:29 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Tue, 13 Sep 2011 11:21:39 GMT]]></title><description><![CDATA[<p>Du könntest das Problem der Gleichzeitig damit lösen, dass du alle Charaktere mit gleichem Initiativwert in einen Vektor steckst. Damit hast du mehrere Vektoren, die du dann noch nach ihrem Initiativwert sortieren musst. Glücklicherweise kann man <code>std::map</code> genau dafür verwenden. <code>std::map</code> realisiert eine Zuordnung von Initiative auf einen Vektor mit Charakteren, die diesen Initiativwert besitzen. Bei dieser Zuordnung spricht man von <em>Schlüssel/Wertepaaren</em>, der Schlüssel ist die Initiative, der Werte ein Vektor von Charakteren. <code>std::map</code> hat das Standardverhalten, dass sie ihre Schlüssel/Wertepaare aufsteigend nach dem Schlüssel sortiert, d.h. beim Durchlaufen der <code>std::map</code> werden Schlüssel/Wertepaare mit dem kleineren Schlüssel zuerst behandelt. Da die Charakterobjekte während des Kampfes verändert werden müssen enthält die Tabelle Zeiger auf die Original Charakterobjekte. Leider verschlechtert das die Lesbarkeit des Quelltextes etwas .</p>
<p>Bsp:</p>
<pre><code>Schlüssel (Initiative) | Werte (Vektor von Charakteren und Monstern)
-----------------------+--------------------------------------------
        1              | [Monster1, Monster4, Charakter3]
        2              | [Monster2]
        3              | [Monster5, Charakter1, Charakter2]
        4              | [Charakter4]
        5              | [Monster6]
        6              | [Monster3, Charakter5]
-----------------------+--------------------------------------------
</code></pre>
<p>Um eine Kampfrunde durchzuführen muss diese Tabelle nun von <strong>hinten</strong> nach vorne abgearbeitet werden, damit die Beteiligten in der Reihenfolge ihrer Initiative handeln können. Charaktere dürfen nur dann angreifen, wenn sie zum Zeitpunkt, an dem sie handeln dürfen, noch handlungsfähig sind. Ein Charakter A mit Initiative 3 könnte ja von Charakter B mit Initiative 5 getötet worden sein, bevor Charakter A an der Reihe war. Dazu wird vor dem Angriff geprüft, ob der aktuelle Charakter überhaupt handlungsfähig ist.</p>
<pre><code class="language-cpp">#include &lt;map&gt;
#include &lt;vector&gt;

using namespace std;

typedef vector&lt;Charakter&gt; CharVector;
typedef vector&lt;Charakter*&gt; CharPtrVector;
typedef map&lt;int,CharPtrvector&gt; InitiativeCharTabelle;

bool kann_handeln( const Charakter&amp; Char )
{
   return Char.Lebenspunkte &gt; 0;
}

InitiativeCharTabelle erstelle_rangfolge( CharVector&amp; v )
{
   InitiativeCharTabelle RangFolge;

   for( CharVector::iterator i = v.begin(); i != v.end(); ++i )
   {
      // Initiativwurf für den aktuellen Charakter
      int Initiative = (rand() % 6) +1; // oder sonstwie

      // Alle Charaktere mit gleicher Initiative in einem Vektor ablegen
      // Die folgende Zeile nutzt eine Eigenheit von std::map aus:
      // Der Indexoperator[s] liefert das Wertobjekt zum Schlüssel s zurück. 
      // Wenn für den Schlüssel s kein solches Objekt existiert wird ein neues
      // konstruiert und zurückgegeben. Beim ersten Zugriff RangFolge[s] wird 
      // also ein neues CharPtrVector Objekt erzeugt und zurückgegeben. Damit
      // wird sichergestellt, dass der Zugriff über den Indexoperator immer
      // ein gültiges Objekt zurückgibt.
      // *i dereferenziert den Iterator und liefert damit das Charakterobjekt
      // zurück. &amp;(*i) ist also die Adresse des Charakterobjekts und wird in
      // der Tabelle der Rangfolge abgelegt.
      RangFolge[Initiative].push_back( &amp; (*i) );
   }
   return RangFolge;
}

void fuehre_kampfrunde_durch( InitiativeCharTabelle&amp; RangFolge )
{
   // Tabelle von hinten nach vorne durchlaufen, damit Charaktere mit hoher
   // Initiative zuerst behandelt werden
   for( InitiativeCharTabelle::reverse_iterator i = RangFolge.rbegin();
        i != RangFolge.rend(); ++i )
   {
      // der Iterator einer std::map besteht aus std::pair, in diesem Fall
      // aus std::pair&lt;const int, CharPtrVector&gt;.
      // Zur Übersichtlichkeit eine lokale Variable benutzen
      CharPtrVector&amp; v = i-&gt;second;

      // alle Charaktere des aktuellen Vektors behandeln
      for( CharPtrVector::iterator c = v.begin(); c != v.end(); ++c )
      {
         // Vektor aller handlungsfähigen Charaktere bilden. Das löst das 
         // Problem, wenn ein Charakter einen anderen Charakter mit gleicher
         // Initiative tötet.
         CharPtrVector hfc;
         if( kann_handeln( **c ) ) 
         {
            hfc.push_back( *c );
         }
         for( CharPtrVector::iterator hfci = hfc.begin(); hfci != hfc.end(); ++hfci )
         {
            (*hfci)-&gt;attackiere( wenAuchImmer );
         }
      }
   }
}

int main()
{
   // Vektor mit allen am Kampf beteiligten (Spieler + Monster)
   vector&lt;Charakter&gt; Kombatanten;

   // Tabelle mit Vektoren der Charaktere, nach Initiative AUFSTEIGEND sortiert
   InitiativeCharTabelle RangFolge = erstelle_rangfolge( Kombatanten );

   // Kampfrunden durchführen, bis alle die Schnauze voll haben
   do
   {
      fuehre_kampfrunde_durch( RangFolge );
   }
   while( !Schnauze_voll );
}
</code></pre>
<p>Edit: Logikfehler korrigiert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2118602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118602</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Tue, 13 Sep 2011 11:21:39 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Tue, 13 Sep 2011 21:22:49 GMT]]></title><description><![CDATA[<p>ich habe erstmal angefangen, meinen bisherigen Code an meinen neuen Wissenstand anzupassen. Ich bin aber gleich über einen Fehler gestolpert, weil ich wohl Variablen einer vererbten Klasse mit einem Konstruktor setzen will...<br />
Was kann ich tun? Wer den Kontext hier verfolgt hat, wird nachvollziehen können, dass eine Initialisierung direkt in der Klasse Enemy keine Option ist!</p>
<p>Achtung, ich habe einiges aus diesem Quelltext entfernt, weil übersichtlicher!<br />
Die Fehler:</p>
<pre><code>\main02.cpp(60): error C2614: 'Enemy': Unzulässige Elementinitialisierung: 'nIniMod' ist weder Basis noch Element
\main02.cpp(60): error C2614: 'Enemy': Unzulässige Elementinitialisierung: 'nDamage' ist weder Basis noch Element
\main02.cpp(60): error C2614: 'Enemy': Unzulässige Elementinitialisierung: 'nHPnow' ist weder Basis noch Element
\main02.cpp(60): error C2614: 'Enemy': Unzulässige Elementinitialisierung: 'nHPmax' ist weder Basis noch Element
\main02.cpp(60): error C2614: 'Enemy': Unzulässige Elementinitialisierung: 'nAC' ist weder Basis noch Element
\main02.cpp(60): error C2614: 'Enemy': Unzulässige Elementinitialisierung: 'nETW0' ist weder Basis noch Element
\main02.cpp(60): error C2614: 'Enemy': Unzulässige Elementinitialisierung: 'strClass' ist weder Basis noch Element
\main02.cpp(60): error C2614: 'Enemy': Unzulässige Elementinitialisierung: 'strRace' ist weder Basis noch Element
\main02.cpp(60): error C2614: 'Enemy': Unzulässige Elementinitialisierung: 'strName' ist weder Basis noch Element
</code></pre>
<p>Zeile 60 entspricht in dem folgenden Listing Zeile 36/37!</p>
<pre><code class="language-cpp">class Charakter
{
public:
	string strName;
	string strRace;
	string strClass;
	int nETW0;
	int nAC;
	int nHPmax;
	int nHPnow;
	int nDamage;
	int nInitiative;
	int nIniMod;
	string strEnemyName;
	int nEnemyAC;
	void fInitiative();
	int fAttack();
};

class Player : public Charakter
{
public:
	string strPlayerName;
};

class Enemy : public Charakter
{
public:
	Enemy(string vName,	string vRace, string vClass, int vETW0,	int vAC, int vHPmax, int vHPnow, int vDamage, int vIniMod);
	int nXP;
};

Enemy::Enemy(string vName, string vRace, string vClass, int vETW0, int vAC, int vHPmax, int vHPnow, int vDamage, int vIniMod) : strName(vName), strRace(vRace), strClass(vClass), nETW0(vETW0), nAC(vAC), nHPmax(vHPmax), nHPnow(vHPnow), nDamage(vDamage), nIniMod(vIniMod)
{
}

int main()
{
	//Zufallszahlengenerator mit Zeit initialisieren
	srand((unsigned int)time(0));

	//Spielercharakter wird deklariert
	Player Spieler;
	Spieler.strName = &quot;Arthus&quot;;
	Spieler.strRace = &quot;Mensch&quot;;
	Spieler.strClass = &quot;Kaempfer&quot;;
	Spieler.nETW0 = 14;
	Spieler.nAC = 4;
	Spieler.nHPmax = 35;
	Spieler.nHPnow = 35;
	Spieler.nDamage = 8;
	Spieler.nIniMod = 5;

	//Gegnercharakter wird deklariert
	Enemy Gegner(&quot;Ogercheffe&quot;,&quot;Oger&quot;,&quot;Berserker&quot;,14,5,23,23,10,5);
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2118953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118953</guid><dc:creator><![CDATA[thuering]]></dc:creator><pubDate>Tue, 13 Sep 2011 21:22:49 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Tue, 13 Sep 2011 21:26:13 GMT]]></title><description><![CDATA[<p>Kleiner Tipp: Die ungarische Notation ist hier nicht gerne gesehen, weil sie keine Vorteile bringt <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/2118959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118959</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 13 Sep 2011 21:26:13 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Wed, 14 Sep 2011 08:21:29 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/27440">@thuering</a><br />
Ich habe mal Google bemüht: <a href="http://www.dandwiki.com/wiki/SRD:Initiative" rel="nofollow">http://www.dandwiki.com/wiki/SRD:Initiative</a><br />
Hier steht, dass so lange neu gewürfelt wird, bis eine klare Reihenfolge da ist. Oder habe ich das falsch verstanden?</p>
<p>Zu deinem Problem:</p>
<pre><code class="language-cpp">class Character
{
public:
  enum Race
  {
    orc, elf, human,
  };
  enum Profession // class ist immer doof in C++ :)
  {
    warrior, mage, ranger,
  };
private:
  const Race race_;
  const Profession profession_;
  const unsigned int max_life_, damage_, initiative_;
  unsigned int current_life_;
public:
  Character(Race race, Profession profession, unsigned int max_life,
    unsigned int damage, unsigned int initiative)
    : race_(race), profession_(profession), max_life_(max_life),
      damage_(damage), initiative_(initiative), current_life_(max_life)
  {}
  void attack(Character&amp; character)
  {
    if (character.current_life_ &gt; this-&gt;damage_)
      character.current_life_ -= this-&gt;damage_;
    else
      character.current_life_ = 0;
  }
};

class Enemy : public Character
{
public:
  Enemy(Race race, Profession profession, unsigned int max_life,
    unsigned int damage, unsigned int initiative)
    : Character(race, profession, max_life, damage, initiative)
  {}
};
</code></pre>
<p>Damit solltest du so eine Grundidee bekommen haben. Du könntest natürlich auch attack() virtuell machen und dann wieder je nach Klasse ableiten etc., der Fantasie sind hier (fast) keine Grenzen gesetzt, versuche ein System aufzubauen, das du nachher leicht verwalten kannst. (Tipp: Wenn du die Basisklasse rein virtuell machst kannst du trotzdem einen std::vector&lt;Character*&gt; (man beachte den Pointer) erstellen.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2118975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118975</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 14 Sep 2011 08:21:29 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Fragen zur Programmierung mit Klassen on Wed, 14 Sep 2011 07:05:38 GMT]]></title><description><![CDATA[<p>In einer Initialisierungsliste kannst du nur Elemente initialisieren, die unmittelbar zur Klasse des zu konstruierenden Objekts gehören. In deinem Beispiel versuchst du in Initialisierungsliste der Klasse <code>Enemy</code> Elemente der Klasse <code>Charakter</code> zu initialisieren, was nicht erlaubt ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2119053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2119053</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Wed, 14 Sep 2011 07:05:38 GMT</pubDate></item></channel></rss>