<?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[Problem mit eingelesener Datei]]></title><description><![CDATA[<p>Hallo ich bins schon wieder^^</p>
<p>Habe vor mal ein komplexeres &quot;Spiel&quot; zu schreiben. Möchte dies jedoch erstmal in der Konsole tun, um nur die Technik programmieren zu müssen und mich um keine Sprites o.ä. kümmern zu müssen. Stehe jetzt jedoch vor einem &quot;kleinen&quot; Problem.</p>
<p>Habe eine Textdatei (das Level) weclhe einegelesen wird, z.B. sowas:</p>
<pre><code>11111111111111111111111111111111111111111111111111
00000000000000000000000000000000000000000000000001
11111111111111111111111111111111111111111111111101
10000000000000000000000000000000000000000000000001
10111111111111111111111111111111111111111111111111
10100000000000000000000000000000000000000000000001
10100000000000000000000000000000000000000000000001
10100000000000000000000000000000000000000000000001
10111111111111111111111111111111111111111111111111
10000000000000000000000000000000000000000000000001
11111111111111111111111001111111111111111111111111
10000000000000000000001001000000000000000000000001
10000000000000000000001001000000000000000000000001
11111111111111111111111001111111111111111111111111
10000000000000000000000000000000000000000000000001
10111111111111111111111111111111111111111111111101
10100000000000000000000000000000000000000000000101
10100000000000000000000000000000000000000000000101
10100000000000000000000000000000000000000000000101
10100000000000000000000000000000000000000000000101
10100000000000000000000000000000000000000000000101
10100000000000000000000000000000000000000000000101
10111111111111111111111111111111111111111111111101
10000000000000000000000000000000000000000000000001
11111111111111111111111331111111111111111111111111
</code></pre>
<p>Die Zeichenfolge soll nun in ein dynamisches Array (bewusst erstmal keinen Vektor) namens feldZustand. Das erledigt diese Funktion:</p>
<pre><code class="language-cpp">int Spielfeld::getLevel(std::string level)
{
	std::string datei = level + &quot;.txt&quot;;
	std::ifstream levelDatei(datei.c_str(), std::ios::in); 

	if(!levelDatei)
	{
		std::cerr &lt;&lt; &quot;Fehler beim Erzeugen des Levels!&quot; &lt;&lt; std::endl;
		std::cin.get();
		return -1;
	}
	else
	{
		for(int i = 0; i &lt; YMAX; i++)
		{
			std::string buffer;
			getline(levelDatei, buffer);
			for(int j = 0; j &lt; XMAX; j++)
			{
				feldZustand[i*j] = buffer[j];
			}
		}
	}
	levelDatei.close();
	return 0;
};
</code></pre>
<p>Dann habe ich eine Funktion die diese Folge in das eigentliche Level umwandeln soll:</p>
<pre><code class="language-cpp">void Spielfeld::aktualisiereFeld()
{
	// aktualisieren bzw. vergleichen
	for(int i = 0; i &lt; YMAX; i++)
	{
		for(int j = 0; j &lt; XMAX; j++)
		{
			switch(feldZustand[i*j])
			{
				case KEIN_ZUSTAND: feld[i*j] = LEER;
								   break;
				case 1: feld[i*j] = MAUER;
						break;
				case 2: feld[i*j] = TURM;
						break;
				case 3: feld[i*j] = ZIEL;
						break;
			}
		}
	}
};
</code></pre>
<p>Und schlussendlich noch eine Funktion, die dieses Level zeichnen soll.</p>
<pre><code class="language-cpp">void Spielfeld::zeichneSpielfeld()
{	
	// altes Feld (visuell) löschen
	system(&quot;cls&quot;);

	// zeichnen
	for(int i = 0; i &lt; YMAX; i++)
	{
		for(int j = 0; j &lt; XMAX; j++)
		{
			std::cout &lt;&lt; feld[i*j];
		}
		std::cout &lt;&lt; std::endl;
	}
};
</code></pre>
<p>Das Problem besteht darin, dass aus irgendeinem Grund das Feld/Level nicht gezeichnet wird. Ersetze ich in der zeichnen-Funktion testweise &quot;std::cout &lt;&lt; feld[i*j];&quot; durch &quot;std::cout &lt;&lt; 'X';&quot;, wird immerhin das ausgegeben. Ich vermute, dass der Fehler in einer der beiden ersten FUnktionen oder beim Einlesen der Datei liegt.</p>
<p>Vielleicht hat einer von euch ja eine Idee.</p>
<p>MfG<br />
Chroma</p>
<p>P.S. Kritik an meinem Programmierstil nehme ich natürlich auch gerne an, da dieser mit sehr hoher Wahrscheinlichkeit schlecht oder ausbaufähig 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/277073/problem-mit-eingelesener-datei</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 03:01:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/277073.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 12 Nov 2010 16:05:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit eingelesener Datei on Fri, 12 Nov 2010 16:05:33 GMT]]></title><description><![CDATA[<p>Hallo ich bins schon wieder^^</p>
<p>Habe vor mal ein komplexeres &quot;Spiel&quot; zu schreiben. Möchte dies jedoch erstmal in der Konsole tun, um nur die Technik programmieren zu müssen und mich um keine Sprites o.ä. kümmern zu müssen. Stehe jetzt jedoch vor einem &quot;kleinen&quot; Problem.</p>
<p>Habe eine Textdatei (das Level) weclhe einegelesen wird, z.B. sowas:</p>
<pre><code>11111111111111111111111111111111111111111111111111
00000000000000000000000000000000000000000000000001
11111111111111111111111111111111111111111111111101
10000000000000000000000000000000000000000000000001
10111111111111111111111111111111111111111111111111
10100000000000000000000000000000000000000000000001
10100000000000000000000000000000000000000000000001
10100000000000000000000000000000000000000000000001
10111111111111111111111111111111111111111111111111
10000000000000000000000000000000000000000000000001
11111111111111111111111001111111111111111111111111
10000000000000000000001001000000000000000000000001
10000000000000000000001001000000000000000000000001
11111111111111111111111001111111111111111111111111
10000000000000000000000000000000000000000000000001
10111111111111111111111111111111111111111111111101
10100000000000000000000000000000000000000000000101
10100000000000000000000000000000000000000000000101
10100000000000000000000000000000000000000000000101
10100000000000000000000000000000000000000000000101
10100000000000000000000000000000000000000000000101
10100000000000000000000000000000000000000000000101
10111111111111111111111111111111111111111111111101
10000000000000000000000000000000000000000000000001
11111111111111111111111331111111111111111111111111
</code></pre>
<p>Die Zeichenfolge soll nun in ein dynamisches Array (bewusst erstmal keinen Vektor) namens feldZustand. Das erledigt diese Funktion:</p>
<pre><code class="language-cpp">int Spielfeld::getLevel(std::string level)
{
	std::string datei = level + &quot;.txt&quot;;
	std::ifstream levelDatei(datei.c_str(), std::ios::in); 

	if(!levelDatei)
	{
		std::cerr &lt;&lt; &quot;Fehler beim Erzeugen des Levels!&quot; &lt;&lt; std::endl;
		std::cin.get();
		return -1;
	}
	else
	{
		for(int i = 0; i &lt; YMAX; i++)
		{
			std::string buffer;
			getline(levelDatei, buffer);
			for(int j = 0; j &lt; XMAX; j++)
			{
				feldZustand[i*j] = buffer[j];
			}
		}
	}
	levelDatei.close();
	return 0;
};
</code></pre>
<p>Dann habe ich eine Funktion die diese Folge in das eigentliche Level umwandeln soll:</p>
<pre><code class="language-cpp">void Spielfeld::aktualisiereFeld()
{
	// aktualisieren bzw. vergleichen
	for(int i = 0; i &lt; YMAX; i++)
	{
		for(int j = 0; j &lt; XMAX; j++)
		{
			switch(feldZustand[i*j])
			{
				case KEIN_ZUSTAND: feld[i*j] = LEER;
								   break;
				case 1: feld[i*j] = MAUER;
						break;
				case 2: feld[i*j] = TURM;
						break;
				case 3: feld[i*j] = ZIEL;
						break;
			}
		}
	}
};
</code></pre>
<p>Und schlussendlich noch eine Funktion, die dieses Level zeichnen soll.</p>
<pre><code class="language-cpp">void Spielfeld::zeichneSpielfeld()
{	
	// altes Feld (visuell) löschen
	system(&quot;cls&quot;);

	// zeichnen
	for(int i = 0; i &lt; YMAX; i++)
	{
		for(int j = 0; j &lt; XMAX; j++)
		{
			std::cout &lt;&lt; feld[i*j];
		}
		std::cout &lt;&lt; std::endl;
	}
};
</code></pre>
<p>Das Problem besteht darin, dass aus irgendeinem Grund das Feld/Level nicht gezeichnet wird. Ersetze ich in der zeichnen-Funktion testweise &quot;std::cout &lt;&lt; feld[i*j];&quot; durch &quot;std::cout &lt;&lt; 'X';&quot;, wird immerhin das ausgegeben. Ich vermute, dass der Fehler in einer der beiden ersten FUnktionen oder beim Einlesen der Datei liegt.</p>
<p>Vielleicht hat einer von euch ja eine Idee.</p>
<p>MfG<br />
Chroma</p>
<p>P.S. Kritik an meinem Programmierstil nehme ich natürlich auch gerne an, da dieser mit sehr hoher Wahrscheinlichkeit schlecht oder ausbaufähig 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/1979565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979565</guid><dc:creator><![CDATA[Chroma]]></dc:creator><pubDate>Fri, 12 Nov 2010 16:05:33 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit eingelesener Datei on Fri, 12 Nov 2010 16:17:39 GMT]]></title><description><![CDATA[<p>Geh doch einfach mit dem Debugger durch den Code und schau, an welcher Stelle was schief geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979576</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Fri, 12 Nov 2010 16:17:39 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit eingelesener Datei on Fri, 12 Nov 2010 16:21:53 GMT]]></title><description><![CDATA[<p>hab ich schon, aber es geht ja im eigentlichen sinne nichts &quot;schief&quot;, also er zeigt mir keinen Fehler an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979580</guid><dc:creator><![CDATA[Chroma]]></dc:creator><pubDate>Fri, 12 Nov 2010 16:21:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit eingelesener Datei on Fri, 12 Nov 2010 16:33:36 GMT]]></title><description><![CDATA[<p>Dein Programm arbeitet nicht wie es soll. Also müssen an irgend einer Stelle in Variablen falsche Werte stehen (oder du einfach einen Denkfehler im Datenfluss haben).</p>
<p>Hab deinen Code nur überflogen, aber der Zugreif auf dein Array scheint mir falsch zu sein.</p>
<pre><code class="language-cpp">feldZustand[i*j]
</code></pre>
<p>Du gibst nirgends an, was feldZustand exakt ist, aber ich tippe mal auf ein 1dim Array, das ein 2dim Array darstellen soll (sprich ein linearisiertes 2D array).<br />
Wenn dem so ist, sollte der Zugriff eher so aussehen:</p>
<pre><code class="language-cpp">feldZustand[i * YDIM + j]
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1979584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979584</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Fri, 12 Nov 2010 16:33:36 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit eingelesener Datei on Fri, 12 Nov 2010 17:05:06 GMT]]></title><description><![CDATA[<p>ja, es ist ein 1Dmin-Array</p>
<pre><code class="language-cpp">int *feldZustand;
		char *feld;
</code></pre>
<pre><code class="language-cpp">feldZustand = new int[XMAX*YMAX];
	feld = new char[XMAX*YMAX];
</code></pre>
<p>habe die aufrufe jetzt korrigiert.<br />
Das Problem besteht jedoch weiterhin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979596</guid><dc:creator><![CDATA[Chroma]]></dc:creator><pubDate>Fri, 12 Nov 2010 17:05:06 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit eingelesener Datei on Fri, 12 Nov 2010 17:19:11 GMT]]></title><description><![CDATA[<p>Du liest dein Array 'feldZustand' doch als 'char's ein, d.h. dort drin stehen die Werte '0', '1' etc. und nicht 0, 1, etc.</p>
<p>Ändere daher mal die case-Werte:</p>
<pre><code class="language-cpp">case '1': feld[i*XMAX+j] = MAUER;
          break;
// etc...
</code></pre>
<p>Ansonsten lerne mit dem Debugger umzugehen -)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979603</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Fri, 12 Nov 2010 17:19:11 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit eingelesener Datei on Fri, 12 Nov 2010 17:19:34 GMT]]></title><description><![CDATA[<p>gut wäre, nach deinen Änderungen den aktuellen Codestand zu liefern, da es nun schwer fällt, zu wissen, was du wirklich geändert hast. aber wie this-&gt;that schon meinte:</p>
<p>Chroma schrieb:</p>
<blockquote>
<p>for(int i = 0; i &lt; YMAX; i++)<br />
{<br />
std::string buffer;<br />
getline(levelDatei, buffer);<br />
for(int j = 0; j &lt; XMAX; j++)<br />
{<br />
feldZustand[i*j] = buffer[j];<br />
}<br />
}</p>
</blockquote>
<pre><code>i   j   Code
0   0   feldZustand[0] = buffer[0];
0   1   feldZustand[0] = buffer[1];
0   2   feldZustand[0] = buffer[2];
</code></pre>
<p>Du überschreibst immer deine Werte <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="🤡"
    /> und das quasi überall und anderswo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979604</guid><dc:creator><![CDATA[BasicMan01]]></dc:creator><pubDate>Fri, 12 Nov 2010 17:19:34 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit eingelesener Datei on Fri, 12 Nov 2010 17:31:35 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18594">@Th69</a>: feldZustand ist ein int Array <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="😉"
    /> feld ist ein char Array</p>
<p>Hier nochmal der aktuelle Code:</p>
<pre><code class="language-cpp">// SPIELFELD - Deklarationen
#include &lt;string&gt;

#define XMAX 50
#define YMAX 25

#define KEIN_ZUSTAND 0 // 0 = LEER, 1 = MAUER, 2 = TURM, 3 = Zielbereich

#define LEER		' '
#define TURM		'Q'
#define TEMP_TURM	'T'
#define MAUER		'X'
#define ZIEL		'Z'

// TASTEN
#define ENTER        13
#define ESC			 27
#define PFEIL_OBEN   72
#define PFEIL_LINKS  75
#define PFEIL_RECHTS 77
#define PFEIL_UNTEN  80

class Spielfeld
{
	private:
		int groesseX, groesseY;
		int *feldZustand;
		char *feld;

	public:
		Spielfeld();
		~Spielfeld();
		int getLevel(std::string level);
		void aktualisiereFeld();
		void zeichneSpielfeld();
		bool setTurm(int eingabe);
};
</code></pre>
<pre><code class="language-cpp">// SPIELFELD - Implementationen
#include &quot;spielfeld.h&quot;
#include &lt;Windows.h&gt;
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;conio.h&gt;

Spielfeld::Spielfeld()
{	
	groesseX = XMAX;
	groesseY = YMAX;

	feldZustand = new int[XMAX*YMAX];
	feld = new char[XMAX*YMAX];

	// initialisieren
	for(int i = 0; i &lt; YMAX; i++)
	{
		for(int j = 0; j &lt; XMAX; j++)
		{
			feldZustand[i*YMAX+j] = KEIN_ZUSTAND;
		}
	}

	for(int i = 0; i &lt; YMAX; i++)
	{
		for(int j = 0; j &lt; XMAX; j++)
		{
			feld[i*YMAX+j] = LEER;
		}
	}
}

Spielfeld::~Spielfeld()
{	
	delete[] feldZustand;
	delete[] feld;
};

int Spielfeld::getLevel(std::string level)
{
	std::string datei = level + &quot;.txt&quot;;
	std::ifstream levelDatei(datei.c_str(), std::ios::in);
	if(!levelDatei)
	{
		std::cerr &lt;&lt; &quot;Fehler beim Erzeugen des Levels!&quot; &lt;&lt; std::endl;
		std::cin.get();
		return -1;
	}
	else
	{
		for(int i = 0; i &lt; YMAX; i++)
		{
			std::string buffer;
			getline(levelDatei, buffer);
			for(int j = 0; j &lt; XMAX; j++)
			{
				feldZustand[i*YMAX+j] = buffer[j];
			}
		}
	}
	levelDatei.close();
	return 0;
};

void Spielfeld::aktualisiereFeld()
{
	// aktualisieren bzw. vergleichen
	for(int i = 0; i &lt; YMAX; i++)
	{
		for(int j = 0; j &lt; XMAX; j++)
		{
			switch(feldZustand[i*YMAX+j])
			{
				case KEIN_ZUSTAND: feld[i*j] = LEER;
								   break;
				case 1: feld[i*YMAX+j] = MAUER;
						break;
				case 2: feld[i*YMAX+j] = TURM;
						break;
				case 3: feld[i*YMAX+j] = ZIEL;
						break;
			}
		}
	}
};

void Spielfeld::zeichneSpielfeld()
{	
	// altes Feld (visuell) löschen
	system(&quot;cls&quot;);

	// zeichnen
	for(int i = 0; i &lt; YMAX; i++)
	{
		for(int j = 0; j &lt; XMAX; j++)
		{
			std::cout &lt;&lt; feld[i*YMAX+j];
		}
		std::cout &lt;&lt; std::endl;
	}
};

bool Spielfeld::setTurm(int eingabe)
{
	// Startpos
	static int x = 25, y = 12;
	static char saveZustand = feld[x*x+y];

	// Bewegung
	switch(eingabe)
	{
	case PFEIL_OBEN: if(y == 0)
					 {
						 // NICHTS
					 }
					 else
					 {
						 feld[x*YMAX+y] = saveZustand;
						 y--;
					 }
					 break;
	case PFEIL_LINKS: if(x == 0)
					  {
						  // NICHTS
					  }
					  else
					  {
						  feld[x*YMAX+y] = saveZustand;
						  x--;
					  }
					  break;
	case PFEIL_RECHTS: if(x == XMAX)
					   {
						   // NICHTS
					   }
					   else
					   {
						   feld[x*YMAX+y] = saveZustand;
						   x++;
					   }
					   break;
	case PFEIL_UNTEN: if(y == YMAX)
					  {
						  // NICHTS
					  }
					  else
					  {
						  feld[x*YMAX+y] = saveZustand;
						  y++;
					  }
					  break;
	}

	if(eingabe == ENTER)
	{
		if(feld[x*YMAX+y] == MAUER || feld[x*YMAX+y] == TURM)
		{
			std::cerr &lt;&lt; &quot;Platzierung nicht moeglich!&quot; &lt;&lt; std::endl;
			return false;
		}
		else
		{
			feld[x*YMAX+y] = TURM;
			return true;
		}
	}

	if(eingabe == ESC)
	{
		std::cerr &lt;&lt; &quot;Platzierung abgebrochen!&quot; &lt;&lt; std::endl;
		feld[x*YMAX+y] = saveZustand;
		x = 25, y = 12;
		return true;
	}
	saveZustand = feld[x*YMAX+y];
	feld[x*YMAX+y] = TEMP_TURM;
	return false;
};
</code></pre>
<p>Habe jetzt einfach mal den kompletten Code gepostet damit auch ja nichts fehlt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>Naja das mit dem Debugger stimmt wohl. Kann in zwar benutzen, aber noch nicht wirklich effektiv. Aber ich bin ja auch noch im Lernprozess^^</p>
<p>EDIT: musste beim posten des Codes grad feststellen, wie sinnlos groesseX und groesseY sind <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="😃"
    /> bitte einfach nicht beachten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979607</guid><dc:creator><![CDATA[Chroma]]></dc:creator><pubDate>Fri, 12 Nov 2010 17:31:35 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit eingelesener Datei on Fri, 12 Nov 2010 19:07:44 GMT]]></title><description><![CDATA[<p>Zeile 75: Hier stimmt der Index nicht<br />
<div class="plugin-markdown"><input type="checkbox" id="checkbox44746" checked="true" /><label for="checkbox44746">liefert ein char. Der Wert des Char entspricht dem entsprechendem Ascii-Wert. 1 ist also 49, 2=50 usw.</label></div><br />
Zeile 29: kann auch in die for-Schleife (Zeile 21)</p>
<p>Außerdem muss dein Index im ganzen Code von i*YMAX+j auf i*XMAX+j geaendert werden</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979652</guid><dc:creator><![CDATA[BasicMan01]]></dc:creator><pubDate>Fri, 12 Nov 2010 19:07:44 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit eingelesener Datei on Fri, 12 Nov 2010 21:44:20 GMT]]></title><description><![CDATA[<p>Danke für die Kritik. Habe versucht alles umzusetzen. Das Feld wird leider immer noch nicht angezeigt. Der aktuelle Code ist:</p>
<pre><code class="language-cpp">// SPIELFELD - Implementationen
#include &quot;spielfeld.h&quot;
#include &lt;Windows.h&gt;
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;conio.h&gt;

Spielfeld::Spielfeld()
{	
	feldZustand = new int[XMAX*YMAX];
	feld = new char[XMAX*YMAX];

	// initialisieren
	for(int i = 0; i &lt; YMAX; i++)
	{
		for(int j = 0; j &lt; XMAX; j++)
		{
			feldZustand[i*XMAX+j] = KEIN_ZUSTAND;
			feld[i*XMAX+j] = LEER;
		}
	}
}

Spielfeld::~Spielfeld()
{	
	delete[] feldZustand;
	delete[] feld;
};

int Spielfeld::getLevel(std::string level)
{
	std::string datei = level + &quot;.txt&quot;;
	std::ifstream levelDatei(datei.c_str(), std::ios::in);
	if(!levelDatei)
	{
		std::cerr &lt;&lt; &quot;Fehler beim Erzeugen des Levels!&quot; &lt;&lt; std::endl;
		std::cin.get();
		return -1;
	}
	else
	{
		for(int i = 0; i &lt; YMAX; i++)
		{
			char temp;
			std::string buffer;
			getline(levelDatei, buffer);
			for(int j = 0; j &lt; XMAX; j++)
			{
				temp = buffer[j];
				switch(temp)
				{
					case '48': feldZustand[i*XMAX+j] = 0;
							   break;
					case '49': feldZustand[i*XMAX+j] = 1;
							   break;
					case '50': feldZustand[i*XMAX+j] = 2;
							   break;
					case '51': feldZustand[i*XMAX+j] = 3;
							   break;
				}
			}
		}
	}
	levelDatei.close();
	return 0;
};

void Spielfeld::aktualisiereFeld()
{
	// aktualisieren bzw. vergleichen
	for(int i = 0; i &lt; YMAX; i++)
	{
		for(int j = 0; j &lt; XMAX; j++)
		{
			switch(feldZustand[i*XMAX+j])
			{
				case KEIN_ZUSTAND: feld[i*XMAX+j] = LEER;
								   break;
				case 1: feld[i*XMAX+j] = MAUER;
						break;
				case 2: feld[i*XMAX+j] = TURM;
						break;
				case 3: feld[i*XMAX+j] = ZIEL;
						break;
			}
		}
	}
};

void Spielfeld::zeichneSpielfeld()
{	
	// altes Feld (visuell) löschen
	system(&quot;cls&quot;);

	// zeichnen
	for(int i = 0; i &lt; YMAX; i++)
	{
		for(int j = 0; j &lt; XMAX; j++)
		{
			std::cout &lt;&lt; feld[i*XMAX+j];
		}
		std::cout &lt;&lt; std::endl;
	}
};

bool Spielfeld::setTurm(int eingabe)
{
	// Startpos
	static int x = 25, y = 12;
	static char saveZustand = feld[x*x+y];

	// Bewegung
	switch(eingabe)
	{
	case PFEIL_OBEN: if(y == 0)
					 {
						 // NICHTS
					 }
					 else
					 {
						 feld[x*XMAX+y] = saveZustand;
						 y--;
					 }
					 break;
	case PFEIL_LINKS: if(x == 0)
					  {
						  // NICHTS
					  }
					  else
					  {
						  feld[x*XMAX+y] = saveZustand;
						  x--;
					  }
					  break;
	case PFEIL_RECHTS: if(x == XMAX)
					   {
						   // NICHTS
					   }
					   else
					   {
						   feld[x*XMAX+y] = saveZustand;
						   x++;
					   }
					   break;
	case PFEIL_UNTEN: if(y == YMAX)
					  {
						  // NICHTS
					  }
					  else
					  {
						  feld[x*XMAX+y] = saveZustand;
						  y++;
					  }
					  break;
	}

	if(eingabe == ENTER)
	{
		if(feld[x*XMAX+y] == MAUER || feld[x*XMAX+y] == TURM)
		{
			std::cerr &lt;&lt; &quot;Platzierung nicht moeglich!&quot; &lt;&lt; std::endl;
			return false;
		}
		else
		{
			feld[x*XMAX+y] = TURM;
			return true;
		}
	}

	if(eingabe == ESC)
	{
		std::cerr &lt;&lt; &quot;Platzierung abgebrochen!&quot; &lt;&lt; std::endl;
		feld[x*XMAX+y] = saveZustand;
		x = 25, y = 12;
		return true;
	}
	saveZustand = feld[x*XMAX+y];
	feld[x*XMAX+y] = TEMP_TURM;
	return false;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1979713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979713</guid><dc:creator><![CDATA[Chroma]]></dc:creator><pubDate>Fri, 12 Nov 2010 21:44:20 GMT</pubDate></item></channel></rss>