<?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[OO Ansatz für Strategie Spiel - Designfrage]]></title><description><![CDATA[<p>Hallo Forianer</p>
<p>Ich möchte ein Strategiespiel machen, und zwar im Stil von Siedler. ( Nur in der Konsole. <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 />
Habe also Häuser, Arbeiter und Waren, diese sollen transportiert werden.<br />
Hab mir dazu auch schon ne Vererbungshierarchie ausgedacht:</p>
<pre><code class="language-cpp">// Pseudo UML ;)

     Building                       Worker
    /   |      \                 /     |    \         
   /    |       \               /      |     \        
Farm   Mill    Bakery        Farmer  Miller  Baker    Bearer (Träger)

       Good
    /   |    \  
   /    |     \       
Wheat  Meal  Bread

Building              Worker             Bearer
-----------           --------           --------
Worker*               Building*          Source (Building)* 
Raw(Good)*                               Target (Building)*	
Product(Good)*
Entry
Exit

Good
-----------
Stacksize
</code></pre>
<p>Nun weiss ich nicht recht, wie ich die Beziehung untereinander machen soll. Der Träger sollte zum Haus gehen, wenn da Waren liegen, und diese zum nächsten bringen. Der Müller soll dann anfangen zu mahlen, wenn er etwas Weizen bekommen hat. Und so weiter..<br />
Ich könnte nun einerseits in jeder Runde mit if Abfragen alle Gebäudeein und ausgänge auf Waren prüfen, aber das scheint mir nicht die beste Lösung zu sein.<br />
Hätte jemand einen Designvorschlag?<br />
Da gibts doch sicher so ein tolles &quot;Pattern&quot; was geeignet ist <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/topic/153657/oo-ansatz-für-strategie-spiel-designfrage</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 22:43:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/153657.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 19 Jul 2006 12:39:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Wed, 19 Jul 2006 12:39:33 GMT]]></title><description><![CDATA[<p>Hallo Forianer</p>
<p>Ich möchte ein Strategiespiel machen, und zwar im Stil von Siedler. ( Nur in der Konsole. <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 />
Habe also Häuser, Arbeiter und Waren, diese sollen transportiert werden.<br />
Hab mir dazu auch schon ne Vererbungshierarchie ausgedacht:</p>
<pre><code class="language-cpp">// Pseudo UML ;)

     Building                       Worker
    /   |      \                 /     |    \         
   /    |       \               /      |     \        
Farm   Mill    Bakery        Farmer  Miller  Baker    Bearer (Träger)

       Good
    /   |    \  
   /    |     \       
Wheat  Meal  Bread

Building              Worker             Bearer
-----------           --------           --------
Worker*               Building*          Source (Building)* 
Raw(Good)*                               Target (Building)*	
Product(Good)*
Entry
Exit

Good
-----------
Stacksize
</code></pre>
<p>Nun weiss ich nicht recht, wie ich die Beziehung untereinander machen soll. Der Träger sollte zum Haus gehen, wenn da Waren liegen, und diese zum nächsten bringen. Der Müller soll dann anfangen zu mahlen, wenn er etwas Weizen bekommen hat. Und so weiter..<br />
Ich könnte nun einerseits in jeder Runde mit if Abfragen alle Gebäudeein und ausgänge auf Waren prüfen, aber das scheint mir nicht die beste Lösung zu sein.<br />
Hätte jemand einen Designvorschlag?<br />
Da gibts doch sicher so ein tolles &quot;Pattern&quot; was geeignet ist <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/1100353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1100353</guid><dc:creator><![CDATA[Ooptimist]]></dc:creator><pubDate>Wed, 19 Jul 2006 12:39:33 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Wed, 19 Jul 2006 12:56:00 GMT]]></title><description><![CDATA[<blockquote>
<p>Der Müller soll dann anfangen zu mahlen, wenn er etwas Weizen bekommen hat.</p>
</blockquote>
<p>Wenn das eigentich: &quot;Der Müller soll dann anfangen zu mahlen, wenn die Mühle Weizen bekommen hat.&quot; heißen soll dann klingt das sehr stark nach Observer-Pattern.</p>
<pre><code class="language-cpp">//Pseudocode:
muehle.addListener(mueller);

...

void Muehle::handleWeizenBekommen ()
{
    for(all listeners)
        listener.weizenDa();
}

...

Mueller extends MuehleListener
{
    virtual void weizenDa () { beginneZuMuehlen(); 
};
</code></pre>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1100365</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1100365</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Wed, 19 Jul 2006 12:56:00 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Wed, 19 Jul 2006 12:58:25 GMT]]></title><description><![CDATA[<p>Oder ist Mühle&lt;-&gt;Müller eine fixe 1:1-Beziehung alias &quot;Es hat jede Mühle auf jeden Fall genau einen Müller und jeder Müller gehör genau zu einer Mühle&quot;? Dann kannst du den Müller erstmal komplett kicken.</p>
<p>Dann muss nur noch die Mühle ein Event werfen, wenn sie neues Mehl zum Abholen hat. Der Träger ist dann EventListener und speichert das dann. Sobald er Zeit hat holt er dann das Mehl und bringt es zum Bestimmungsort.</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1100366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1100366</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Wed, 19 Jul 2006 12:58:25 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Wed, 19 Jul 2006 12:59:17 GMT]]></title><description><![CDATA[<p>Aber den Müller kannste dir eigentlich schenken, der sollte nur existieren müssen, wenn er &quot;auf dem Weg&quot; ist. Für die Mühle reicht es, wenn sie besetzt ist. Eigentlich brauchst du, wenn du was Siedlermäßiges machen willst sowieso nur Siedler und Soldaten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1100368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1100368</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Wed, 19 Jul 2006 12:59:17 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Wed, 19 Jul 2006 13:02:39 GMT]]></title><description><![CDATA[<p>Ja ne, den Müller brauchts schon. Kennst du Siedler? Erst Häuschen bauen, dann kommt ein Siedler rein und arbeitet.<br />
Ok, ev ist es unnötig, könnte einfach ein Member der Mühle sein:<br />
&quot;bool hasMiller&quot;</p>
<p>Zu deinem Codebrocken, was heisst &quot;extends&quot;?</p>
<p>Werde mal nach Observer googlen...<br />
Danke!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1100369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1100369</guid><dc:creator><![CDATA[Ooptimist]]></dc:creator><pubDate>Wed, 19 Jul 2006 13:02:39 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Wed, 19 Jul 2006 13:04:08 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9606">@.filmor</a></p>
<p>Zu spät gesehn, hast recht, brauche nur die Träger. ( Bin friedliebend <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/1100370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1100370</guid><dc:creator><![CDATA[Ooptimist]]></dc:creator><pubDate>Wed, 19 Jul 2006 13:04:08 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Wed, 19 Jul 2006 13:10:17 GMT]]></title><description><![CDATA[<p>Drüber steht Pseudocode, extends heißt hier öffentliche Vererbung.</p>
<p>Klar kenn ich die Siedler (II versteht sich). Und wenn du ein wenig &quot;generischer&quot; denken würdest wäre das kein Problem :). hasMiller ist Quatsch, aber die Basisklasse der &quot;einfachen&quot; Gebäude (Brunnen, Bäckerei, Fleischerei, Sägewerk und eben auch die Mühle) braucht nur eine Variable, die anzeigt, ob das Gebäude besetzt ist.<br />
Wenn ein neues Gebäude gebaut ist schaust du im Lager nach, ob du die nötigen Werkzeuge und einen Siedler hast, generierst einen mit dem entsprechenden Beruf und lässt ihn dann vom Lagerhaus oder Hauptgebäude zu seinem Arbeitsplatz laufen. Ist er da angekommen wird &quot;istBesetzt&quot; gesetzt und das Gebäude nimmt die Waren an.<br />
Mit Trägern kannst du es ähnlich machen, deren &quot;Arbeitsplatz&quot; ist dann halt zwischen 2 Fahnen (vorausgesetzt du willst das <em>echte</em> Wegsystem benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1100375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1100375</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Wed, 19 Jul 2006 13:10:17 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Wed, 19 Jul 2006 13:21:53 GMT]]></title><description><![CDATA[<p>Jetzt habe ich extra scho C++-like Pseudocode geschrieben und bewusst nicht &quot;implements MuehleListener&quot; geschrieben und dann alles umsonst *g*</p>
<p>extends ist dann in dem Fall<br />
class Muhele : public MuehleListener</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1100385</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1100385</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Wed, 19 Jul 2006 13:21:53 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Wed, 19 Jul 2006 13:36:55 GMT]]></title><description><![CDATA[<p>Schuldigung<br />
Kenn mich nur mit C++ etwas aus, Pseudocode ist mir nicht so geläufig.<br />
Und das &quot;generische Denken&quot; will ich ja grade üben <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="🙂"
    /> , darum bin ich froh über solche Hinweise <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>
<p>Danke an euch, ich wurschtel dann mal weida..<br />
greez</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1100396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1100396</guid><dc:creator><![CDATA[Ooptimist]]></dc:creator><pubDate>Wed, 19 Jul 2006 13:36:55 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Fri, 21 Jul 2006 11:17:28 GMT]]></title><description><![CDATA[<p>So, hallo nochmal</p>
<p>Hab dank der Forensuche <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-147713-and-highlight-is-%2Aobserver%2A.html" rel="nofollow">das hier</a> gefunden, und die Klassen Observer und Observable so ähnlich implementiert. Funktioniert auch soweit.<br />
So und nun Leite ich die Klassen Farm, Mill, Bakery und Path von den beiden und vom Basistyp Building ab. Nun will ich im Baumenu natürlich Instanzen erzeugen, mit new.<br />
Meine Frage ist nun, wo pack ich die rein?<br />
In nen Vektor für jeden Gebäudetyp, oder alle in einen für den Basistyp Building?<br />
Ich dachte ich mach ne Klasse Village (o.ä) wo ich nen Container für bereitstelle. Macht das irgendwie Sinn?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101738</guid><dc:creator><![CDATA[OOptimist]]></dc:creator><pubDate>Fri, 21 Jul 2006 11:17:28 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Fri, 21 Jul 2006 11:35:08 GMT]]></title><description><![CDATA[<p>Factory-Pattern?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101753</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Fri, 21 Jul 2006 11:35:08 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Fri, 21 Jul 2006 11:46:11 GMT]]></title><description><![CDATA[<p>Danke!<br />
Muss ich mal googeln...</p>
<p>Wo findet man eigentlich all die Patterns, und weiss wann man welches einsetzt. Ist das Erfahrung oder gibts da ein Schema F?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101762</guid><dc:creator><![CDATA[OOptimist]]></dc:creator><pubDate>Fri, 21 Jul 2006 11:46:11 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Fri, 21 Jul 2006 12:07:48 GMT]]></title><description><![CDATA[<p>eine übersicht inklusive beispielen gibt es hier:<br />
<a href="http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29" rel="nofollow">http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29</a><br />
(es gibt auch noch ne deutsche version, eventuell ist die ja verständlicher. die englische ist auf jeden fall ausführlicher.)</p>
<p>dann gibt es noch &quot;das&quot; referenzwerk von der &quot;gang of four&quot; mit dem gleichnamigen titel &quot;design pattern&quot;. das buch ist allerdings ziemlich trocken, und schwer verständlich, wenn man nicht wirklich fit im objekt-orientiertem design ist. dafür aber sehr vollständig (was die enthaltenen patterns betrifft) und somit ein sehr gutes nachschlagewerk.<br />
sehr viel lebendiger ist das buch von head first:<br />
<a href="http://www.amazon.de/gp/product/0596007124/302-2971792-6420869?v=glance&amp;n=52044011" rel="nofollow">http://www.amazon.de/gp/product/0596007124/302-2971792-6420869?v=glance&amp;n=52044011</a><br />
Das gibts auch auf deutsch, ist aber 20€ teurer und bei übersetzungen weiss man nie so recht ;).</p>
<p>auch nicht schlecht ist diese seite: <a href="http://www.dofactory.com/Patterns/Patterns.aspx" rel="nofollow">http://www.dofactory.com/Patterns/Patterns.aspx</a>. die erklärungen sind allerdings nicht besonders ausführlich, deswegen ist es auch eher als nachschlagewerk zu gebrauchen, für den fall, dass dir im forum ein &quot;Abstract Factory&quot; an den kopf geworfen wurde ;).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101783</guid><dc:creator><![CDATA[cin_off]]></dc:creator><pubDate>Fri, 21 Jul 2006 12:07:48 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Fri, 21 Jul 2006 17:51:40 GMT]]></title><description><![CDATA[<p>So, back again...<br />
Danke mal soweit für die Hilfe <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="👍"
    /><br />
Also nun hab ich ne Factory Methode, wenigstens mal das Gerüst.<br />
Die bau ich nun in mein Spiel ein.<br />
Meine Grundfrage von vorhin bleibt aber, wo speichere ich die erzeugten Objekte?<br />
In ner Extraklasse Village in nem Vector für Products?<br />
Gibts da etwa noch ein Manager Pattern <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <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>Und ne andere Frage ist nun, ein Gebäude das sowohl Waren empfängt und bereitstellt (fast alle ausser der Farm) erbt doch nun von 3 Klassen allein durch die Observer und Factory Geschichten. Zusätzlich dachte ich ja an eine Basisklasse Building. Das wären dann 4 Basisklassen. Ist das nicht etwas komplex bzw. ein unnötiger Overhead?</p>
<p>Letzte Frage für den Moment: Gibt es die Funktion GetType().Name auch bei C++ oder nur bei C#?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101980</guid><dc:creator><![CDATA[Ooptimist]]></dc:creator><pubDate>Fri, 21 Jul 2006 17:51:40 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Fri, 21 Jul 2006 18:55:19 GMT]]></title><description><![CDATA[<p>Ooptimist schrieb:</p>
<blockquote>
<p>Meine Grundfrage von vorhin bleibt aber, wo speichere ich die erzeugten Objekte?<br />
In ner Extraklasse Village in nem Vector für Products?<br />
Gibts da etwa noch ein Manager Pattern <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <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>
</blockquote>
<p>Brauchst du gar nicht. Du wirst ja irgendwo die ganzen Daten des Spielers abspeichern (z.B. auch die Position des Hauptgebäudes, das Volk, Statistiken etc.). Da kannst du einen Gebäude-Vektor einfügen. Aufgrund der Verwendungsart als Container ausschließlich polymorpher Objekte solltest du <a href="http://www.boost.org/libs/ptr_container/doc/ptr_vector.html" rel="nofollow">ptr_vector</a> verwenden. IIRC funktioniert der auch mit <a href="http://www.boost.org/libs/serialization/doc/index.html" rel="nofollow">Boost.Serialization</a>, sehr praktisch für Spielstände.</p>
<p>Ooptimist schrieb:</p>
<blockquote>
<p>Und ne andere Frage ist nun, ein Gebäude das sowohl Waren empfängt und bereitstellt (fast alle ausser der Farm) erbt doch nun von 3 Klassen allein durch die Observer und Factory Geschichten. Zusätzlich dachte ich ja an eine Basisklasse Building. Das wären dann 4 Basisklassen. Ist das nicht etwas komplex bzw. ein unnötiger Overhead?</p>
</blockquote>
<p>Du kannst noch einige Abstraktionen machen, z.B. eine Producer-Klasse die von Building abgeleitet ist und eine Receiver-Klasse, die wiederum von Producer abgeleitet ist (die &quot;Ist-ein&quot; Beziehung ergibt sich aus der Spiellogik, wenn du dich an die Siedler-Regeln hältst, sollte aber dennoch gut dokumentiert sein. Militärgebäude sind zwar auch Empfänger, aber wenn du nur deshalb Receiver nicht von Producer ableiten würdest, dann müsstest du Producer und Receiver virtuell ableiten, was hier aber nicht praktisch ist. Militärgebäude &quot;verarbeiten&quot; die ankommenden Rohstoffe ja auch ganz anders.</p>
<p>Ooptimist schrieb:</p>
<blockquote>
<p>Letzte Frage für den Moment: Gibt es die Funktion GetType().Name auch bei C++ oder nur bei C#?</p>
</blockquote>
<p>Nein. Es gibt nur typeid(typ).name, aber das ist nicht eindeutig. Wenn du so etwas haben willst, dann implementier es als virtuelle Methode.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101999</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Fri, 21 Jul 2006 18:55:19 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Sun, 23 Jul 2006 15:03:28 GMT]]></title><description><![CDATA[<p>Danke für den Tipp mit Serialization. Werd ich dann auch verwenden für Spielstände, aber soweit bin ich noch nicht. Boost hat ja noch einiges aufm Kasten <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="😮"
    /></p>
<p>.filmor schrieb:</p>
<blockquote>
<p>Ooptimist schrieb:</p>
<blockquote>
<p>Und ne andere Frage ist nun, ein Gebäude das sowohl Waren empfängt und bereitstellt (fast alle ausser der Farm) erbt doch nun von 3 Klassen allein durch die Observer und Factory Geschichten. Zusätzlich dachte ich ja an eine Basisklasse Building. Das wären dann 4 Basisklassen. Ist das nicht etwas komplex bzw. ein unnötiger Overhead?</p>
</blockquote>
<p>Du kannst noch einige Abstraktionen machen, z.B. eine Producer-Klasse die von Building abgeleitet ist und eine Receiver-Klasse, die wiederum von Producer abgeleitet ist (die &quot;Ist-ein&quot; Beziehung ergibt sich aus der Spiellogik, wenn du dich an die Siedler-Regeln hältst, sollte aber dennoch gut dokumentiert sein. Militärgebäude sind zwar auch Empfänger, aber wenn du nur deshalb Receiver nicht von Producer ableiten würdest, dann müsstest du Producer und Receiver virtuell ableiten, was hier aber nicht praktisch ist. Militärgebäude &quot;verarbeiten&quot; die ankommenden Rohstoffe ja auch ganz anders.</p>
</blockquote>
<p>Ok sorry, ich kapiers nicht mehr <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Im Observer-Pattern hab ich Observers und Observables, in der Factory hab ich Creators und Products. Kann ich die Factory und Observer Methoden nicht in die Basisklasse der Bereitsteller und Empfänger einfügen? Ich hab ja sonst ewig viele Abhängikeiten und Dateien, ich hab einfach keinen Überblick mehr, was wo ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1102606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1102606</guid><dc:creator><![CDATA[Ooptimist]]></dc:creator><pubDate>Sun, 23 Jul 2006 15:03:28 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Sun, 23 Jul 2006 15:39:32 GMT]]></title><description><![CDATA[<p>Habe nun nochmal die Hierarchie überdacht:</p>
<pre><code class="language-cpp">Factory						Observer

Creator      Product          Subject      Observer    
   |            |                |            |
   |            |                |            |
   |            |                |            |
Builder ----&gt;Building            |            |
   |            |                |            |
   |            |                |            |
   |            ---------------| |  --------| |
   |                          Pure          Pure
   |                          Producer      Receiver
   |                          |   |          |    | 
   |                          |   |          |    |
   |                          |   ----| |-----    |
   |                          |    Processor      |
   |                          |        |          |
   |                          |        |          |
   |                          |        |          |
Farm* Builder ------------&gt;Farm   Mill/Bakery  Storage       
*needed for each
spec. Building Type
</code></pre>
<p>Macht das Sinn so? Kritik wäre toll! <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/1102629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1102629</guid><dc:creator><![CDATA[Ooptimist]]></dc:creator><pubDate>Sun, 23 Jul 2006 15:39:32 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Mon, 24 Jul 2006 06:25:45 GMT]]></title><description><![CDATA[<p>Nochmal, willst du dich wirklich genau an die Siedler II halten? Dann gibt es keine Pure Receiver (außer Militärgebäude). Das ist das worauf ich beim letzten eingehen wollte.<br />
Das Farm ein Pure Producer ist ist genauso falsch (eine Farm nimmt Wasser an), wie dass Storage ein Pure Receiver ist (Lagerhäuser musst du definitiv gesondert behandeln).<br />
Zusätzlich heißt ein Pattern benutzen nicht zwingend, dass du deine Klassen auch direkt von den Observable etc. ableiten musst (hast du auch nicht getan und richtig erkannt) Das gehört in die (richtige) Basisklasse, dann ergibt sich alles implizit aus der Vererbungshierarchie. Deshalb hast du eine (fast) lineare Vererbung und daher fast keinen Overhead. Um virtuelle Methoden wirst du eh nicht herumkommen.<br />
Der sinnlose und unschöne Overhead ergibt sich erst, wenn du sowohl von Pure Receiver als auch Pure Producer ableitest (wie hier bei Mill/Bakery), such zu dem Thema mal nach dem &quot;deadly diamond&quot;. Siehe auch mein letztes Posting.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1102882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1102882</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Mon, 24 Jul 2006 06:25:45 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Mon, 24 Jul 2006 11:39:37 GMT]]></title><description><![CDATA[<p>Hallo Ooptimist,</p>
<p>schau dir doch einmal <a href="http://www.widelands.org" rel="nofollow">www.widelands.org</a> an. Widelands ist ein Spiel, das Siedler II sehr sehr ähnlich ist. Das Spiel ist Opensource, du kannst dir also einmal den Quellcode herunterladen und ansehen wie dort das Klassendesign realisiert wurde.</p>
<p>Ciao</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103076</guid><dc:creator><![CDATA[Helfer]]></dc:creator><pubDate>Mon, 24 Jul 2006 11:39:37 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Mon, 24 Jul 2006 12:02:22 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p>Nochmal, willst du dich wirklich genau an die Siedler II halten?.</p>
</blockquote>
<p>Nein eigentlich nicht. Schongar nicht Siedler II, wenn schon das erste <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="🙂"
    /> Habe nur das Prinzip gemeint, Bauspiel mit Wirtschaftssystem und Transport etc. aber ohne Milität. Ich mags friedlich.</p>
<p>.filmor schrieb:</p>
<blockquote>
<p>Dann gibt es keine Pure Receiver (außer Militärgebäude). Das ist das worauf ich beim letzten eingehen wollte.<br />
Das Farm ein Pure Producer ist ist genauso falsch (eine Farm nimmt Wasser an), wie dass Storage ein Pure Receiver ist (Lagerhäuser musst du definitiv gesondert behandeln).</p>
</blockquote>
<p>Ok, habs nicht genau genug gelesen. Du meintest die Reciever vom Producer ableiten. So gehts dann natürlcih. In meinem System soll es aber reine Produzenten geben, die Farmen, denn Wasser regnets vom Himmel <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="😉"
    /> Am Ende der Kette stehen Konsumenten. Die werd ich dann wohl nochmal extra machen und nur vom Observer ableiten.</p>
<p>.filmor schrieb:</p>
<blockquote>
<p>Zusätzlich heißt ein Pattern benutzen nicht zwingend, dass du deine Klassen auch direkt von den Observable etc. ableiten musst (hast du auch nicht getan und richtig erkannt) Das gehört in die (richtige) Basisklasse, dann ergibt sich alles implizit aus der Vererbungshierarchie. Deshalb hast du eine (fast) lineare Vererbung und daher fast keinen Overhead. Um virtuelle Methoden wirst du eh nicht herumkommen.<br />
Der sinnlose und unschöne Overhead ergibt sich erst, wenn du sowohl von Pure Receiver als auch Pure Producer ableitest (wie hier bei Mill/Bakery), such zu dem Thema mal nach dem &quot;deadly diamond&quot;. Siehe auch mein letztes Posting.</p>
</blockquote>
<p>Den &quot;deadly diamond&quot; kenn ich, ist mir gar nicht aufgefallen in meinem &quot;Diagramm&quot;. Gibt halt noch keine UML Tags für dieses Forum <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/1103091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103091</guid><dc:creator><![CDATA[Ooptimist]]></dc:creator><pubDate>Mon, 24 Jul 2006 12:02:22 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Mon, 24 Jul 2006 12:06:50 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Factory                        Observer

Builder      Product          Subject      Observer    
(Creator)       |                |            |
   |            |                |            |
   |            |                |            |
   |         Building            |            |
   |            |                |            |
   |            |                |            |
   |            ---------------| |           / \
   |                           | |           |  \
   |                         Producer        |   \
   |                          |   |          |    | 
   |                          |   |          |    |
   |                          |   ----| |-----    |
   |                          |       | |         |
   |                          |    Fabricator     |
   |                          |        |          |
   |                          |        |          |
   |                          |        |          |
Farm* Builder ------------&gt;Farm   Mill/Bakery  Consumer       
*needed for each
spec. Building Type
</code></pre>
<p>Also jetzt aber <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/1103096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103096</guid><dc:creator><![CDATA[Ooptimist]]></dc:creator><pubDate>Mon, 24 Jul 2006 12:06:50 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Mon, 24 Jul 2006 12:16:08 GMT]]></title><description><![CDATA[<p>Ooptimist schrieb:</p>
<blockquote>
<p>.filmor schrieb:</p>
<blockquote>
<p>Nochmal, willst du dich wirklich genau an die Siedler II halten?.</p>
</blockquote>
<p>Nein eigentlich nicht. Schongar nicht Siedler II, wenn schon das erste <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="🙂"
    /> Habe nur das Prinzip gemeint, Bauspiel mit Wirtschaftssystem und Transport etc. aber ohne Milität. Ich mags friedlich.</p>
</blockquote>
<p>Hey, was ist gegen S2 einzuwenden? Außerdem unterscheidet sich das Regelwerk doch iirc nicht besonders ...</p>
<p>Ooptimist schrieb:</p>
<blockquote>
<p>Ok, habs nicht genau genug gelesen. Du meintest die Reciever vom Producer ableiten. So gehts dann natürlcih. In meinem System soll es aber reine Produzenten geben, die Farmen, denn Wasser regnets vom Himmel <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="😉"
    /> Am Ende der Kette stehen Konsumenten. Die werd ich dann wohl nochmal extra machen und nur vom Observer ableiten.</p>
</blockquote>
<p>Welche Konsumenten?! Ohne Militärgebäude sind nur die Lagerhäuser &quot;Konsumenten&quot;.</p>
<p>Ooptimist schrieb:</p>
<blockquote>
<p>Den &quot;deadly diamond&quot; kenn ich, ist mir gar nicht aufgefallen in meinem &quot;Diagramm&quot;. Gibt halt noch keine UML Tags für dieses Forum <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>Man braucht kein UML, dass musst du spüren, junger Padawan ;). Im Ernst, wenn es zwei Vererbungspfade zur Basisklasse gibt hast du automatisch den &quot;Diamanten des Todes&quot; (klingt cooler ;)) und den gilt es imo zu vermeiden.</p>
<p>/edit Joa, das letzte Diagramm sieht gut aus. Übrigens, die Creator Objekte (bitte nicht Builder, dass ist mehrdeutig) kannst du schön in ein Template verfrachten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103101</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Mon, 24 Jul 2006 12:16:08 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Mon, 24 Jul 2006 12:19:10 GMT]]></title><description><![CDATA[<p>Hehe, ganz ruhig. Ich hab die ganze Siedler Reihe bis 4 durchgezockt, inklusive allen Mission CDs. Das 5 ist mir zu weit weg vom Original und der Charme ging auch verloren. 2 ist sicher das beste, nach 1 natürlich. :p</p>
<p>Naja, die Konsumenten halt. Irgendjemand geht dann zum &quot;Bäcker&quot; und kauft sich ein &quot;Brot&quot; und &quot;isst&quot; das dann. ( Auf den Farmen wächst kein Wheat sondern Weed, aber pssst.. <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>
<p>Ich finds halt graphisch dargestellt viel übersichtlicher, machs bei mir aber immer auf Papier. Nix UML. Mit Ascii Art ist halt etwas unschön, aber Du bist ja draus gekommen <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 />
Jetzt ists aber besser oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103106</guid><dc:creator><![CDATA[Ooptimist]]></dc:creator><pubDate>Mon, 24 Jul 2006 12:19:10 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Mon, 24 Jul 2006 12:20:24 GMT]]></title><description><![CDATA[<p>[quote=&quot;.filmor]/edit Joa, das letzte Diagramm sieht gut aus. Übrigens, die Creator Objekte (bitte nicht Builder, dass ist mehrdeutig) kannst du schön in ein Template verfrachten.[/quote] Ah ja? Was müsste ich für Parameter haben? Doch nur den Gebäudetyp oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103108</guid><dc:creator><![CDATA[Ooptimist]]></dc:creator><pubDate>Mon, 24 Jul 2006 12:20:24 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Mon, 24 Jul 2006 12:20:24 GMT]]></title><description><![CDATA[<p>[quote=&quot;.filmor]/edit Joa, das letzte Diagramm sieht gut aus. Übrigens, die Creator Objekte (bitte nicht Builder, dass ist mehrdeutig) kannst du schön in ein Template verfrachten.[/quote] Ah ja? Was müsste ich für Parameter haben? Doch nur den Gebäudetyp oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103107</guid><dc:creator><![CDATA[Ooptimist]]></dc:creator><pubDate>Mon, 24 Jul 2006 12:20:24 GMT</pubDate></item><item><title><![CDATA[Reply to OO Ansatz für Strategie Spiel - Designfrage on Mon, 24 Jul 2006 12:30:06 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template &lt;typename T&gt;
struct generic_creator
{
    T* operator () ()
    {
        return new T;
    }
};
</code></pre>
<p>Das kannst du dann bei deiner Factory als Standardparameter nehmen:</p>
<pre><code class="language-cpp">template &lt;typename Product&gt;
class Factory
{
public:
    // ...
    typedef boost::function0&lt;Product*&gt; creator_type;
    // ...
    template &lt;typename T&gt;
    void register_ (id_type id, creator_type f = generic_creator&lt;T&gt;())
    {
        register_creator (id, f);
    }
};
</code></pre>
<p>register_creator ist dabei deine &quot;normale&quot; Registrierfunktion.<br />
Und</p>
<pre><code class="language-cpp">fac.register_&lt;Farm&gt; (&quot;Farm&quot;);
</code></pre>
<p>sieht doch nett aus und ist leicht in ein Makro zu fassen (auch wenn man damit <em>sehr</em> vorsichtig sein muss).</p>
<p>Du kannst diesen &quot;generic_creator&quot; und den creator_type natürlich noch abändern, so dass er Parameter entgegen nimmt (hier ist der einzig sinnvolle wohl der Bauplatz).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1103118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1103118</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Mon, 24 Jul 2006 12:30:06 GMT</pubDate></item></channel></rss>