<?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[snake Spielchen]]></title><description><![CDATA[<p>Hallo,<br />
ich habe ein kleines snake Spielchen gemacht und wollte mal fragen,<br />
ob das von der Programmierung her einigermaßen gelungen ist bzw. ob ihr Fehler entdeckt oder was ihr anders/besser gemacht hättet.<br />
Z. B. frage ich mich, ob es sinnvoll ist, jeden Durchgang der Hauptschleife abzufragen, ob es schon gameover ist.</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;windows.h&gt;
#include &lt;ctime&gt;
#include &lt;queue&gt;

short randh; // zufällige Koordinaten fürs Essen
short randb; //
const short Hoehe = 16;
const short Breite =32;

char Welt[Hoehe][Breite] ={
	{'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'o', 'O', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'}
};

void ClearScreen();
void GenRandFood();

int main()
{
	std::cout &lt;&lt; &quot;Spiel wird vorbereitet.&quot;;

	// Initialisierung
	short Kopfx = 16;
	short Kopfy =  7;
	char Richtung = 'r';
	short snakelen = 2;
	bool gameover = false;
	bool essenvorhanden = false;
	srand(time(NULL)); // Zufallsgenerator initialisieren
	std::queue&lt;short&gt; snakebodyx; // Körperteile X-Positionen
	std::queue&lt;short&gt; snakebodyy; // und Y-Positionen
	snakebodyx.push(15);
	snakebodyy.push(7);
	bool aussetzen = false; // Löschung des letzten Gliedes setzt durchs Essen einmal aus

	// Programmstart
	ClearScreen();

	// Hauptschleife
	while(gameover == false)
	{

		// Eingabe verarbeiten
		if(GetAsyncKeyState(VK_LEFT) &amp; 0x8000 &amp;&amp; Richtung != 'r'){Richtung = 'l';} // 180°-Drehungen verhindern
		else
		{
			if(GetAsyncKeyState(VK_RIGHT) &amp; 0x8000 &amp;&amp; Richtung != 'l'){Richtung = 'r';}
			else
			{
				if(GetAsyncKeyState(VK_UP) &amp; 0x8000 &amp;&amp; Richtung != 'u'){Richtung = 'o';}
				else
				{
					if(GetAsyncKeyState(VK_DOWN) &amp; 0x8000 &amp;&amp; Richtung != 'o'){Richtung = 'u';}
				}
			}
		}

		// Spielereignisse
		switch(Richtung)
		{
			case 'l':
				if(Welt[Kopfy][Kopfx-1] == '.') // Essen am Zielort des Kopfes?
				{
					snakelen++;
					essenvorhanden = false;
					aussetzen = true;
				}
				if(Welt[Kopfy][Kopfx-1] == 'X' || Welt[Kopfy][Kopfx-1] == 'o')
				{
					gameover = true;
				}
				else
				{
					Welt[Kopfy][Kopfx-1] = 'O'; // Kopf der Schlange
					Welt[Kopfy][Kopfx] = 'o'; // normales Körperteil
					snakebodyx.push(Kopfx); // Wo vor der Bewegung der Kopf war, ist jetzt ein Körperteil, der in queue gepackt wird.
					snakebodyy.push(Kopfy); //
					Welt[snakebodyy.front()][snakebodyx.front()] = ' '; // löscht letztes Glied
					Kopfx--;
				}
				break;

			case 'r':
				if(Welt[Kopfy][Kopfx+1] == '.')
				{
					snakelen++;
					essenvorhanden = false;
					aussetzen = true;
				}
				if(Welt[Kopfy][Kopfx+1] == 'X' || Welt[Kopfy][Kopfx+1] == 'o')
				{
					gameover = true;
				}
				else
				{
					Welt[Kopfy][Kopfx+1] = 'O';
					Welt[Kopfy][Kopfx] = 'o';
					snakebodyx.push(Kopfx);
					snakebodyy.push(Kopfy);
					Welt[snakebodyy.front()][snakebodyx.front()] = ' ';
					Kopfx++;
				}
				break;

			case 'o':
				if(Welt[Kopfy-1][Kopfx] == '.')
				{
					snakelen++;
					essenvorhanden = false;
					aussetzen = true;
				}
				if(Welt[Kopfy-1][Kopfx] == 'X' || Welt[Kopfy-1][Kopfx] == 'o')
				{
					gameover = true;
				}
				else
				{
					Welt[Kopfy-1][Kopfx] = 'O';
					Welt[Kopfy][Kopfx] = 'o';
					snakebodyx.push(Kopfx);
					snakebodyy.push(Kopfy);
					Welt[snakebodyy.front()][snakebodyx.front()] = ' ';
					Kopfy--;
				}
				break;

			case 'u':
				if(Welt[Kopfy+1][Kopfx] == '.')
				{
					snakelen++;
					essenvorhanden = false;
					aussetzen = true;
				}
				if(Welt[Kopfy+1][Kopfx] == 'X' || Welt[Kopfy+1][Kopfx] == 'o')
				{
					gameover = true;
				}
				else
				{
					Welt[Kopfy+1][Kopfx] = 'O';
					Welt[Kopfy][Kopfx] = 'o';
					snakebodyx.push(Kopfx);
					snakebodyy.push(Kopfy);
					Welt[snakebodyy.front()][snakebodyx.front()] = ' ';
					Kopfy++;
				}
				break;

			default: std::cout &lt;&lt; &quot;Error: default in switch-Anweisung!&quot;; Sleep(3000); break;
		}

		if(aussetzen == false)
		{
			snakebodyx.pop(); // Körperteil aus der queue entfernen
			snakebodyy.pop(); //
		}
		else
		{
			aussetzen = false; // es wurde bereits ausgesetzt, also nächste Runde nicht mehr aussetzen
		}

		if(essenvorhanden == false)
		{
			GenRandFood();
			Welt[randh][randb] = '.';
			essenvorhanden = true;
		}

		// Bild rendern
		ClearScreen();

		for(int h = 0; h &lt; Hoehe; h++)
		{
			for(int b = 0; b &lt; Breite; b++)
			{
				std::cout &lt;&lt; Welt[h][b];
			}
			std::cout &lt;&lt; &quot;\n&quot;;
		}

		Sleep(1000/25); // ~FPS und Spielgeschwindigkeit

	};

	// Game over / Programmende
	ClearScreen();
	std::cout &lt;&lt; &quot;Game over!&quot;;
	Sleep(3000);
	ClearScreen();
	return 0;
}

void GenRandFood()
{
	// int rand_nr = rand() % (max - min) + min;
	randh = rand() % (Hoehe-2 - 1) + 1; // Array fängt bei 0 an
	randb = rand() % (Breite-2 - 1) + 1; //
	if(Welt[randh][randb] == 'O' || Welt[randh][randb] == 'o')
	{
		GenRandFood();
	}
}

// ClearScreen-Methode von http://www.cplusplus.com/articles/4z18T05o/#Windows
// einfach übernommen, leert die Konsole
void ClearScreen()
{
	HANDLE hStdOut;
	CONSOLE_SCREEN_BUFFER_INFO csbi;
	DWORD count;
	DWORD cellCount;
	COORD homeCoords = {0, 0};

	hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
	if(hStdOut == INVALID_HANDLE_VALUE) return;

	/* Get the number of cells in the current buffer */
	if(!GetConsoleScreenBufferInfo(hStdOut, &amp;csbi)) return;
	cellCount = csbi.dwSize.X *csbi.dwSize.Y;

	/* Fill the entire buffer with spaces */
	if(!FillConsoleOutputCharacter(hStdOut, (TCHAR) ' ', cellCount, homeCoords, &amp;count)) return;

	/* Fill the entire buffer with the current colors and attributes */
	if(!FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, cellCount, homeCoords, &amp;count)) return;

	/* Move the cursor home */
	SetConsoleCursorPosition(hStdOut, homeCoords);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/333997/snake-spielchen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Apr 2026 02:37:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/333997.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 16 Aug 2015 10:03:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to snake Spielchen on Sun, 16 Aug 2015 10:03:38 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe ein kleines snake Spielchen gemacht und wollte mal fragen,<br />
ob das von der Programmierung her einigermaßen gelungen ist bzw. ob ihr Fehler entdeckt oder was ihr anders/besser gemacht hättet.<br />
Z. B. frage ich mich, ob es sinnvoll ist, jeden Durchgang der Hauptschleife abzufragen, ob es schon gameover ist.</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;windows.h&gt;
#include &lt;ctime&gt;
#include &lt;queue&gt;

short randh; // zufällige Koordinaten fürs Essen
short randb; //
const short Hoehe = 16;
const short Breite =32;

char Welt[Hoehe][Breite] ={
	{'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'o', 'O', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X'},
	{'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'}
};

void ClearScreen();
void GenRandFood();

int main()
{
	std::cout &lt;&lt; &quot;Spiel wird vorbereitet.&quot;;

	// Initialisierung
	short Kopfx = 16;
	short Kopfy =  7;
	char Richtung = 'r';
	short snakelen = 2;
	bool gameover = false;
	bool essenvorhanden = false;
	srand(time(NULL)); // Zufallsgenerator initialisieren
	std::queue&lt;short&gt; snakebodyx; // Körperteile X-Positionen
	std::queue&lt;short&gt; snakebodyy; // und Y-Positionen
	snakebodyx.push(15);
	snakebodyy.push(7);
	bool aussetzen = false; // Löschung des letzten Gliedes setzt durchs Essen einmal aus

	// Programmstart
	ClearScreen();

	// Hauptschleife
	while(gameover == false)
	{

		// Eingabe verarbeiten
		if(GetAsyncKeyState(VK_LEFT) &amp; 0x8000 &amp;&amp; Richtung != 'r'){Richtung = 'l';} // 180°-Drehungen verhindern
		else
		{
			if(GetAsyncKeyState(VK_RIGHT) &amp; 0x8000 &amp;&amp; Richtung != 'l'){Richtung = 'r';}
			else
			{
				if(GetAsyncKeyState(VK_UP) &amp; 0x8000 &amp;&amp; Richtung != 'u'){Richtung = 'o';}
				else
				{
					if(GetAsyncKeyState(VK_DOWN) &amp; 0x8000 &amp;&amp; Richtung != 'o'){Richtung = 'u';}
				}
			}
		}

		// Spielereignisse
		switch(Richtung)
		{
			case 'l':
				if(Welt[Kopfy][Kopfx-1] == '.') // Essen am Zielort des Kopfes?
				{
					snakelen++;
					essenvorhanden = false;
					aussetzen = true;
				}
				if(Welt[Kopfy][Kopfx-1] == 'X' || Welt[Kopfy][Kopfx-1] == 'o')
				{
					gameover = true;
				}
				else
				{
					Welt[Kopfy][Kopfx-1] = 'O'; // Kopf der Schlange
					Welt[Kopfy][Kopfx] = 'o'; // normales Körperteil
					snakebodyx.push(Kopfx); // Wo vor der Bewegung der Kopf war, ist jetzt ein Körperteil, der in queue gepackt wird.
					snakebodyy.push(Kopfy); //
					Welt[snakebodyy.front()][snakebodyx.front()] = ' '; // löscht letztes Glied
					Kopfx--;
				}
				break;

			case 'r':
				if(Welt[Kopfy][Kopfx+1] == '.')
				{
					snakelen++;
					essenvorhanden = false;
					aussetzen = true;
				}
				if(Welt[Kopfy][Kopfx+1] == 'X' || Welt[Kopfy][Kopfx+1] == 'o')
				{
					gameover = true;
				}
				else
				{
					Welt[Kopfy][Kopfx+1] = 'O';
					Welt[Kopfy][Kopfx] = 'o';
					snakebodyx.push(Kopfx);
					snakebodyy.push(Kopfy);
					Welt[snakebodyy.front()][snakebodyx.front()] = ' ';
					Kopfx++;
				}
				break;

			case 'o':
				if(Welt[Kopfy-1][Kopfx] == '.')
				{
					snakelen++;
					essenvorhanden = false;
					aussetzen = true;
				}
				if(Welt[Kopfy-1][Kopfx] == 'X' || Welt[Kopfy-1][Kopfx] == 'o')
				{
					gameover = true;
				}
				else
				{
					Welt[Kopfy-1][Kopfx] = 'O';
					Welt[Kopfy][Kopfx] = 'o';
					snakebodyx.push(Kopfx);
					snakebodyy.push(Kopfy);
					Welt[snakebodyy.front()][snakebodyx.front()] = ' ';
					Kopfy--;
				}
				break;

			case 'u':
				if(Welt[Kopfy+1][Kopfx] == '.')
				{
					snakelen++;
					essenvorhanden = false;
					aussetzen = true;
				}
				if(Welt[Kopfy+1][Kopfx] == 'X' || Welt[Kopfy+1][Kopfx] == 'o')
				{
					gameover = true;
				}
				else
				{
					Welt[Kopfy+1][Kopfx] = 'O';
					Welt[Kopfy][Kopfx] = 'o';
					snakebodyx.push(Kopfx);
					snakebodyy.push(Kopfy);
					Welt[snakebodyy.front()][snakebodyx.front()] = ' ';
					Kopfy++;
				}
				break;

			default: std::cout &lt;&lt; &quot;Error: default in switch-Anweisung!&quot;; Sleep(3000); break;
		}

		if(aussetzen == false)
		{
			snakebodyx.pop(); // Körperteil aus der queue entfernen
			snakebodyy.pop(); //
		}
		else
		{
			aussetzen = false; // es wurde bereits ausgesetzt, also nächste Runde nicht mehr aussetzen
		}

		if(essenvorhanden == false)
		{
			GenRandFood();
			Welt[randh][randb] = '.';
			essenvorhanden = true;
		}

		// Bild rendern
		ClearScreen();

		for(int h = 0; h &lt; Hoehe; h++)
		{
			for(int b = 0; b &lt; Breite; b++)
			{
				std::cout &lt;&lt; Welt[h][b];
			}
			std::cout &lt;&lt; &quot;\n&quot;;
		}

		Sleep(1000/25); // ~FPS und Spielgeschwindigkeit

	};

	// Game over / Programmende
	ClearScreen();
	std::cout &lt;&lt; &quot;Game over!&quot;;
	Sleep(3000);
	ClearScreen();
	return 0;
}

void GenRandFood()
{
	// int rand_nr = rand() % (max - min) + min;
	randh = rand() % (Hoehe-2 - 1) + 1; // Array fängt bei 0 an
	randb = rand() % (Breite-2 - 1) + 1; //
	if(Welt[randh][randb] == 'O' || Welt[randh][randb] == 'o')
	{
		GenRandFood();
	}
}

// ClearScreen-Methode von http://www.cplusplus.com/articles/4z18T05o/#Windows
// einfach übernommen, leert die Konsole
void ClearScreen()
{
	HANDLE hStdOut;
	CONSOLE_SCREEN_BUFFER_INFO csbi;
	DWORD count;
	DWORD cellCount;
	COORD homeCoords = {0, 0};

	hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
	if(hStdOut == INVALID_HANDLE_VALUE) return;

	/* Get the number of cells in the current buffer */
	if(!GetConsoleScreenBufferInfo(hStdOut, &amp;csbi)) return;
	cellCount = csbi.dwSize.X *csbi.dwSize.Y;

	/* Fill the entire buffer with spaces */
	if(!FillConsoleOutputCharacter(hStdOut, (TCHAR) ' ', cellCount, homeCoords, &amp;count)) return;

	/* Fill the entire buffer with the current colors and attributes */
	if(!FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, cellCount, homeCoords, &amp;count)) return;

	/* Move the cursor home */
	SetConsoleCursorPosition(hStdOut, homeCoords);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2464053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2464053</guid><dc:creator><![CDATA[Kinemeier]]></dc:creator><pubDate>Sun, 16 Aug 2015 10:03:38 GMT</pubDate></item><item><title><![CDATA[Reply to snake Spielchen on Sun, 16 Aug 2015 10:44:18 GMT]]></title><description><![CDATA[<p>Kinemeier schrieb:</p>
<blockquote>
<p>Z. B. frage ich mich, ob es sinnvoll ist, jeden Durchgang der Hauptschleife abzufragen, ob es schon gameover ist.</p>
</blockquote>
<p>Wie denn sonst? Wenn du den Kopf ein Stück weiter bewegst musst du natürlich prüfen ob man in eine Wand reingelaufen ist.</p>
<p>Ansonsten zum Programmierstil:<br />
- Globale Variablen sollte man vermeiden. Das Welt Array meinetwegen aber die Random Positionen fürs Essen wären ganz klar ein Kandidat für einen normalen Rückgabewert.<br />
- Ich hätte mir eine Klasse für 2D Positionen erstellt. Dann braucht man nur eine queue für die Positionen und auch sonst weniger ...x und ...y Variablen.<br />
- Das switch Zeug für die verschiedenen Richtungen ist fast alles der gleiche Code. Das sollte man versuchen zusammen zu fassen. Wenn du eine Klasse für 2D Positionen hast kann man damit auch Richtungen darstellen. Statt die Richtungen als r, l, o, u zu speichern würde man dann (1,0), (-1,0), (0, 1), (0, -1) oder so speichern. Und dann vereinfachen sich auch deine ganzen Fälle im switch weil du nur die aktuellen Position + Richtung rechnen musst um die neue Position zu erhalten.<br />
- Schönheitsfehler: Statt</p>
<pre><code>if(...) {...}
else
{
    if(...) {...}
    else
    {
        if(...) {...}
    }
}
</code></pre>
<p>besser:</p>
<pre><code>if(...) {...}
else if(...) {...}
else if(...) {...}
</code></pre>
<p>Das ist jedenfalls was mir mal auf die schnelle einfällt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2464059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2464059</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Sun, 16 Aug 2015 10:44:18 GMT</pubDate></item><item><title><![CDATA[Reply to snake Spielchen on Sun, 16 Aug 2015 13:22:53 GMT]]></title><description><![CDATA[<p>Das mit dem switch wurde ja schon erwähnt... Ich würde den Level aber auf jeden Fall noch aus einer Datei lesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2464089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2464089</guid><dc:creator><![CDATA[TGGC]]></dc:creator><pubDate>Sun, 16 Aug 2015 13:22:53 GMT</pubDate></item><item><title><![CDATA[Reply to snake Spielchen on Sun, 16 Aug 2015 14:04:24 GMT]]></title><description><![CDATA[<p>TGGC schrieb:</p>
<blockquote>
<p>Ich würde den Level aber auf jeden Fall noch aus einer Datei lesen.</p>
</blockquote>
<p>Oder beim Programmstart generieren. Dann könnte man auch die Größe des Spielfelds dynamisch festlegen und verschiedene Varianten mit/ohne Wänden ermöglichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2464097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2464097</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Sun, 16 Aug 2015 14:04:24 GMT</pubDate></item><item><title><![CDATA[Reply to snake Spielchen on Mon, 17 Aug 2015 07:58:45 GMT]]></title><description><![CDATA[<p>Okay, danke soweit.<br />
Allerdings ist mir beim testen aufgefallen, dass manchmal das Essen nicht platziert wird.<br />
Woran kann das nur liegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2464212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2464212</guid><dc:creator><![CDATA[Kinemeier]]></dc:creator><pubDate>Mon, 17 Aug 2015 07:58:45 GMT</pubDate></item></channel></rss>