#include #include #include #include #define ANSI_COLOR_BRIGHT_RED "\x1b[91m" #define ANSI_COLOR_BRIGHT_CYAN "\x1b[96m" #define ANSI_COLOR_BRIGHT_YELLOW "\x1b[93m" #define ANSI_COLOR_RESET "\x1b[0m" int Runde = 1; // Funktion, um das Spielfeld zu initialisieren void initializeBoard(char Feld[3][3]) { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { Feld[i][j] = '_'; } } } void Bild(char Feld[3][3]) { #ifdef _WIN32 system("cls"); #else system("clear"); #endif for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (Feld[i][j] == '_') { printf(ANSI_COLOR_BRIGHT_YELLOW"%c "ANSI_COLOR_RESET, Feld[i][j]); } else if (Feld[i][j] == 'X') { printf(ANSI_COLOR_BRIGHT_CYAN"%c "ANSI_COLOR_RESET, Feld[i][j]); } else { printf(ANSI_COLOR_BRIGHT_RED"%c "ANSI_COLOR_RESET, Feld[i][j]); } } printf("\n"); } } int Winner(char Feld[3][3]) { // Überprüfen Sieg // Überprüfen Reihen for (int i = 0; i < 3; i++) { if (Feld[i][0] == Feld[i][1] && Feld[i][1] == Feld[i][2] && Feld[i][0] != '_') { if (Feld[i][0] == 'X') { return 1; } else return 2; } } // Überprüfen Spalten for (int j = 0; j < 3; j++) { if (Feld[0][j] == Feld[1][j] && Feld[1][j] == Feld[2][j] && Feld[0][j] != '_') { if (Feld[0][j] == 'X') { return 1; } else return 2; } } // Überprüfen Diagonalen if ((Feld[0][0] == Feld[1][1] && Feld[1][1] == Feld[2][2]) || (Feld[0][2] == Feld[1][1] && Feld[1][1] == Feld[2][0])) { if (Feld[1][1] != '_') { if (Feld[1][1] == 'X') { return 1; } else return 2; } } //Überprüfe Runde for (int k = 0; k < 3; k++) { for (int l = 0; l < 3; l++) { if (Feld[k][l] == '_') { return 9; } } } //Bestätige Unendschieden printf("Es ist ein Unendschieden\n"); return 0; } void Zuege(char Feld[3][3], int row, int col) { if (Runde < 10) { if (Runde % 2 == 0) { if (Feld[row][col] == '_') { Feld[row][col] = 'O'; } else { printf("Das Feld ist schon besetzt. Gib ein anderes Feld ein:\n"); printf("Reihe:"); scanf("%d", &row); printf("Spalte:"); scanf("%d", &col); row -= 1; col -= 1; Zuege(Feld, row, col); } } else { if (Feld[row][col] == '_') { Feld[row][col] = 'X'; } else { printf("Das Feld ist schon besetzt. Gib ein anderes Feld ein:\n"); printf("Reihe:"); scanf("%d", &row); printf("Spalte:"); scanf("%d", &col); row -= 1; col -= 1; Zuege(Feld, row, col); } } } } // Hauptfunktion zum Spielen des Tic Tac Toe-Spiels int mainx() { int row; int col; char Feld[3][3]; char Spieler1[50], Spieler2[50]; int Punkte1 = 0, Punkte2 = 0; char Name1[50], Name2[50]; char Nochmal[50] = { "Weiter" }; printf("Name Spieler 1:"); scanf("%s", Name1); printf("Name Spieler 2:"); scanf("%s", Name2); while (Nochmal[0] == 'W' || Nochmal[0] == 'w') { Runde = 1; initializeBoard(Feld); printf("%s, Was willst du sein, X oder O: ", Name1); scanf("%s", Spieler1); if (Spieler1[0] != 'X' && Spieler1[0] != 'O') { printf("Ungültige Auswahl. Das Spiel wird beendet.\n"); break; } strcpy(Spieler2, (Spieler1[0] == 'X') ? Name2 : Name1); strcpy(Spieler1, (Spieler1[0] == 'X') ? Name1 : Name2); printf("\nWillkommen %s und %s. Eure Runde Beginnt jetzt.", Spieler1, Spieler2); while (Winner(Feld) == 9) { Bild(Feld); if (Runde % 2 != 0) { printf("Spieler 1 gebe das Feld an wo du dein X setzen willst.\n"); } else printf("Spieler 2 gebe das Feld an wo du dein O setzen willst.\n"); printf("Reihe:"); scanf("%d", &row); printf("Spalte:"); scanf("%d", &col); row -= 1; col -= 1; if (row > 3 || col > 3) { printf("Das ist nicht mehr im Feld. Versuch es nochmal:"); scanf("%d %d", &row, &col); row -= 1; //Für Index eins kleiner col -= 1; } Zuege(Feld, row, col); Runde++; } Bild(Feld); if (Winner(Feld) == 1) { printf("Der Sieger ist %s", Spieler1); Punkte1++; } else if (Winner(Feld) == 2) { printf("Der Sieger ist %s", Spieler2); Punkte2++; } printf("%s - %d, %s - %d\n", Spieler1, Punkte1, Spieler2, Punkte2); printf("Wollt ihr weiter spielen?\n[Weiter]\n[Ende]\n"); scanf("%s", Nochmal); } return 0; }