<?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[C++ Problem mit Schiffe versenken [gelöst]]]></title><description><![CDATA[<p>Hallo,<br />
ich versuche gerade ein ganz primitives Schiffe versenken Spiel zu erstellen. Dazu habe ich erstmal ein &quot;Spielfeld&quot; erstellt und versuche die Schiffe dort zufällig zu verteilen. Dazu lasse ich mir die Schiffe gleich auf anzeigen (ohne schießen), um zu testen, ob sie richtig verteilt wurden.<br />
Leider zerreißt es ein paar Schiffe immer wieder, oder zeigt Teile der Schiffe gar nicht an.<br />
Ich bin noch totaler Anfänger und finde leider meinen Fehler nicht.<br />
Vielleicht könnt ihr mir helfen.<br />
Vielen Dank schon einmal im Voraus!</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
using namespace std;
#include&lt;time.h&gt;

const int X = 10;
const int Y = 10;

int main()
{

	char x=0;
	char y=0;
	char c=0;

	char spielfeld[X][Y];
	char Buchstaben[10];
//Zahlen Buchstaben zuweisen
	Buchstaben[0]='A';
	Buchstaben[1]='B';
	Buchstaben[2]='C';
	Buchstaben[3]='D';
	Buchstaben[4]='E';
	Buchstaben[5]='F';
	Buchstaben[6]='G';
	Buchstaben[7]='H';
	Buchstaben[8]='I';
	Buchstaben[9]='J';

//Alle Felder leeren setzen
	while (x &lt; X) {
		while (y &lt; Y) {
			spielfeld[x][y]='.';
			y++;
		}
		y=0;
		x++;
	}

//Schiffe verstecken
	int d=0;
	char n;
	char spielfeld2[X][Y];

	time_t Zeitstempel;
	tm *nun;
	Zeitstempel = time(0);
	nun = localtime(&amp;Zeitstempel);
	int zeit1 = nun-&gt;tm_sec;
	int zeit2 = nun-&gt;tm_min;

	int start=zeit1*zeit2;
	srand(start);
//Schiffe erstellen
	char Schiff[5];
	Schiff[0]=2;
	Schiff[1]=3;
	Schiff[2]=3;
	Schiff[3]=4;
	Schiff[4]=5;

//Schiffe benennen
	while (Schiff[4] != 0) {
		if (d==0) {
			n='2';
		}
		else if (d==1) {
			n='A';
		}
		else if (d==2) {
			n='B';
		}
		else if (d==3) {
			n='4';
		}
		else if (d==4) {
			n='5';
		}
		else {
			return 1;
		}

		int StartX = rand() % 10;
		int StartY = rand() % 10;
		int ObenUnten = rand() %4;
		spielfeld[StartX][StartY]=n;
		Schiff[d]--;

		int kStartX, kStartY, gStartX, gStartY;

		while (Schiff[d] != 0) {

			ObenUnten = rand() %4;

			kStartX=StartX--;
			kStartY=StartY--;
			gStartX=StartX++;
			gStartY=StartY++;

//Richtung des nächsten Schiffteils bestimmen
			if (ObenUnten == 0 &amp;&amp; gStartX &lt; 10 &amp;&amp; spielfeld[gStartX][StartY]!='.') {
				StartX++;
				spielfeld[StartX][StartY]=n;
				Schiff[d]--;
			}
			else if (ObenUnten == 1 &amp;&amp; kStartX &gt; -1 &amp;&amp; spielfeld[kStartX][StartY]!='.') {
				StartX--;
				spielfeld[StartX][StartY]=n;
				Schiff[d]--;
			}
			else if (ObenUnten == 2 &amp;&amp; gStartY &lt; 10 &amp;&amp; spielfeld[StartX][gStartY]!='.') {
				StartY++;
				spielfeld[StartX][StartY]=n;
				Schiff[d]--;
			}
			else if (ObenUnten == 3 &amp;&amp; kStartY &gt; -1 &amp;&amp; spielfeld[StartX][kStartY]!='.') {
				StartY--;
				spielfeld[StartX][StartY]=n;
				Schiff[d]--;
			}
			else {

			}

		}
		d++;

	}

//Siegbedingung
	char sieg=0;
	while (sieg!=1) {
//Spielfeld erstellen
		x=0;
		y=0;
		c=0;

		cout &lt;&lt; &quot; 1 2 3 4 5 6 7 8 9 10&quot; &lt;&lt; endl;
		while (x &lt; X) {
			cout &lt;&lt; Buchstaben[c] &lt;&lt;&quot; &quot;;
			while (y &lt; Y) {
				cout &lt;&lt; spielfeld[x][y] &lt;&lt; &quot; &quot; ;
				y++;
			}
			cout &lt;&lt; endl;
			y=0;
			x++;
			c++;
		}

		system(&quot;PAUSE&quot;);

	}

	return 0;
}
</code></pre>
<p>edit: Eingerückt.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/264911/c-problem-mit-schiffe-versenken-gelöst</link><generator>RSS for Node</generator><lastBuildDate>Fri, 04 Sep 2026 10:24:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/264911.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Apr 2010 19:01:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++ Problem mit Schiffe versenken [gelöst] on Thu, 15 Apr 2010 17:03:06 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich versuche gerade ein ganz primitives Schiffe versenken Spiel zu erstellen. Dazu habe ich erstmal ein &quot;Spielfeld&quot; erstellt und versuche die Schiffe dort zufällig zu verteilen. Dazu lasse ich mir die Schiffe gleich auf anzeigen (ohne schießen), um zu testen, ob sie richtig verteilt wurden.<br />
Leider zerreißt es ein paar Schiffe immer wieder, oder zeigt Teile der Schiffe gar nicht an.<br />
Ich bin noch totaler Anfänger und finde leider meinen Fehler nicht.<br />
Vielleicht könnt ihr mir helfen.<br />
Vielen Dank schon einmal im Voraus!</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
using namespace std;
#include&lt;time.h&gt;

const int X = 10;
const int Y = 10;

int main()
{

	char x=0;
	char y=0;
	char c=0;

	char spielfeld[X][Y];
	char Buchstaben[10];
//Zahlen Buchstaben zuweisen
	Buchstaben[0]='A';
	Buchstaben[1]='B';
	Buchstaben[2]='C';
	Buchstaben[3]='D';
	Buchstaben[4]='E';
	Buchstaben[5]='F';
	Buchstaben[6]='G';
	Buchstaben[7]='H';
	Buchstaben[8]='I';
	Buchstaben[9]='J';

//Alle Felder leeren setzen
	while (x &lt; X) {
		while (y &lt; Y) {
			spielfeld[x][y]='.';
			y++;
		}
		y=0;
		x++;
	}

//Schiffe verstecken
	int d=0;
	char n;
	char spielfeld2[X][Y];

	time_t Zeitstempel;
	tm *nun;
	Zeitstempel = time(0);
	nun = localtime(&amp;Zeitstempel);
	int zeit1 = nun-&gt;tm_sec;
	int zeit2 = nun-&gt;tm_min;

	int start=zeit1*zeit2;
	srand(start);
//Schiffe erstellen
	char Schiff[5];
	Schiff[0]=2;
	Schiff[1]=3;
	Schiff[2]=3;
	Schiff[3]=4;
	Schiff[4]=5;

//Schiffe benennen
	while (Schiff[4] != 0) {
		if (d==0) {
			n='2';
		}
		else if (d==1) {
			n='A';
		}
		else if (d==2) {
			n='B';
		}
		else if (d==3) {
			n='4';
		}
		else if (d==4) {
			n='5';
		}
		else {
			return 1;
		}

		int StartX = rand() % 10;
		int StartY = rand() % 10;
		int ObenUnten = rand() %4;
		spielfeld[StartX][StartY]=n;
		Schiff[d]--;

		int kStartX, kStartY, gStartX, gStartY;

		while (Schiff[d] != 0) {

			ObenUnten = rand() %4;

			kStartX=StartX--;
			kStartY=StartY--;
			gStartX=StartX++;
			gStartY=StartY++;

//Richtung des nächsten Schiffteils bestimmen
			if (ObenUnten == 0 &amp;&amp; gStartX &lt; 10 &amp;&amp; spielfeld[gStartX][StartY]!='.') {
				StartX++;
				spielfeld[StartX][StartY]=n;
				Schiff[d]--;
			}
			else if (ObenUnten == 1 &amp;&amp; kStartX &gt; -1 &amp;&amp; spielfeld[kStartX][StartY]!='.') {
				StartX--;
				spielfeld[StartX][StartY]=n;
				Schiff[d]--;
			}
			else if (ObenUnten == 2 &amp;&amp; gStartY &lt; 10 &amp;&amp; spielfeld[StartX][gStartY]!='.') {
				StartY++;
				spielfeld[StartX][StartY]=n;
				Schiff[d]--;
			}
			else if (ObenUnten == 3 &amp;&amp; kStartY &gt; -1 &amp;&amp; spielfeld[StartX][kStartY]!='.') {
				StartY--;
				spielfeld[StartX][StartY]=n;
				Schiff[d]--;
			}
			else {

			}

		}
		d++;

	}

//Siegbedingung
	char sieg=0;
	while (sieg!=1) {
//Spielfeld erstellen
		x=0;
		y=0;
		c=0;

		cout &lt;&lt; &quot; 1 2 3 4 5 6 7 8 9 10&quot; &lt;&lt; endl;
		while (x &lt; X) {
			cout &lt;&lt; Buchstaben[c] &lt;&lt;&quot; &quot;;
			while (y &lt; Y) {
				cout &lt;&lt; spielfeld[x][y] &lt;&lt; &quot; &quot; ;
				y++;
			}
			cout &lt;&lt; endl;
			y=0;
			x++;
			c++;
		}

		system(&quot;PAUSE&quot;);

	}

	return 0;
}
</code></pre>
<p>edit: Eingerückt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1883000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1883000</guid><dc:creator><![CDATA[php.freak]]></dc:creator><pubDate>Thu, 15 Apr 2010 17:03:06 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Problem mit Schiffe versenken [gelöst] on Wed, 14 Apr 2010 19:27:34 GMT]]></title><description><![CDATA[<p>In Zeile 94 veränderst du nach jedem Feld dir Richtung.</p>
<p>Zeilen 97-100 verändern lustig die Werte von StartX und StartY. -- und ++ machen etwas ganz anderes als du anscheinend denkst.</p>
<p>spielfeld2 wird nirgends benutzt</p>
<p>Der Header cstdlib fehlt.</p>
<p>time.h heißt ctime.</p>
<p>Es wäre viel übersichtlicher, wären Variablen lokaler und mit längeren Namen definiert.</p>
<p>system(&quot;PAUSE&quot;) verursacht auf meinem System einen Fehler. Siehe FAQ für etwas portables.</p>
<p>Die ersten beiden Sachen die ich angemerkt habe sind die Fehler in deinem Algorithmus, das andere sind eher Schönheitsfehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1883015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1883015</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 14 Apr 2010 19:27:34 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Problem mit Schiffe versenken [gelöst] on Wed, 14 Apr 2010 19:39:32 GMT]]></title><description><![CDATA[<p>- fuer Zaehlvariablen wuerde ich nicht den Typ char nehmen, auch wenns kompiliert, sind die Warnungen recht nervig.<br />
- Variablen sind teilweisse nichtssagend und auch laesst es sich da schwer durchsehen.<br />
(z.B. Zeile 86 &gt; das Rand ist sinnlos, weil es in Zeile 94 wiederholt wird.)<br />
- Die Eigentliche Loesung fuer dein Problem kann ich dir nicht sagen <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="😃"
    /> es macht keinen Spass den Code zu analysieren. Dem Debugger faellts da leichter</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1883019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1883019</guid><dc:creator><![CDATA[BasicMan01]]></dc:creator><pubDate>Wed, 14 Apr 2010 19:39:32 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Problem mit Schiffe versenken [gelöst] on Wed, 14 Apr 2010 19:47:26 GMT]]></title><description><![CDATA[<p>Z. 94 ist so beabsichtigt!<br />
Z. 97-100 wären so besser? :</p>
<p>kStartX=StartX;<br />
kStartY=StartY;<br />
gStartX=StartX;<br />
gStartY=StartY;<br />
kStartX--;<br />
kStartY--;<br />
gStartX++;<br />
gStartY++;</p>
<p>Und obwohl ich von den Schönheitsfehlern absehe funktioniert es immer noch nicht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1883027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1883027</guid><dc:creator><![CDATA[php.freak]]></dc:creator><pubDate>Wed, 14 Apr 2010 19:47:26 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Problem mit Schiffe versenken [gelöst] on Wed, 14 Apr 2010 21:05:31 GMT]]></title><description><![CDATA[<p>php.freak schrieb:</p>
<blockquote>
<p>Z. 94 ist so beabsichtigt!<br />
Z. 97-100 wären so besser? :</p>
<p>kStartX=StartX;<br />
kStartY=StartY;<br />
gStartX=StartX;<br />
gStartY=StartY;<br />
kStartX--;<br />
kStartY--;<br />
gStartX++;<br />
gStartY++;</p>
<p>Und obwohl ich von den Schönheitsfehlern absehe funktioniert es immer noch nicht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>Dann war das so beabsichtigt? Dies macht nämlich genau das gleiche. Dann habe ich offenbar deinen Algorithmus falsch verstanden - kein Wunder, denn er ist extrem kryptisch implementiert. Dann bleibt mir nichts übrig als dich um Kommentierung deines Algorithmus zu fragen, denn ich steige da nicht durch und kann deswegen nicht sagen, was falsch ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1883068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1883068</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 14 Apr 2010 21:05:31 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Problem mit Schiffe versenken [gelöst] on Thu, 15 Apr 2010 17:01:40 GMT]]></title><description><![CDATA[<p>Also ich habe das Problem jetzt selbst lösen können.<br />
Hier die Änderungen:</p>
<p>php.freak schrieb:</p>
<blockquote>
<pre><code class="language-cpp">int StartX = rand() % 10;
		int StartY = rand() % 10;
		int ObenUnten = rand() %4;
		spielfeld[StartX][StartY]=n;
		Schiff[d]--;
</code></pre>
</blockquote>
<p>habe ich in Folgendes abgeändert, damit auch beim Setzen des ersten Schiffteils, überprüft wird, ob dort schon ein Schiff liegt.</p>
<pre><code>bool test=0;
	int StartX;
	int StartY;

	while(test!=1) {
          StartX = rand() % 10;
          StartY = rand() % 10;

	  if(spielfeld[StartX][StartY]=='.') {
	    spielfeld[StartX][StartY]=n;
	    Schiff[d]--;
	    test=1;
	  }
	}
</code></pre>
<p>Außerdem habe ich hier</p>
<pre><code class="language-cpp">if(ObenUnten == 0 &amp;&amp; gStartX &lt; 10 &amp;&amp; spielfeld[gStartX][StartY]!='.') {
</code></pre>
<p>genau das Gegenteil erreicht, was ich wollte, da das Schiff nur gesetzt wurde, wenn das Feld schon besetzt war, denn richtig muss es so heißen:</p>
<pre><code class="language-cpp">if(ObenUnten == 0 &amp;&amp; gStartX &lt; 10 &amp;&amp; spielfeld[gStartX][StartY]=='.') {
</code></pre>
<p>So, jetzt mach ich das Spiel fertig und verbessere dann noch die Schönheitsfehler. <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 />
Vielen Dank für die guten Tipps!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1883500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1883500</guid><dc:creator><![CDATA[php.freak]]></dc:creator><pubDate>Thu, 15 Apr 2010 17:01:40 GMT</pubDate></item></channel></rss>