<?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[API-Design: Baukasten-System?]]></title><description><![CDATA[<p>Grüss euch.<br />
Ich hoffe, ich kann mein &quot;Problem&quot; gut genug beschreiben, aber ich hab ne ziemlich (für mich) wichtige Frage bezüglich des Designs eines Moduls von mir.<br />
Geplant ist eine Rollenspiel-Bibliothek im Baukasten-System. Rollenspiele kennt Ihr alle, es gibt meistens einen PlayerCharakter, NPCs, Monster etc. Diese haben Attribute, Leben, meist Mana oder andere Formen der Energie bzw Zauberkraft.<br />
Dann gibts meistens noch ein Inventar, Skills etc.<br />
Daraus will ich jetzt einen Baukasten machen :).<br />
Ich hab auch schon einiges ausprobiert, aber so ganz gefällt mir mein Rohling noch nicht.</p>
<p>Momentan schauts so (ungefähr) aus mit den Klassen:<br />
Charakter -&gt; enthält alles was ein Charakter braucht. EP, Mana, Leben<br />
Attribut -&gt; Hat einen Namen, eine ID, ein Offset, einen Wert und Funktionen zum Inkrementieren und Dekrementieren.</p>
<p>Die Attribute werden einfach erstellt und der Klasse Charakter zugewiesen, die packt das ganze in eine Liste. Jedes Attribut hat ein Offset um das es beim Level-UP erhöht wird. Dazu besteht noch die Möglichkeit Leben und Mana ein Attribut zuzuweisen und aus dem Wert das Leben/Mana zu berechnen.</p>
<p>Hier mal ein Beispiel:</p>
<pre><code class="language-cpp">myCharacter() : rpgCharacter()
    {
        rpgCharacterAttribute m_strength(_T(&quot;Strength&quot;), 20, 1, ID_STRENGTH);
        rpgCharacterAttribute m_intelligence(_T(&quot;Intelligence&quot;), 50, 1, ID_INTELLIGENCE);    
        rpgCharacterAttribute m_stamina(_T(&quot;Stamina&quot;), 30, 2, ID_STAMINA);

        this-&gt;addAttribute(m_strength);
        this-&gt;addAttribute(m_stamina);
        this-&gt;addAttribute(m_intelligence);

        this-&gt;setEXPOffset(1000);
        this-&gt;setListener(this);
        this-&gt;setManaAttribute(ID_INTELLIGENCE);
        this-&gt;setManaOffset(15);
        this-&gt;setHitpointAttribute(ID_STAMINA);
        this-&gt;setHitpointsOffset(10);
    }
</code></pre>
<p>Mit einem Anfangswert der Intelligenz von 50 und einem Offset von 15 hätte unser Charakter nun 750 Mana. Ich hoffe das ist nachvollziehbar. (setExpOffset(1000) heisst btw. dass unser Character von lvl 1 auf 2 1000 EP braucht, von 2 auf 3 dann 2000 etc).</p>
<p>Nun habe ich mir aber gedacht, dass nicht jeder so ein automatisches System mag. Es gibt ja auch genug RPGs wo man die Attribute selbst verteilen kann. <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="😉"
    /> Und der Code wird immer mehr, wenn ich auch noch das manuelle Verändern da reinpacke -&gt; wird evtl. zu langsam bzw zuviel Overhead.<br />
Deswegen dachte ich mir, mehr Interfaces zu verwenden und versch. Methoden für so etwas einzubauen.<br />
Zum Beispiel:<br />
IAttribute: Davon gibts dann AutoAttribute und ManualAttribute.<br />
Verwendung sollte klar sein.<br />
Ausserdem würde ich dann noch das ganze Gerümpel mit EP etc auslagern in extra Klassen.<br />
Würdert Ihr das so designen oder habt Ihr andere Ideen?<br />
Ich bitte um eure Tipps und Ratschläge :).<br />
Danke euch vielmals im voraus.<br />
rya.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/201119/api-design-baukasten-system</link><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 19:42:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/201119.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 24 Dec 2007 19:44:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to API-Design: Baukasten-System? on Mon, 24 Dec 2007 19:44:08 GMT]]></title><description><![CDATA[<p>Grüss euch.<br />
Ich hoffe, ich kann mein &quot;Problem&quot; gut genug beschreiben, aber ich hab ne ziemlich (für mich) wichtige Frage bezüglich des Designs eines Moduls von mir.<br />
Geplant ist eine Rollenspiel-Bibliothek im Baukasten-System. Rollenspiele kennt Ihr alle, es gibt meistens einen PlayerCharakter, NPCs, Monster etc. Diese haben Attribute, Leben, meist Mana oder andere Formen der Energie bzw Zauberkraft.<br />
Dann gibts meistens noch ein Inventar, Skills etc.<br />
Daraus will ich jetzt einen Baukasten machen :).<br />
Ich hab auch schon einiges ausprobiert, aber so ganz gefällt mir mein Rohling noch nicht.</p>
<p>Momentan schauts so (ungefähr) aus mit den Klassen:<br />
Charakter -&gt; enthält alles was ein Charakter braucht. EP, Mana, Leben<br />
Attribut -&gt; Hat einen Namen, eine ID, ein Offset, einen Wert und Funktionen zum Inkrementieren und Dekrementieren.</p>
<p>Die Attribute werden einfach erstellt und der Klasse Charakter zugewiesen, die packt das ganze in eine Liste. Jedes Attribut hat ein Offset um das es beim Level-UP erhöht wird. Dazu besteht noch die Möglichkeit Leben und Mana ein Attribut zuzuweisen und aus dem Wert das Leben/Mana zu berechnen.</p>
<p>Hier mal ein Beispiel:</p>
<pre><code class="language-cpp">myCharacter() : rpgCharacter()
    {
        rpgCharacterAttribute m_strength(_T(&quot;Strength&quot;), 20, 1, ID_STRENGTH);
        rpgCharacterAttribute m_intelligence(_T(&quot;Intelligence&quot;), 50, 1, ID_INTELLIGENCE);    
        rpgCharacterAttribute m_stamina(_T(&quot;Stamina&quot;), 30, 2, ID_STAMINA);

        this-&gt;addAttribute(m_strength);
        this-&gt;addAttribute(m_stamina);
        this-&gt;addAttribute(m_intelligence);

        this-&gt;setEXPOffset(1000);
        this-&gt;setListener(this);
        this-&gt;setManaAttribute(ID_INTELLIGENCE);
        this-&gt;setManaOffset(15);
        this-&gt;setHitpointAttribute(ID_STAMINA);
        this-&gt;setHitpointsOffset(10);
    }
</code></pre>
<p>Mit einem Anfangswert der Intelligenz von 50 und einem Offset von 15 hätte unser Charakter nun 750 Mana. Ich hoffe das ist nachvollziehbar. (setExpOffset(1000) heisst btw. dass unser Character von lvl 1 auf 2 1000 EP braucht, von 2 auf 3 dann 2000 etc).</p>
<p>Nun habe ich mir aber gedacht, dass nicht jeder so ein automatisches System mag. Es gibt ja auch genug RPGs wo man die Attribute selbst verteilen kann. <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="😉"
    /> Und der Code wird immer mehr, wenn ich auch noch das manuelle Verändern da reinpacke -&gt; wird evtl. zu langsam bzw zuviel Overhead.<br />
Deswegen dachte ich mir, mehr Interfaces zu verwenden und versch. Methoden für so etwas einzubauen.<br />
Zum Beispiel:<br />
IAttribute: Davon gibts dann AutoAttribute und ManualAttribute.<br />
Verwendung sollte klar sein.<br />
Ausserdem würde ich dann noch das ganze Gerümpel mit EP etc auslagern in extra Klassen.<br />
Würdert Ihr das so designen oder habt Ihr andere Ideen?<br />
Ich bitte um eure Tipps und Ratschläge :).<br />
Danke euch vielmals im voraus.<br />
rya.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1425713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1425713</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 24 Dec 2007 19:44:08 GMT</pubDate></item><item><title><![CDATA[Reply to API-Design: Baukasten-System? on Tue, 25 Dec 2007 10:41:11 GMT]]></title><description><![CDATA[<p>Hi, coole Idee. Hast du denn konkrete Rollenspielsysteme im Sinn, an dem du dich orientieren willst (denn irgendwelche Kompromisse wirst du stets machen müssen)?<br />
Ich habe selber mal vor Jahren einen Charakter-Editor für AD&amp;D (damals noch in reinem C) erstellt, dieses bestand aus mehreren Dutzend Strukturen und Tabellen.<br />
Und angedacht hatte ich es auch schon, dies objektorientiert in C++ umzusetzen, jedoch widersprechen sich meistens Komplexität und Einfachheit der Anwendbarkeit.</p>
<p>Du solltest auf jeden Fall erst einmal mit abstrakten Interface-Klassen anfangen. Allein schon die Festlegung auf Leben, Mana, Level usw. kann evtl. schon zu konkret sein (insbesondere die Datentypen bzw. evtl. Datenbereiche).<br />
Und du solltest statt einfacher Konstanten erwägen, Funktionen aufzurufen, um z.B. Formeln zu berechnen (meistens ist ja der EXP-Wert nicht konstant pro Levelaufstieg, sondern exponentiell: z.B. 0, 1000, 2500, 5000, 10000, 20000, ...).</p>
<p>Und zu jedem Attribut kann es ja wieder andere abhängige Eigenschaften geben (meistens als Tabelle hinterlegt),z.B.<br />
Stärke: Schadensmodifikator, Traglast, ...<br />
Geschicklichkeit: Fernwaffenbonus, Ausweichen, ...<br />
Intelligenz: Anzahl der Zaubersprüche, ...<br />
...</p>
<p>Du solltest also generell vieles ermöglichen können (in den Interface-Basisklassen).<br />
Und am besten, du versuchst dann anhand von evtl. 2-3 verschiedenen Systemen, dir daraus dann konkrete Klassen zu entwickeln, damit du evtl. Design-Fehler schon früh berüchsichtigen (beseitigen) kannst.</p>
<p>Bei konkreteren Fragen könnte ich dir dann auch weiterhin helfen.<br />
(da ich bis vor kurzem bei einer Computerspielefirma tätig war - und diese ein erfolgreiches Rollenspiel veröffentlicht haben - weiß ich, welche Komplexität erforderlich ist - selbst wenn man ein konkretes System verwendet!)</p>
<p>P.S. Auf meiner Homepage kannst du im Download-Bereich unter &quot;Spiele&quot; u.a. den AD&amp;D-Charakter-Editor runterladen: <a href="http://www.bitel.net/dghm1164/downloads.html" rel="nofollow">http://www.bitel.net/dghm1164/downloads.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1425836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1425836</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Tue, 25 Dec 2007 10:41:11 GMT</pubDate></item><item><title><![CDATA[Reply to API-Design: Baukasten-System? on Tue, 25 Dec 2007 10:46:40 GMT]]></title><description><![CDATA[<p>Grob werde ich mich an vorhandenen Rollenspielen orientieren, das ganze aber so allgemein wie möglich halten. Ich möchte erstmal nur eine Grundstruktur liefern, ein konkretes, fertiges System vllt als kleinen Bonus.<br />
Da ich auch AD&amp;D-Fan bin, hab ich schonmal eine OpenSource-Lib begonnen, wo ich die Regeln umsetzen wollte, scheiterte aber daran, dass man dies ohne Lizenz nicht darf. -.- Hab bei Hasbro nachgefragt und musste das Projekt dann kippen.</p>
<p>Wegen den EP... bisher hab ich eben das mit den Offsets verwendet. Und dann einfach das ganze so berechnet:</p>
<pre><code class="language-cpp">void rpgLib::rpgCharacter::receiveEXP( const uint exp )
{
    m_exp += exp;
    return checkEP();
}

void rpgLib::rpgCharacter::checkEP()
{    
    float level_up = 0.0f;

    // Calculate EP needed for this level
    level_up = m_expOffset * m_level * ( m_level + 1) / 2;

    if(m_exp &gt;= level_up)
    {
        // Increase Level.
        m_level ++;

        // Level Attributes
        rpgAttributeList::iterator it_begin = m_attribList.begin();

        while (it_begin != m_attribList.end())
        {
           it_begin-&gt;doLevelUp();
           it_begin++;
        }

        // Calculate new Mana             
        this-&gt;calcMana();

        // Calculate new HP.
        this-&gt;calcHP();

        // Notify about level up
        rpgCharEventList::iterator it_beginEvents = m_eventList.begin();                
        while (it_beginEvents != m_eventList.end())
        {
            rpgICharacterListener *listener = NULL;
            listener = *it_beginEvents;

            if (listener != NULL)
            {
                listener-&gt;onLevelUp(m_level);
            }        

            it_beginEvents++;
        }   

        return this-&gt;checkEP();     
    }
}
</code></pre>
<p>Hab aber noch mit dem Gedanken gespielt, einfach eine Array oder eine Liste zu erwarten, in dem alle Werte von LvL 1 bis Max. Level abgespeichert sind. So kann man die EP auch manuell steuern.<br />
Wie machen das eigentlich prof. Spiele? Würde mich mal brennend interessieren :D.<br />
Ich mach mich dann mal an die Interfaces <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    />.<br />
Hast du eine EMail oder ICQ? Dann könnt ich dir hin und wieder was mailen, falls Du Dich dafür interessierst :). Bzw den SVN-Zugang.<br />
Ich wollte das ganze jetzt eh neu beginne, das waren wie gesagt nur erste Tests, ob das so geht, wie ich mir das anfangs vorgestellt habe.<br />
rya.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1425842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1425842</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Tue, 25 Dec 2007 10:46:40 GMT</pubDate></item><item><title><![CDATA[Reply to API-Design: Baukasten-System? on Tue, 25 Dec 2007 10:49:20 GMT]]></title><description><![CDATA[<p>hi. ich habe nur mal den quelltext überflogen.<br />
habt ihr einen this-fetisch? oO<br />
und warum gibt eine void funktion einen rückgabewert zurück? ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1425844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1425844</guid><dc:creator><![CDATA[ChrisJ]]></dc:creator><pubDate>Tue, 25 Dec 2007 10:49:20 GMT</pubDate></item><item><title><![CDATA[Reply to API-Design: Baukasten-System? on Tue, 25 Dec 2007 11:13:53 GMT]]></title><description><![CDATA[<p>Hi Scorcher24,</p>
<p>meine E-Mail-Adresse steht auf meiner Download-Seite.</p>
<p>Und was mir zu deinem Source auffällt:<br />
du mußt lernen, noch mehr zu abstrahieren (und möglichst noch kleinere Funktionsblöcke zu schreiben), aber evtl. könnte ich ja direkt mit deinen Sourcen arbeiten, bzw. Teile davon dann selbst erstellen und dann dir schicken (oder direkt per SVN).</p>
<p>Hast du denn schon mal ein einfaches Klassendiagramm erstellt (damit du den Umfang abschätzen kannst)?</p>
<p>Und welchen Compiler (+OS) verwendest du?</p>
<p>P.S. das &quot;this-&gt;&quot; finde ich auch unnötig...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1425848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1425848</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Tue, 25 Dec 2007 11:13:53 GMT</pubDate></item><item><title><![CDATA[Reply to API-Design: Baukasten-System? on Tue, 25 Dec 2007 12:56:32 GMT]]></title><description><![CDATA[<p><a href="http://www.th-h.de/" rel="nofollow">http://www.th-h.de/</a><br />
Die hier? In deinem Profil steht leider nix drin -.-. Oder ich bin zu blöd *g*.</p>
<blockquote>
<p>Und was mir zu deinem Source auffällt:<br />
du mußt lernen, noch mehr zu abstrahieren (und möglichst noch kleinere Funktionsblöcke zu schreiben), aber evtl. könnte ich ja direkt mit deinen Sourcen arbeiten, bzw. Teile davon dann selbst erstellen und dann dir schicken (oder direkt per SVN).</p>
</blockquote>
<p>Hmm, ja ich hab mir halt alles selbst beigebracht und meine Freunde haben alle ganz andere interessen :D. Hobby halt :P. Aber ich versuche mich zu verbessern.</p>
<blockquote>
<p>Hast du denn schon mal ein einfaches Klassendiagramm erstellt (damit du den Umfang abschätzen kannst)?</p>
</blockquote>
<p>Ja, im Kopf. Hab leider bisher kein gutes UML-Tool für Windows gefunden und für Linux hab ich momentan keinen Platz auf der Platte... alles voll. Aber die neue Festplatte ist in Arbeit :P.<br />
Wegen den this-&gt;: Ja, ich weiss, dass es nicht nötig ist, das war nur zu Kontrollzwecken. Es macht ja keinen Unterschied ob das da jetzt steht oder nicht. Auf der anderen Seite sieht man auch gleich, dass es eben aus der Klasse kommt. Von daher egal.</p>
<blockquote>
<p>und warum gibt eine void funktion einen rückgabewert zurück? ^^</p>
</blockquote>
<p>Sie gibt keinen Wert zurück. Ich verlasse die Funktion in eine andere. Zumindest der g++ hat nicht gemecker mit &quot;g++ --ansi&quot;. <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>Compiler verwende ich Visual C++ 2005 (war ein Geschenk nach einem Praktikum in einer Softwarefirma) von M$ und Ankh-SVN-Plugin. Werde aber schauen, dass das ganze in purem C++ geschrieben ist und evtl. gleich ein Bakefile dazu machen, dann kann man das auf jeder Plattform kompilieren.<br />
So far. <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 />
rya.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1425877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1425877</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Tue, 25 Dec 2007 12:56:32 GMT</pubDate></item><item><title><![CDATA[Reply to API-Design: Baukasten-System? on Tue, 25 Dec 2007 13:07:05 GMT]]></title><description><![CDATA[<p>Scorcher24 schrieb:</p>
<blockquote>
<blockquote>
<p>Hast du denn schon mal ein einfaches Klassendiagramm erstellt (damit du den Umfang abschätzen kannst)?</p>
</blockquote>
<p>Ja, im Kopf. Hab leider bisher kein gutes UML-Tool für Windows gefunden und für Linux hab ich momentan keinen Platz auf der Platte... alles voll. Aber die neue Festplatte ist in Arbeit :P.</p>
</blockquote>
<p>Dia macht sich ganz gut für einfache Diagramme <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><a href="http://live.gnome.org/Dia" rel="nofollow">http://live.gnome.org/Dia</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1425883</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1425883</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Tue, 25 Dec 2007 13:07:05 GMT</pubDate></item><item><title><![CDATA[Reply to API-Design: Baukasten-System? on Tue, 25 Dec 2007 13:13:29 GMT]]></title><description><![CDATA[<p>Sieh dir mal component-based entity management an. Die Grundidee davon ist, dass man einzelne Komponenten wie Destroyable (mit health, maxhealth), Moveable (speed), Collideable (collisionRange) usw. hat und die konkreten Objekte wie ein Monster aus solchen zusammensetzt.</p>
<p>Sowas wie eine Monster-Klasse gibt es dort nicht. Stattdessen ist jede Entität nur eine ID, anhand derer man die einzelnen Komponenten holen kann. Die Komponenten können miteinander über ein Message-System kommunizieren und jede Komponente entscheidet, an welchen Messages sie interessiert ist.</p>
<p>Der Vorteil ist, dass das ganze System data-driven ist, das heißt du kannst dir einen Editor zum zusammenklicken basteln, und damit alle NPCs usw. erzeugen, ohne an einer gratligen Vererbungshierarchie 100mal zu refactoren - es geht komplett ohne programmieren und du hast auch nicht die üblichen Designprobleme, die du mit einer Klassenhierarchie hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1425885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1425885</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 25 Dec 2007 13:13:29 GMT</pubDate></item><item><title><![CDATA[Reply to API-Design: Baukasten-System? on Tue, 25 Dec 2007 14:42:01 GMT]]></title><description><![CDATA[<p>Optimizer:<br />
So in die Richtung hab ich schon gedacht, nur wüsste ich jetzt nicht, wie ich so ein Nachrichten-System umsetzen sollte. Was ich mir vorstellen könnte, war ein Messaging-Manager, an dem sich alle Klassen anmelden (Jede Instanz für sich) und der dann jede Nachricht delegiert. Aber ich stell mir das gerade iwie voll langsam vor. Angenommen du hast 200 NPC's dann müsste jede Message in einer Schleife (oder wie macht man das?) 200x verschickt werden. Man könnte natürlich auch wieder dem Manager vorher mitteilen welche Nachrichten welche Klasse bzw Objekt haben will und welche nicht. Das wiederrum wäre mMn ein großer Sortier- und Verwaltungsaufwand.. oder?<br />
Bin mit solchen System ehrlich gesagt nicht richtig vertraut :).<br />
Ich hätte es halt so gemacht, dass es halt solche Listener gibt und die Klassen die Nachrichten dann selber versenden, bzw selbst die Listen führen... naja mal schauen, was ich da hinbasteln kann :).</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/15276">@darthdespotism</a>:<br />
Danke :). Kannt ich gar nicht das Prog. Verwende eigentlich KDE und da gibts kUML. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>edit:<br />
So, hier is mal ein kleines Diagramm mit dem Abschnitt für den Charakter:<br />
<a href="http://img524.imageshack.us/my.php?image=diagramrpglibwu0.jpg" rel="nofollow">http://img524.imageshack.us/my.php?image=diagramrpglibwu0.jpg</a><br />
rya.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1425899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1425899</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Tue, 25 Dec 2007 14:42:01 GMT</pubDate></item><item><title><![CDATA[Reply to API-Design: Baukasten-System? on Tue, 25 Dec 2007 15:03:10 GMT]]></title><description><![CDATA[<p>Bei deinem Diagramm ... fällt dir da nciht was auf?<br />
IExperience, IEnergy und IHealth haben alle so ziemlich die selben Werte (IEnergie hat noch einen Max/Min-Wert ...). Was kann man dann daraus machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1425955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1425955</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Tue, 25 Dec 2007 15:03:10 GMT</pubDate></item><item><title><![CDATA[Reply to API-Design: Baukasten-System? on Tue, 25 Dec 2007 15:08:52 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<p>Bei deinem Diagramm ... fällt dir da nciht was auf?<br />
IExperience, IEnergy und IHealth haben alle so ziemlich die selben Werte (IEnergie hat noch einen Max/Min-Wert ...). Was kann man dann daraus machen?</p>
</blockquote>
<p>Hmm, noch ein Interface mit get/set-Methoden und dem Wert? <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 />
Ist das nicht ein wenig zuviel des guten?<br />
rya.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1425959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1425959</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Tue, 25 Dec 2007 15:08:52 GMT</pubDate></item><item><title><![CDATA[Reply to API-Design: Baukasten-System? on Tue, 25 Dec 2007 15:13:19 GMT]]></title><description><![CDATA[<p>Also ich hab jetzt bei vielen Klassen mit gleichen Eigenschaften und Methoden irgendwie an Templates gedacht, aber ob (D)Evil das auch gedacht hat weiß ich nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1425964</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1425964</guid><dc:creator><![CDATA[OhneName]]></dc:creator><pubDate>Tue, 25 Dec 2007 15:13:19 GMT</pubDate></item><item><title><![CDATA[Reply to API-Design: Baukasten-System? on Tue, 25 Dec 2007 15:17:43 GMT]]></title><description><![CDATA[<p>OhneName schrieb:</p>
<blockquote>
<p>Also ich hab jetzt bei vielen Klassen mit gleichen Eigenschaften und Methoden irgendwie an Templates gedacht, aber ob (D)Evil das auch gedacht hat weiß ich nicht.</p>
</blockquote>
<p>Hehe, ja das ist wahrscheinlich:<br />
<a href="http://img442.imageshack.us/my.php?image=diagramrpglibjt1.jpg" rel="nofollow">http://img442.imageshack.us/my.php?image=diagramrpglibjt1.jpg</a><br />
So?^^<br />
rya.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1425967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1425967</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Tue, 25 Dec 2007 15:17:43 GMT</pubDate></item><item><title><![CDATA[Reply to API-Design: Baukasten-System? on Tue, 25 Dec 2007 17:54:43 GMT]]></title><description><![CDATA[<p>Scorcher24 schrieb:</p>
<blockquote>
<p>Optimizer:<br />
So in die Richtung hab ich schon gedacht, nur wüsste ich jetzt nicht, wie ich so ein Nachrichten-System umsetzen sollte.</p>
</blockquote>
<p>Ja, das ist nicht völlig trivial. Ich habe so ein System mal vor kurzem umgesetzt und es gefällt mir wirklich ganz gut. Aber am Nachrichten-System feilsche ich auch noch. Das hängt wahrscheinlich vom Einzelfall ab, wie man das genau aufzieht, aber im Grunde gibt es immer sowas wie einen Entitätenmanager, der Nachrichten verschickt, broadcasted und über den man Komponenten getten kann. Wenn du danach suchst, findest du sicher auch ein paar Beispiele.</p>
<blockquote>
<p>Aber ich stell mir das gerade iwie voll langsam vor.</p>
</blockquote>
<p>Irgendeinen Tod muss man natürlich sterben. Performance-Probleme dürftest du aber eher bei den Berechnungen, die durch Nachrichten indirekt ausgelöst werden (zum Beispiel wenn es eine Wegsuche auslöst) kriegen und nicht beim Übermitteln selber.</p>
<blockquote>
<p>Angenommen du hast 200 NPC's dann müsste jede Message in einer Schleife (oder wie macht man das?) 200x verschickt werden. Man könnte natürlich auch wieder dem Manager vorher mitteilen welche Nachrichten welche Klasse bzw Objekt haben will und welche nicht. Das wiederrum wäre mMn ein großer Sortier- und Verwaltungsaufwand.. oder?</p>
</blockquote>
<p>Der Aufwand hält sich eigentlich in Grenzen. Ich hab sowas wie eine subscribersByType-Map, die sich den Nachrichten-Typ anschaut und die Liste der interessieren Komponenten holt. Das skaliert dann auch besser mit der Objektzahl, weil man nur die Interessenten benachrichtigt.</p>
<blockquote>
<p>Ich hätte es halt so gemacht, dass es halt solche Listener gibt und die Klassen die Nachrichten dann selber versenden, bzw selbst die Listen führen...</p>
</blockquote>
<p>Das Problem hierbei ist, dass du die Empfänger kennen musst, was das ganze System ad absurdum führt. Es ist besser, wenn eine Komponente möglichst wenig von allen anderen weiß.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1426013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1426013</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 25 Dec 2007 17:54:43 GMT</pubDate></item><item><title><![CDATA[Reply to API-Design: Baukasten-System? on Tue, 25 Dec 2007 19:07:18 GMT]]></title><description><![CDATA[<p>Auch wenns mir eigentlich widerstrebt, weil ich Boost nicht so mag, aber wäre Boost::Signals hier ne Möglichkeit? Vielleicht nicht ganz das, was man möchte, aber man könnte doch damit einen Manager implementieren, bei dem sich alle Objekte anmelden (über ein Singleton), die bei bestimmten Events benachrichtigt werden möchten und dabei eine oder mehrere Event-Typen (über eine einfache ID) angeben. Je nach der ID wird man dann in eine Liste einsortiert und benachrichtigt, wenn ein Event eintritt.<br />
So ein kleines Beispiel mit pseudo-code:</p>
<pre><code class="language-cpp">enum eEvents
{
   ID_LEVELUP = 1,
   ID_FOOBAR,
};

class Experience
{
   receiveEP()
   {
       if (level_up)
       { 
          EventManager::notify(ID_LEVELUP);
       }
   }
};

class MyCharacter
{
    MyCharacter()
    {
      EventManager::register(ID_LEVELUP, this);
    }

    // Afaik muss man bei Boost diesen Operator implementieren um 
    // die Klasse übergeben zu können....
    void operator()()
    {
        // Handle level up
    }
};
</code></pre>
<p>Wäre vllt die einfachste Möglichkeit die mir so spontan einfällt. Weil wenn ich ganz ehrlich bin, reicht mein Wissen für so ein Modell wie du das genannt hast, (noch) nicht aus :). Übernehen möchte ich mich halt auch nicht. :xmas1:<br />
Eine andere Idee wäre es, den EventManager bzw das EventSystem von wxWidgets zu benutzen. Die Lib ist XPlatform, wäre also kein Problem von der Portabilität, allerdings ist das Einbinden eher unlustig. Ich möchte, dass der Code auf Linux/Windows/MacOS läuft.<br />
Aber an der Stelle nochmal vielen Dank für eure Ideen und Hilfe.<br />
rya.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1426039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1426039</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Tue, 25 Dec 2007 19:07:18 GMT</pubDate></item></channel></rss>