<?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[Speicherreservierung ja&#x2F;nein?]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Es geht immer noch um meine Kampfsimulation.</p>
<p>Also die Grundlagen der Speicherreservierung sind mir bekannt. (evtl. kennt da ja jemand ein gutes Tutorial zu?) Erst nochmal kurz, was ich nun vor habe:</p>
<p>Beispiel: Der Nutzer will folgendes erstellen</p>
<p>1000 Schiffe des Typs Jäger<br />
50 Schiffe des Typs Schlachtschiff<br />
150 Schiffe des Typs Kreuzer</p>
<p>Ich habe meine Klasse c_ship. Dem Konstruktor übergebe ich den Typ des zu erstellenden Raumschiffes.</p>
<p>Jetzt bin ich mir allerdings nicht sicher was ich genau machen soll. Es gibt viele verschiedene Schiffe, die jeweils in großer Menge vorhanden sein können (s.o.). Welche Schiffstypen erstellt werden, bestimmt natürlich der Nutzer und die Menge auch.</p>
<p>Nun muss ich später in meiner Schadensberechnung jeweils die Liste eines Typs (z.b. Kreuzer) durchgehen um die Schadenszuweisung vorzunehmen. Ist ein Schiff zerstört, muss ich es natürlich aus der Liste &quot;streichen&quot;.</p>
<p>Was macht man da am besten? Erstelle ich mir für jeden Schiffstyp ein vector, den ich dann mit Instanzen fülle? Oder reserviere ich für jedes Schiff Speicher auf dem Heap? Oder gibt es dafür noch bessere Lösungen?</p>
<p>Ich möchte hier jetzt keinen fertigen code haben. Es geht mir eher darum, wie ich mein &quot;Problem&quot; am besten lösen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/173261/speicherreservierung-ja-nein</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 19:32:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/173261.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 13 Feb 2007 13:28:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Tue, 13 Feb 2007 13:28:57 GMT]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Es geht immer noch um meine Kampfsimulation.</p>
<p>Also die Grundlagen der Speicherreservierung sind mir bekannt. (evtl. kennt da ja jemand ein gutes Tutorial zu?) Erst nochmal kurz, was ich nun vor habe:</p>
<p>Beispiel: Der Nutzer will folgendes erstellen</p>
<p>1000 Schiffe des Typs Jäger<br />
50 Schiffe des Typs Schlachtschiff<br />
150 Schiffe des Typs Kreuzer</p>
<p>Ich habe meine Klasse c_ship. Dem Konstruktor übergebe ich den Typ des zu erstellenden Raumschiffes.</p>
<p>Jetzt bin ich mir allerdings nicht sicher was ich genau machen soll. Es gibt viele verschiedene Schiffe, die jeweils in großer Menge vorhanden sein können (s.o.). Welche Schiffstypen erstellt werden, bestimmt natürlich der Nutzer und die Menge auch.</p>
<p>Nun muss ich später in meiner Schadensberechnung jeweils die Liste eines Typs (z.b. Kreuzer) durchgehen um die Schadenszuweisung vorzunehmen. Ist ein Schiff zerstört, muss ich es natürlich aus der Liste &quot;streichen&quot;.</p>
<p>Was macht man da am besten? Erstelle ich mir für jeden Schiffstyp ein vector, den ich dann mit Instanzen fülle? Oder reserviere ich für jedes Schiff Speicher auf dem Heap? Oder gibt es dafür noch bessere Lösungen?</p>
<p>Ich möchte hier jetzt keinen fertigen code haben. Es geht mir eher darum, wie ich mein &quot;Problem&quot; am besten lösen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228109</guid><dc:creator><![CDATA[Spartaner]]></dc:creator><pubDate>Tue, 13 Feb 2007 13:28:57 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Tue, 13 Feb 2007 13:37:45 GMT]]></title><description><![CDATA[<p>am besten wäre es natürlich wenn du nur eine instanz ertellst (nur wenn alle schiffe desselben typs identisch sind) dann einen &quot;anzahl&quot; Parameter hinzufügst und diesen mit formeln berechnest also sowas wie:<br />
Kreuzer-&gt;HP = 100;<br />
KreuzerFlotte(erbt von Kruezer und hat Parameter Anzahl bekommen)-&gt;Anzahl = 100;<br />
KreuzerFlotte-&gt;MaxHP = 10000;<br />
GegnerFlotte-&gt;Schaden = 5000;</p>
<p>5000Schd/10000HP = 50 Kreuzer übrig</p>
<p>so hast du nur eine instanz und kannst dennoch tausende schiffe berechnen ohn das der speicher gleich umkippt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228121</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Tue, 13 Feb 2007 13:37:45 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Tue, 13 Feb 2007 13:51:20 GMT]]></title><description><![CDATA[<p>Danke für die schnelle Antwort!</p>
<p>Ceos schrieb:</p>
<blockquote>
<p>am besten wäre es natürlich wenn du nur eine instanz ertellst (nur wenn alle schiffe desselben typs identisch sind) dann einen &quot;anzahl&quot; Parameter hinzufügst und diesen mit formeln berechnest also sowas wie</p>
</blockquote>
<p>Also die Schiffe eines Typs (z.b. Kreuzer) sind komplett identisch. Dafür übergebe ich ja meinem Konstruktor der Schiffsklasse den Typ des Schiffes.</p>
<pre><code class="language-cpp">c_ship ship1(&quot;Kreuzer&quot;);
</code></pre>
<p>Da der errechnete Schaden, den z.b. die Kreuzer erleiden, nicht einfach nacheinander verteilt wird, wäre es ein Problem, wenn ich einen Anzahl Parameter einfüge. Die Schadensverteilung erfolgt nach der Gaussschen Normalverteilung. Deshalb muss zu jedem Zeitpunkt genau wissen, wieviel Hüllenpunkte jedes einzelne Schiff hat. Dies wäre ja nicht möglich, wenn ich nur eine Variable für die &quot;Gesamthülle&quot; hätte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228135</guid><dc:creator><![CDATA[Spartaner]]></dc:creator><pubDate>Tue, 13 Feb 2007 13:51:20 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Tue, 13 Feb 2007 14:07:15 GMT]]></title><description><![CDATA[<p>Du solltest dir kurz überlegen, was du machen willst:<br />
1. Willst du häufig neue Schiffe erstellen? Dann nimm eine Liste.<br />
2. Willst du nur selten/oder noch besser gar nicht neue Schiffe erstellen? Dann reicht ein Array aus.</p>
<p>Zu 1) Ein Array hat das Problem, dass die Größe begrenzt ist bzw. man erst freie Felder finden muss. Daher ist in diesem Fall eine Liste angebracht, weil man in konstanter Zeit einfügen kann, während es beim Array im Schnitt lineare Zeit benötigt. Das bezieht sich auf das bereits laufende Spiel, nciht die Initialisierung.</p>
<p>Zu 2) Wenn man selten neue Elemente einfügt, eignen sich Arrays eher als Listen, weil sie 1. weniger Speicher verbrauchen und 2. bei direkten Zugriffen einen konstanten Zeitfaktor haben. Wenn du allerdings nur über die Schiffe iterierst, ist das irrelevant(abgesehen von den Indirektionen bei einer Liste).</p>
<p>Edit: Speicher sollte in dieser Größenordnung kein Problem sein. Außer jedes Schiff sollte sein eigenes, persönliches Video erhalten <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="😮"
    />. Ansonsten wirst du kaum mehrere Millionen Schiffe in deinem Spiel haben <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/1228147</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228147</guid><dc:creator><![CDATA[viande]]></dc:creator><pubDate>Tue, 13 Feb 2007 14:07:15 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Tue, 13 Feb 2007 14:15:13 GMT]]></title><description><![CDATA[<p>Also der Benutzer gibt am Anfang eine Anzahl von Schiffen ein. Nachträglich kommen keine mehr dazu! Es werde halt &quot;bloß&quot; während des Kampfes einzelne schiffe vernichtet und müssen somit aus der Liste entfernt werden. Da der Schaden ja per Normalverteilung ermittlet wird, kann auch z.b. das 50. Schiff von 100 als erstes zerstört werden.</p>
<p>Um einem Array zur Laufzeit die Größe zuzuweisen, müsste ich dafür ja Speicher auf dem Heap reservieren. Da hatte ich aber folgendes Problem.</p>
<pre><code class="language-cpp">c_ship *pship1 = NULL;

pship1 = new c_ship(&quot;Kreuzer&quot;); 
// dies ist ja nicht möglich
pship1 = new c_ship(&quot;Kreizer&quot;)[1000];
</code></pre>
<p>Da ich ja den Konstruktor auf jeden Fall aufrufen muss, um den Schiffstyp festzulegen, ist diese Lösung scheinbar nicht zu verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228156</guid><dc:creator><![CDATA[Spartaner]]></dc:creator><pubDate>Tue, 13 Feb 2007 14:15:13 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Tue, 13 Feb 2007 14:29:04 GMT]]></title><description><![CDATA[<p>könntest du nicht einfach eine schleife und ein int-vector für die HP nehmen ?</p>
<p>[EDIT] ich beziehen mich hierbei noch immer auf die klasse/template Flotte die von der jeweiligen schiffsart ableitet (ein template würde sich hier wirklich hervorragend eignen)</p>
<pre><code class="language-cpp">for (vector&lt;int&gt;::iterator ITR = ShipArray.begin(); ITR != ShipArray.end();) {
    if (ZUFALLSSCHADEN &gt; ITR-&gt;leftHP) {
        ITR = ShipArray.delete(ITR);
    }
    else {
        ITR-&gt;leftHP -= ZUFALLSSCHADEN;
        ITR++;
    }    
    // Heißt soviel wie wenn zufällig erteilter schaden größer der verbleibenden HP
    // dann schiff zerstört ansonsten HP abziehen und iterator inkrementieren
}
</code></pre>
<p>so sparst du dir den unsinnig vergeudeten speicher der für jedes einzelne objekt nötig wäre und benutzt nur das bisschen speicher das pro schiffs eigenschaft nötig ist.</p>
<p>ZUFALLSSCHADEN berechnest du dir nach deinem verteilungschema oder wie auch immer ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228172</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Tue, 13 Feb 2007 14:29:04 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Tue, 13 Feb 2007 14:27:57 GMT]]></title><description><![CDATA[<p>Benutze einfach std::vector und lasse deine grauen Zellen an wichtigerem arbeiten.</p>
<p>Btw, musst du unbedingt die Schiffe aus dem Vector löschen? Reicht es nicht, alle Schiffe die Hp &lt;= 0 haben, als tote Schiffe zu betrachten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228173</guid><dc:creator><![CDATA[DEvent]]></dc:creator><pubDate>Tue, 13 Feb 2007 14:27:57 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Tue, 13 Feb 2007 15:19:53 GMT]]></title><description><![CDATA[<p>viande schrieb:</p>
<blockquote>
<p>Edit: Speicher sollte in dieser Größenordnung kein Problem sein. Außer jedes Schiff sollte sein eigenes, persönliches Video erhalten . Ansonsten wirst du kaum mehrere Millionen Schiffe in deinem Spiel haben</p>
</blockquote>
<p>Nene, Videos sind nicht enthalten. Es ist eine reine Simulation, wo nur Texte enthalten sind. Allerdings können durchaus 100000 Schiffe vorhanden sein.</p>
<p>@ Ceos: Ich kenne nicht alle Funktionen die vector liefert. ShipArray.delete();<br />
löscht dies einfach das Elemt aus dem vector?</p>
<p>@ DEvent: Klar, darüber könnte man vorher eine Abfrage machen. Bloß wenn ich schon extra dafür Speicher reservieren sollte, dann würde es ja auch Sinn machen, wenn ich diesen direkt wieder freigebe und das Schiff aus der Liste entferne. Oder sollte man den Speicher einfach komplett am Ende der Simulation freigeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228217</guid><dc:creator><![CDATA[Spartaner]]></dc:creator><pubDate>Tue, 13 Feb 2007 15:19:53 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Tue, 13 Feb 2007 15:21:15 GMT]]></title><description><![CDATA[<p>ich hab mir da mal was ausgetüftelt und wollt mal deine meinung dazu wissen btw. die meinung der anderen zur effizienz (syntax und vollständigkeit sollen bitte vernachlässigt werden, da ich das nur einfach mal so geschrieben habe)</p>
<p>Ship.h</p>
<pre><code class="language-cpp">typedef struct {
	int HP;
	int Dmg;
} TShipSpecs;

class Ship
{
public:
	Ship();
	~Ship();
private:
	TShipSpecs ShipSpecifications;
	virtual void initSpecs();
};
</code></pre>
<p>Ship.cpp</p>
<pre><code class="language-cpp">Ship::Ship()
{
	initSpecs();
}
</code></pre>
<p>Kreuzer.h</p>
<pre><code class="language-cpp">class Kreuzer : public Ship
{
public:
	Kreuzer();
	~Kreuzer();
	void dealDmg(int Dmg);
private:
	void initSpecs();
};
</code></pre>
<p>Kreuzer.cpp</p>
<pre><code class="language-cpp">Kreuzer::Kreuzer()
{
	super();
}

void Kreuzer::initSpecs()
{
	ShipSpecifications.HP = 100;
	ShipSpecifications.Dmg = 0;
}

void Kreuzer::DealDmg(int Dmg)
{
	ShipSpecifications.Dmg += Dmg;
}
</code></pre>
<p>KreuzerVerband.h</p>
<pre><code class="language-cpp">class KreuzerVerband :: public Kreuzer
{
public:
	KreuzerVerband(int number);
	~KreuzerVerband();
	int Number;
	void dealGaussDmg(int Dmg);
private:
	vector&lt;TShipSpecs&gt; ShipHPList;
};
</code></pre>
<p>KreuzerVerband.cpp</p>
<pre><code class="language-cpp">KreuzerVerband::KreuzerVerband(int number)
{
	super();
	Number = number;
	for (int i=0; i &lt; Number; i++) {
		ShipHPList.push_back(Kreuzer::ShipSpecifications);
	}
}

void KreuzerVerband::dealGaussDmg(int Dmg)
{
	for (vector&lt;TShipSpecs&gt;::iterator ITR = ShipHPList.begin();ITR != ShipHPList.end; ) {
		int dmgtodeal = Dmg - GAUSSFORMEL-ZUFALLSSCHADEN;
		Dmg -= dmgtodeal;
		ShipSpecifications = *ITR;
		dealDmg(dmgtodeal);
		if (ShipSpecifications.Dmg &gt; ShipSpecifications.HP) {
			ITR = dmgtodeal.erase(ITR);
			Number--;
		}
		else {
			ITR++;
		}
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1228219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228219</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Tue, 13 Feb 2007 15:21:15 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Tue, 13 Feb 2007 15:23:09 GMT]]></title><description><![CDATA[<p>es war nicht delete(iterator where) es war erase(iterator where)</p>
<p>[EDIT] sorry for doppelpost hab den falschen button gedrückt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228221</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Tue, 13 Feb 2007 15:23:09 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Wed, 14 Feb 2007 10:25:54 GMT]]></title><description><![CDATA[<p>Guten Morgen!</p>
<p>@ Ceos: Erst mal vielen Dank für die Mühe, die du dir gemacht hast!</p>
<p>Wie ich ja schon sagte, habe ich nur die Schiffsklasse (c_ship). Da jeder Schiffstyp die selben Fähigkeiten und Eigenschaften hat (halt nur andere Werte), ist es nicht nötig, dass ich für jeden Schiffstyp eine eigene abgeleitete Klasse schreiben muss. Vor allem würde dies, zumindest für mich, sehr unübersichtlich werden, da ich insgesamt über 15 Schiffstypen habe, wo nochmals über 20 Verteidigungsanlagen hinzu kommen. Das würde ja bedeuten, dass ich zusätzlich ca. 60 Dateien in meinem Projekt zu verwalten hätte.</p>
<p>Das mag sicherlich für große Projekte nicht viel sein, doch denke ich dass dies hier nicht nötig ist.</p>
<p>Ich war am überlegen, um einen Verband von mehreren Schiffen eines Typs zu erstellen, eine zusätzliche Klasse (c_fleet) zu erstellen.<br />
In dieser Klasse werden einfach vectoren des jeweiligen Schiffstyps zur Verfügung gestellt.</p>
<pre><code class="language-cpp">// c_fleet.hpp

#inlcude &quot;c_ship&quot;
#include &lt;vector&gt;

class c_fleet
{
   private:
      std::vector&lt;c_ship&gt; Kreuzer;
      std::vector&lt;c_ship&gt; Schlachtschiff;
        // usw.
   public:
      c_fleet();
      ~c_fleet();

};
</code></pre>
<pre><code class="language-cpp">// c_fleet.cpp

c_fleet::c_fleet(int Kreuzer, int Schlachts, // usw...)
{
   c_ship cKreuzer(&quot;Kreuzer&quot;)

   for(int i = 1; i &lt; Kreuzer; i++)
   {      
      Kreuzer.push_back(cKreuzer);   
   } 
   // für jeden Typ erneut
}
</code></pre>
<p>Wäre das eine annehmbare Möglichkeit?</p>
<p>Gruß Spartaner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228592</guid><dc:creator><![CDATA[Spartaner]]></dc:creator><pubDate>Wed, 14 Feb 2007 10:25:54 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Wed, 14 Feb 2007 10:34:36 GMT]]></title><description><![CDATA[<p>Wenn die Schiffe alle technisch identisch sind, reicht eigentlich ein vector aus, um alle unterzubringen. Das dürfte es dann auch leichter machen, Flächeneffekte darzustellen, die die gesamte Flotte betreffen. Aber da stellt sich dann letztendlich die Design-Frage: Wie soll das Schießen gesteuert werden?<br />
(schießt du &quot;irgendwo in die gegnerische Flotte rein&quot;, &quot;auf ein beliebiges Typ-X Schiff&quot;, &quot;auf GENAU DIESES Schiff&quot;,...? oder hast du eventuell Waffen, die mehrere Schiffe gleichzeitig treffen können?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228598</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 14 Feb 2007 10:34:36 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Wed, 14 Feb 2007 10:36:54 GMT]]></title><description><![CDATA[<p>Zum Entfernen aus Vectoren nach bestimmten Kriterien empfiehlt sich <a href="http://www.sgi.com/tech/stl/remove_if.html" rel="nofollow">remove_if</a> in Verbindung mit <a href="http://erase" rel="nofollow">erase</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228599</guid><dc:creator><![CDATA[THX 1138]]></dc:creator><pubDate>Wed, 14 Feb 2007 10:36:54 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Wed, 14 Feb 2007 10:57:25 GMT]]></title><description><![CDATA[<p>@ THX 1138: Das werde ich mir direkt mal ansehen, Danke!</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>Wenn die Schiffe alle technisch identisch sind, reicht eigentlich ein vector aus, um alle unterzubringen</p>
</blockquote>
<p>Diesen Gedanken hatte ich auch schon gehabt. Bloß stelle ich es mir etwas unübersichtlich vor, wenn in meinem vector die Elemente 1 bis 50 Kreuzer sind, die Elemente 50 bis 67 sind Schlachtschiffe usw.</p>
<pre><code class="language-cpp">Aber da stellt sich dann letztendlich die Design-Frage: Wie soll das Schießen gesteuert werden?
</code></pre>
<p>Die Funktion zur Berechnung des Schadens werde ich noch in die Klasse der Waffen einfügen.<br />
Das Schießen an sich läuft wie folgend ab. Jede Waffe hat ihr Lieblingsziel (Prioritätenliste). Jetzt geht die Waffe meines Schiffes diese Liste durch und vergleicht sie mit den Schiffen der gegnerischen Flotte. Der <strong>Schiffstyp</strong> der als erstes in der Liste vor kommt, wird unter beschuß genommen.<br />
Dazu wird zunächst der Schaden ermittelt, den die Waffe anrichtet und dann wird dieser auf alle Schiffe der gegnerischen Flotte (des angegebenen Schiffstyps) verteilt (nach der Normalverteilung). So werden dann alle Waffen aller Schiffe durchgegangen. Ist die Berechnung des Schadens und der Treffer dann bei allen Schiffen geschehen, werden die zerstörten Schiffe aus der Flotte &quot;gestrichen&quot;, so dass dann in der nächsten Runde die entsprechend geringere Anzahl an Schiffen vorhanden ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228603</guid><dc:creator><![CDATA[Spartaner]]></dc:creator><pubDate>Wed, 14 Feb 2007 10:57:25 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Wed, 14 Feb 2007 11:11:45 GMT]]></title><description><![CDATA[<p>naja son ungleich sind deine und meine idee gar nicht, nur das ich dabei des speichers wegen nicht ganze instanzen sondern eher nur die statuswerte die verändert werden könnten in vektoren packen wollte, des speichers wegen</p>
<blockquote>
<p>... bis 100000 Schiffe ...</p>
</blockquote>
<p>[EDIT] Mühe warr das kein :p war ja nur n gedankenspiel .... soll das eventuell nen OGamesimulator oder was verwandtes werden ? wenn ich deine schiffsklassen und die anzahl der arten so anseh erinnert mich das stark daran ;p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228612</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Wed, 14 Feb 2007 11:11:45 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Wed, 14 Feb 2007 11:18:54 GMT]]></title><description><![CDATA[<p>Ceos schrieb:</p>
<blockquote>
<p>soll das eventuell nen OGamesimulator oder was verwandtes werden ? wenn ich deine schiffsklassen und die anzahl der arten so anseh erinnert mich das stark daran ;p</p>
</blockquote>
<p>Es wird ein Kampfsimulator für Horizon (ein anderes Browsergame). Ich hab ja früher nie was von Browsergames gehalten. Aber wie dann immer mehr von meinen Arbeitskollegen damit angefangen haben, hab ich mir das auch mal angesehen und bin jetzt seit knapp 7 Monaten dabei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228614</guid><dc:creator><![CDATA[Spartaner]]></dc:creator><pubDate>Wed, 14 Feb 2007 11:18:54 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Wed, 14 Feb 2007 11:20:03 GMT]]></title><description><![CDATA[<p>Spartaner schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>Wenn die Schiffe alle technisch identisch sind, reicht eigentlich ein vector aus, um alle unterzubringen</p>
</blockquote>
<p>Diesen Gedanken hatte ich auch schon gehabt. Bloß stelle ich es mir etwas unübersichtlich vor, wenn in meinem vector die Elemente 1 bis 50 Kreuzer sind, die Elemente 50 bis 67 sind Schlachtschiffe usw.</p>
</blockquote>
<p>Ach, so schwer ist das auch wieder nicht. Dazu mußt du die Schiffstypen nur geordnet (z.B. nach Maximal-Hitpoints oder nach Schiffstyp) in den Vektor reinpacken und kannst dir dann per equal_range() einen bestimmten Flottenteil raussuchen lassen (z.B. <code>equal_range(ships.begin(),ships.end(),&quot;Kreuzer&quot;)</code> liefert alle Kreuzer deiner Flotte.</p>
<blockquote>
<p>Die Funktion zur Berechnung des Schadens werde ich noch in die Klasse der Waffen einfügen.<br />
Das Schießen an sich läuft wie folgend ab. Jede Waffe hat ihr Lieblingsziel (Prioritätenliste). Jetzt geht die Waffe meines Schiffes diese Liste durch und vergleicht sie mit den Schiffen der gegnerischen Flotte. Der <strong>Schiffstyp</strong> der als erstes in der Liste vor kommt, wird unter beschuß genommen.<br />
Dazu wird zunächst der Schaden ermittelt, den die Waffe anrichtet und dann wird dieser auf alle Schiffe der gegnerischen Flotte (des angegebenen Schiffstyps) verteilt (nach der Normalverteilung). So werden dann alle Waffen aller Schiffe durchgegangen. Ist die Berechnung des Schadens und der Treffer dann bei allen Schiffen geschehen, werden die zerstörten Schiffe aus der Flotte &quot;gestrichen&quot;, so dass dann in der nächsten Runde die entsprechend geringere Anzahl an Schiffen vorhanden ist.</p>
</blockquote>
<p>Auch eine Möglichkeit - und mit einem vector recht gut umsetzbar:</p>
<pre><code class="language-cpp">vector&lt;string&gt; m_prio;//Namen der &quot;Lieblingsgegner&quot; in fallender Reihenfolge
pair&lt;vector&lt;c_ship&gt;::iterator,vector&lt;c_ship&gt;::iterator&gt; ship_range;
for(vector&lt;string&gt;::iterator pos=m_prio.begin();pos!=m_prio.end();++pos)
{
  ship_range = equal_range(ships.begin(),ships.end();*pos);
  if(ship_range.first!=ship_range.second()) break;
}

for(vector&lt;c_ship&gt;::iterator tgt=ship_range.first;tgt!=ship_range.second;++tgt)
  attack(*tgt);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1228615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228615</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 14 Feb 2007 11:20:03 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Wed, 14 Feb 2007 14:35:15 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Ach, so schwer ist das auch wieder nicht. Dazu mußt du die Schiffstypen nur geordnet (z.B. nach Maximal-Hitpoints oder nach Schiffstyp) in den Vektor reinpacken und kannst dir dann per equal_range() einen bestimmten Flottenteil raussuchen lassen (z.B. equal_range(ships.begin(),ships.end(),&quot;Kreuzer&quot;) liefert alle Kreuzer deiner Flotte.</p>
</blockquote>
<p>Das klingt interessant. Liege ich da richtig, dass diese Funktion einfach den letzten Eintrag im vector zurückliefert? Wenn z.b. bis zum Element 50 Kreuzer enthalten sind, so soll die Funktion eine 50 zurückliefern?</p>
<pre><code class="language-cpp">pair&lt;vector&lt;c_ship&gt;::iterator,vector&lt;c_ship&gt;::iterator&gt; ship_range;
</code></pre>
<p>Das verstehe ich nicht richtig. Ist dass so eine Art &quot;Doppel-vector&quot;? Könntest du mir deinen Codeschnipsel vielleicht etwas genauer erklären?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228810</guid><dc:creator><![CDATA[Spartaner]]></dc:creator><pubDate>Wed, 14 Feb 2007 14:35:15 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Wed, 14 Feb 2007 15:21:14 GMT]]></title><description><![CDATA[<p>Schau dir mal <a href="http://www.sgi.com/tech/stl/equal_range.html" rel="nofollow">equal_range</a> an<br />
equal_range liefert ein <a href="http://www.sgi.com/tech/stl/pair.html" rel="nofollow">pair</a> Iteratoren zurück, die den Bereich der Schiffe abdecken, die dem gewünschten Namen entsprechen. Also vom ersten bis eine nach dem letzten<br />
Dieser Range wird in der zweiten Schlaufe durchiteriert.</p>
<p>PS: Nein ich habe keine Aktien von SGI...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228841</guid><dc:creator><![CDATA[THX 1138]]></dc:creator><pubDate>Wed, 14 Feb 2007 15:21:14 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Thu, 15 Feb 2007 08:21:48 GMT]]></title><description><![CDATA[<p>Spartaner schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>Ach, so schwer ist das auch wieder nicht. Dazu mußt du die Schiffstypen nur geordnet (z.B. nach Maximal-Hitpoints oder nach Schiffstyp) in den Vektor reinpacken und kannst dir dann per equal_range() einen bestimmten Flottenteil raussuchen lassen (z.B. equal_range(ships.begin(),ships.end(),&quot;Kreuzer&quot;) liefert alle Kreuzer deiner Flotte.</p>
</blockquote>
<p>Das klingt interessant. Liege ich da richtig, dass diese Funktion einfach den letzten Eintrag im vector zurückliefert? Wenn z.b. bis zum Element 50 Kreuzer enthalten sind, so soll die Funktion eine 50 zurückliefern?</p>
</blockquote>
<p>Nein, equal_range liefert nicht die Anzahl der gefundenen Elemente, sondern ein Paar von Iteratoren - d.h. ship_range.first zeigt auf den ersten Kreuzer deiner Flotte, ship_range.second auf den ersten Nicht-Kreuzer.</p>
<p>Edit@THX: Das heißt übrigens immer noch &quot;Schl<strong>ei</strong>fe&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>
]]></description><link>https://www.c-plusplus.net/forum/post/1229199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1229199</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 15 Feb 2007 08:21:48 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Thu, 15 Feb 2007 08:24:33 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Edit@THX: Das heißt übrigens immer noch &quot;Schl<strong>ei</strong>fe&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>
</blockquote>
<p><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="😃"
    /> Uups, sch**ss Helvetismen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1229208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1229208</guid><dc:creator><![CDATA[THX 1138]]></dc:creator><pubDate>Thu, 15 Feb 2007 08:24:33 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Thu, 15 Feb 2007 09:52:05 GMT]]></title><description><![CDATA[<blockquote>
<p>@ DEvent: Klar, darüber könnte man vorher eine Abfrage machen. Bloß wenn ich schon extra dafür Speicher reservieren sollte, dann würde es ja auch Sinn machen, wenn ich diesen direkt wieder freigebe und das Schiff aus der Liste entferne. Oder sollte man den Speicher einfach komplett am Ende der Simulation freigeben.</p>
</blockquote>
<p>Wenn du den Speicher in der Simulation freigibst, bringt das nur: a) extra Verwaltungsaufwand und b) Geschwindigkeitsnachteile.</p>
<p>Aus a) folgt, das der Algorithmus unnötig verkompliziert wird und dadurch nochmal fehleranfälliger und langsamer wird.</p>
<p>Was anderes wäre, wenn du in der Simulation Speicher anforderst, dann würde der Speicher unnötigerweise immer weiter zunehmen.</p>
<p>Aber auch dann könnte man die &quot;Leichen&quot; drinnerlassen, bis zu einem Maximalwert, und dann einen Algorithmus starten, der die &quot;Leichen&quot; aus dem Speicher entfernt.</p>
<p>Würde den Vorteil bringen, das es 2 Algorithmen sind, einen für die Simulation, einer für die Speicherverwaltung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1229269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1229269</guid><dc:creator><![CDATA[DEvent]]></dc:creator><pubDate>Thu, 15 Feb 2007 09:52:05 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Sat, 17 Feb 2007 11:02:27 GMT]]></title><description><![CDATA[<p>Danke noch mal für die Hilfe!</p>
<p>Mit den Informationen werde ich jetzt erst mal weiter machen.</p>
<p>Gruß Spartaner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230022</guid><dc:creator><![CDATA[Spartaner]]></dc:creator><pubDate>Sat, 17 Feb 2007 11:02:27 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Wed, 28 Feb 2007 21:12:27 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">pair&lt;vector&lt;c_ship&gt;::iterator, vector&lt;c_ship&gt;::iterator&gt; ship_range;
ship_range = equal_range(ships.begin(),ships.end(),&quot;Kreuzer&quot;)
</code></pre>
<p>Ich habe hiermit noch ein kleines Problem. Wenn ich dies so nutzen möchte, bekomme ich den Fehler, dass er string nicht nach c_ship (meine Klasse) konvertieren kann. Das ist ja auch irgendwie verständlich und logisch. Die deklaration des Schiffstyps ist zwar in der Klasse vorhanden, aber mit ships.begin() .end() überprüfe ich ja ein ganzes Objekt der Klasse c_ship und nicht nur eine einzelne Membervariable.<br />
Kann ich den Vergleich so nicht machen oder habe ich mir die definition von equal_range nicht richtig angesehen und mache da einen großen Fehler?</p>
<pre><code class="language-cpp">pair&lt;vector&lt;c_ship&gt;::iterator, vector&lt;c_ship&gt;::iterator&gt; ship_range;
c_ship Kreuzer(&quot;Kreuzer&quot;);
ship_range = equal_range(ships.begin(),ships.end(), Kreuzer)
</code></pre>
<p>Übergebe ich der Funktion jetzt einfach ein Schiff, nach welchem er in dem vector suchen soll, so bekomme ich folgenden Fehler (wenn ich es noch richtig wiedergeben kann):</p>
<p>_function_base.h(73) operator '&lt;' ist im Typ c_ship für Argumente desselben Typs nicht implementiert.</p>
<p>Ich verstehe einfach nicht wie dieser Fehler zustande kommt. Könnt ihr mir dabei noch mal helfen?</p>
<p>Gruß Spartaner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1237094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237094</guid><dc:creator><![CDATA[Spartaner]]></dc:creator><pubDate>Wed, 28 Feb 2007 21:12:27 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Thu, 01 Mar 2007 11:21:55 GMT]]></title><description><![CDATA[<p>Ich hoffe es ist in Ordnung *push* <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/1237346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237346</guid><dc:creator><![CDATA[Spartaner]]></dc:creator><pubDate>Thu, 01 Mar 2007 11:21:55 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherreservierung ja&#x2F;nein? on Thu, 01 Mar 2007 11:56:34 GMT]]></title><description><![CDATA[<p>Da steht doch ganz klar, was das Programm von dir erwartet - die gesuchten Objekte müssen sortierbar sein (und nebenbei sortiert vorliegen ;)). Also solltest du den geforderten op&lt; implementieren:</p>
<pre><code class="language-cpp">bool operator&lt;(const ship&amp; l, const chip&amp; r)
{ return l.name&lt;r.name; }
</code></pre>
<p>Edit: Und für den Aufruf kannst du auch eine temporäre Variable nutzen:</p>
<pre><code class="language-cpp">ship_range=equal_range(ships.begin(),ships.end(),ship(&quot;Kreuzer&quot;));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1237369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237369</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 01 Mar 2007 11:56:34 GMT</pubDate></item></channel></rss>