#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>

int Zaehler = 1;
// Funktion, um das Spielfeld zu initialisieren
void Brett(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++) {
            printf("%c ", 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 (Zaehler < 10) {
        if (Zaehler % 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];
    char Nochmal[50] = { "Weiter" };
    printf("Name der Spieler\[Spieler 1   Spieler2]\n");
    scanf("%s %s", Spieler1, Spieler2);
    while (Nochmal[0] == 'W' || Nochmal[0] == 'w') {
        Zaehler = 1;
        Brett(Feld);
        printf("\nWillkommen %s und %s. Eure Runde Beginnt jetzt.", Spieler1, Spieler2);
        while (Winner(Feld) == 9) {

            Bild(Feld);
            if (Zaehler % 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);
            Zaehler++;
        }
        Bild(Feld);
        if (Winner(Feld) == 1) {
            printf("Der Sieger ist %s", Spieler1);
        }
        else if (Winner(Feld) == 2) {
            printf("Der Sieger ist %s", Spieler2);
        }
        printf("Wollt ihr weiter spielen?\n[Weiter]\n[Ende]\n");
        scanf("%s", Nochmal);
    }
    return 0;
}