Tic,Tac,Toe im CMD-Editor, Problem

silent12

Mitglied
Hallo
Habe gerade ein Tic,Tac,Toe Spiel für den CMD-Editor programmiert und bekomme jetzt immer wenn ich eine Zahl für das anzukreuzende Feld eingeben möchte einen Fehler :/

Hier der Code (würde mich über Tipps dazu SEHR freuen, Code einfach selber ausprobieren):
Code:
#include <iostream>
#include <conio.h>
using namespace std;





int main ()
{

	char cSquare1 = '1';
	char cSquare2 = '2';
	char cSquare3 = '3';
	char cSquare4 = '4';
	char cSquare5 = '5';
	char cSquare6 = '6';
	char cSquare7 = '7';
	char cSquare8 = '8';
	char cSquare9 = '9';
	int iSpieler = 1;
	bool bGameOver  = true;


	do
	{
		cout << cSquare1 << " | " << cSquare2 << " | " << cSquare3 << endl; 
		cout << cSquare4 << " | " << cSquare5 << " | " << cSquare6 << endl; 
		cout << cSquare7 << " | " << cSquare8 << " | " << cSquare9 << endl;


		char cZeichen;
		if (iSpieler == 1)
		{cZeichen = 'X';
		}
			else 
			{cZeichen = 'O';
		}


		cout <<"Player" << iSpieler << "'s move:" << endl;
		bool bEingabe;
			
			do
			{char cInput;
			cin >> cInput;
			bEingabe = true;

			if (cInput == '1' && cSquare1 == '1')
				{cSquare1 = cZeichen;
				}
				
			else if (cInput == '2' && cSquare1 == '2')
				{cSquare1 = cZeichen;
				}

			else if (cInput == '3' && cSquare1 == '3')
				{cSquare1 = cZeichen;
				}

			else if (cInput == '4' && cSquare1 == '4')
				{cSquare1 = cZeichen;
				}

			else if (cInput == '5' && cSquare1 == '5')
				{cSquare1 = cZeichen;
				}

			else if (cInput == '6' && cSquare1 == '6')
				{cSquare1 = cZeichen;
				}

			else if (cInput == '7' && cSquare1 == '7')
				{cSquare1 = cZeichen;
				}

			else if (cInput == '8' && cSquare1 == '8')
				{cSquare1 = cZeichen;
				}

			else if (cInput == '9' && cSquare1 == '9')
				{cSquare1 = cZeichen;
				}

			else 
				{cout << "Falsche Eingabe. Versuche es noch einmal" << endl;
				 bEingabe = false;
				}

			} 

			while ( !bEingabe); //cEingabe != true || cEingabe == false

			bGameOver	  = false;
			bool bWinGame = true;
			if (cSquare1 != '1')
			{
				if(cSquare2 == cSquare1 && cSquare3 == cSquare1)
				{bGameOver = true;
				}

				if(cSquare4 == cSquare1 && cSquare7 == cSquare1)
				{bGameOver = true;
				}

			}
			if (cSquare5 != '5')
			{
				if(cSquare1 == cSquare5 && cSquare9 == cSquare5)
				{bGameOver = true;
				}

				if(cSquare2 == cSquare5 && cSquare8 == cSquare5)
				{bGameOver = true;
				}

				if(cSquare4 == cSquare5 && cSquare6 == cSquare5)
				{bGameOver = true;
				}

				if(cSquare7 == cSquare5 && cSquare3 == cSquare5)
				{bGameOver = true;
				}
				
			}
			if (cSquare5 != '9')
			{
				if(cSquare3 == cSquare9 && cSquare6 == cSquare9)
				{bGameOver = true;
				}

				if(cSquare7 == cSquare9 && cSquare8 == cSquare9)
				{bGameOver = true;
				}
				
			}
		
 


			//Unentschieden
			if (cSquare1 != '1' && cSquare2 != '2' && cSquare3 != '3' &&
				cSquare4 != '4' && cSquare5 != '5' && cSquare6 != '6' &&
				cSquare7 != '7' && cSquare8 != '8' && cSquare9 != '9' && !bGameOver)
			{
				bGameOver = true;
				bWinGame = false;
			}

		  if (bGameOver)  //bGameOver == true || bGameOver != false
		  { 
				if (bWinGame)			//bWingame == true
				{cout <<"Player" << iSpieler << " wins!" << endl;
				}

			cout << cSquare1 << " | " << cSquare2 << " | " << cSquare3 << endl; 
			cout << cSquare4 << " | " << cSquare5 << " | " << cSquare6 << endl; 
			cout << cSquare7 << " | " << cSquare8 << " | " << cSquare9 << endl;

			cout <<"Game Over!" << endl;
			cout <<"Play again (y/n) ?" << endl;
			char cPlayAgain;
			cin >> cPlayAgain;


			if(cPlayAgain == 'y')
			{
				bGameOver = false;
				cSquare1 = '1';
				cSquare2 = '2';
				cSquare3 = '3';
				cSquare4 = '4';
				cSquare5 = '5';
				cSquare6 = '6';
				cSquare7 = '7';
				cSquare8 = '8';
				cSquare9 = '9';

			}
			iSpieler = 1;
		 }	//Game Over
			else 
			{
				if(iSpieler == 1)
				{ 
					iSpieler = 2;
				}
					else
					{iSpieler = 1;
					}
			}
	 } while (!bGameOver);
	return 0;
}
 
Hallo,

Soweit ich das beim probieren feststellen konnte kommt nirgends eine Fehlermeldung.

Edit: Oder meinst du, dass man nur das 1. Feld ankreuzen kann? Das liegt daran, dass du bei jeder Eingabe nur gegen das Feld 1 vergleichst, bzw. dieses setzt:

C++:
else if (cInput == '2' && cSquare1 == '2')
{
  cSquare1 = cZeichen;
}

müsste doch so aussehen:

C++:
else if (cInput == '2' && cSquare2 == '2')
{
  cSquare2 = cZeichen;
}

Ebenso für 3-9.
 
Zuletzt bearbeitet von einem Moderator:
Ohman danke für die Antwort (nächstes mal jedes else if entweder einzelnd schreiben oder sauberer kontrollieren ).

Gruß
silent12
 
Zurück