#include // Für Ein- und Ausgabe: cout, cin, etc. #include // Damit nicht immer z.B. std::cout geschrieben werden muss using namespace std; // Datenstruktur für ein Spiel, darf gerne erweitert werden. struct Game { vector> feld = {{0,0,0},{0,0,0},{0,0,0}}; vector symbols = {' ', 'O', 'X'}; int player=1; }; // Überladen des << operators für das Game struct // Damit ist dann 'cout << game;' möglich ostream& operator << (std::ostream& o, const Game & game) { o << endl; o << "\\ a b c"; o << endl << " +"; for (int x=0; x<3; x++)o << "---+" ; o << endl; for (int y=0; y<3; y++) { o << (y+1) << " |"; for (int x=0; x<3; x++) { o << ' ' << game.symbols[game.feld[x][y]] << " |"; } o << endl << " +"; for (int x = 0; x < 3; x++) o << "---+"; o << endl; } return o; } // Koordinaten für den nächsten Zug einlesen, // überprüfen und ausführen. // true, wenn Zug ok, // false sonst bool playFromConsole(Game & game) { int x; int y; string buffer; cout << "Where to play? "; x = cin.get()-'a'; y = cin.get()-'1'; // Clear input buffer getline(cin, buffer); cout << x << " / " << y << endl; // TODO // fehlende Checks, of Zug erlaubt game.feld[x][y]=game.player; return true; } // TODO // true, wenn ein Spieler gewonnen hat // false sonst. bool checkWin(Game & game) { return false; } signed main() { // Neues Spiel Game game; for (int turn = 0; turn<9; turn++) { // Spiel ausgeben cout << game; // So lange Koordinaten einlesen, bis Zug ok while (!playFromConsole(game)); // Gewonnen? if (checkWin(game)) { cout << "Player " << game.player << " wins!" << endl; // for-Schleife beenden. break; } // TODO: Hier sollte der Spieler wechseln game.player = game.player; } return 0; }