Wo ist in meinem Code der Fehler?
-
Ich habe gerade ein Projekt gestartet, das um Tic Tac Toe geht.
Hier der Code:// Spielaufbau: // a1 |b1 |c1 // ---|---|--- // a2 |b2 |c2 // ---|---|--- // a3 |b3 |c3 // // #include <iostream> #include <string> #include <conio.h> using namespace std; int eingabe = 0; string NameS1 = "S1", NameS2 = "S2"; string leera1 = " ", leera2 = " ", leera3 = " ", leerb1 = " ", leerb2 = " "; string leerb3 = " ", leerc1 = " ", leerc2 = " ", leerc3 = " "; //string IhrName = "Noch nicht bestimmt"; int main() { //Spielaufbau: while (1) { //Spielfeld cout << leera1 << "|" << leerb1 << "|" << leerc1 << "\n"; cout << "---" << "|" << "---" << "|" << "---\n"; cout << leera2 << "|" << leerb2 << "|" << leerc2 << "\n"; cout << "---" << "|" << "---" << "|" << "---\n"; cout << leera3 << "|" << leerb3 << "|" << leerc3 << "\n"; //Eingabe und Folgen cout << "\n\n"; cin >> eingabe; if ((eingabe < 1) || (eingabe > 9)) //then { cout << "Eingabe kann nicht bearbeitet werden.\nBitte versuchen sie es erneut!"; getch(); break; } if ((eingabe > 0) && (eingabe < 10)) //wenn eingabe korrekt ist, dann { if (eingabe == 1) { leera3 = " X "; } if (eingabe == 2) { leerb3 = " X "; } if (eingabe == 3) { leerc3 = " X "; } if (eingabe == 4) { leera2 = " X "; } if (eingabe == 5) { leerb2 = " X "; } if (eingabe == 6) { leerc2 = " X "; } if (eingabe == 7) { leera1 = " X "; } if (eingabe == 8) { leerb1 = " X "; } if (eingabe == 9) { leerc1 = " X "; } } getch(); }
Ignoriert einfach die if (eingabe == ...), ich weiß, man kann sie auch mit switch(...) machen.
Ich such schon ne 1/2 Stunde an dem Fehler. Es kommt immer:
Line [die letzte] prase
Könnt ihr mir helfen?
-
Hmmm, die Fehlermeldung kenn ich nicht, aber du hast ein "}" vergessen:
//... if (eingabe == 9) { leerc1 = " X "; } } }// Hier hast du das "}" vergessen getch(); }
-
probier mal so
habs schnell zusammengehackt, können also noch fehlerchen drin sein...
dann musst du nur noch das eigentlich interessante implementieren nämlich ob einer gewonnen hat oder nicht#include <iostream> using namespace std; int sieger(char *spielfeld){ //das musst du noch machen return 0; } void spielfeld_ausgeben(char *spielfeld){ for(int i=0;i<3;++i){ for(int j=0;j<3;++j) cout<<' '<<spielfeld[j+i*3]<<' '<<(j==2?'\n':'|'); if(i<2)cout << "---|---|---\n"; } cout << "\n\n"; } int main(){ char eingabe; char spielfeld[9]={' ',' ',' ',' ',' ',' ',' ',' ',' '}; for(int zug=0;zug<9&&!sieger(spielfeld);++zug){ spielfeld_ausgeben(spielfeld); cout<<"Spieler "<< 1+zug%2 << "! Bitte machen sie Ihren Zug(0 fuer Spiel beenden)"<<endl; eingabe='n'; while(!isdigit(eingabe)){ cout<<"Geben Sie eine Zahl von 0 bis 9 ein..."; cin >> eingabe; } if(isdigit(eingabe)) if(eingabe!='0')spielfeld[eingabe-1-'0']=zug%2?'O':'X'; else break; } spielfeld_ausgeben(spielfeld); }
-
Genau, die Klammer hat gefehlt
Danke
-
/*************************************************** Entwurf für Tic-Tac-Toe ***************************************************/ #include <conio.h> /* getch() */ #include <iostream> /* cin, cout, endl */ #include <cctype> /* isdigit(x) */ using namespace std; void wait_ms( unsigned t ) { clock_t start; double zeit; start = clock(); do { zeit = 1000 * ( clock() - start ) / static_cast<float>(CLOCKS_PER_SEC); }while( zeit < t ); } class Board /* Spielbrett-Klasse */ { private: char field_[3][3]; /* Spielfeld 3*3 zweidimensionales Array */ int turn_; /* Wer ist am Zug? Spieler 1: 1 und Spieler 2: 2 */ char sign_; /* Zeichen */ int number_of_turns_; /* Zahl der gültigen Züge */ public: Board(); /* Konstruktor */ bool checkEmpty( int, int ) const; /* Feld frei? */ void input(); /* Eingabe */ void display() const; /* Spielfeld visualisieren */ void playGame(); void checkStatus(); /* auf Sieg prüfen */ void nextplayer(); /* zwischen Spieler 1 und 2 umschalten */ private: int readNumber(istream & in) const; void clearScreen() const; }; Board::Board() : turn_(1), sign_('X'), number_of_turns_(0) { /* Alle 9 Positionen auf binäre Null setzen */ for( int i = 0; i < 3; ++i ) for( int j = 0; j < 3; ++j ) field_[i][j] = '\0'; } inline bool Board::checkEmpty( int x, int y ) const { return ( field_[x][y] == '\0' ); } void Board::input() { bool isEmpty; int i=1, j=1; try { do { if( (i<1||i>3) || (j<1||j>3) ) cout << "Eingabe ( 1 ... 3 ): " << endl; cout << "Spalte: "; j = readNumber(cin); cout << "Reihe: "; i = readNumber(cin); } while ( ((i<1||i>3) || (j<1||j>3)) /* Eingabe korrekt? 1...3 */ ); --j; --i; /* Korrektur von 1...3 auf 0...2 */ isEmpty = checkEmpty( i, j ); if( isEmpty ) field_[i][j] = sign_; else { cout << "Feld ist bereits belegt." << endl; --number_of_turns_; wait_ms(500); nextplayer(); } } catch( const char * e ) { --number_of_turns_; cerr << e << endl; wait_ms(500); cin.clear(); cin.get(); nextplayer(); } catch(...) { --number_of_turns_; cerr << "Nicht behebbarer Fehler!" << endl; wait_ms(1000); } } void Board::display() const { clearScreen(); cout << "*** TIC - TAC - TOE ***" << endl << endl; cout << "---+-------+-------+-------+" << endl; cout << " | 1 | 2 | 3 |" << endl; cout << "---+-------+-------+-------+" << endl; for( int i = 0; i < 3; ++i ) { cout << " " << i+1 << "|"; /* i+1: 0...2 auf 1...3 korrigieren */ for( int j = 0; j < 3; ++j ) cout << " " << field_[i][j] << " |"; cout << endl << "---+-------+-------+-------+" << endl; } cout << endl; } void Board::playGame() { cout << endl << "Spieler " << turn_ << " bitte Zug eingeben: " << endl; input(); display(); checkStatus(); nextplayer(); } void Board::nextplayer() { if( turn_ == 1 ) { turn_ = 2; sign_ = 'O'; } else { turn_ = 1; sign_ = 'X'; } } void Board::checkStatus() { ++number_of_turns_; if( (field_[0][0] == sign_ && field_[1][0] == sign_ && field_[2][0] == sign_) || (field_[0][1] == sign_ && field_[1][1] == sign_ && field_[2][1] == sign_) || (field_[0][2] == sign_ && field_[1][2] == sign_ && field_[2][2] == sign_) || (field_[0][0] == sign_ && field_[0][1] == sign_ && field_[0][2] == sign_) || (field_[1][0] == sign_ && field_[1][1] == sign_ && field_[1][2] == sign_) || (field_[2][0] == sign_ && field_[2][1] == sign_ && field_[2][2] == sign_) || (field_[0][0] == sign_ && field_[1][1] == sign_ && field_[2][2] == sign_) || (field_[0][2] == sign_ && field_[1][1] == sign_ && field_[2][0] == sign_) ) { display(); cout << endl << "Spieler " << turn_ << " hat gewonnen." << endl; getch(); exit(0); } if( number_of_turns_ >= 9 ) { cout << "Spiel endet Unentschieden." << endl; getch(); exit(0); } cout << number_of_turns_ << ". Zug." << endl; } int Board::readNumber( istream & in ) const { int i; in >> i; if(in.fail()) throw "Eingabefehler!"; if(in.bad()) throw; /* nicht behebbarer Fehler */ return i; } void Board::clearScreen() const { wait_ms(200); system("cls"); } int main() { Board b; b.display(); for(;;) b.playGame(); }