import java.util.Scanner;

public class Tic_Tac_Toe {
    static Scanner scan = new Scanner(System.in);
    static String[][] spielField = new String[3][3];
    static final String playerx = "x" ;
    static final String playero = "o" ;

    public static void main(String[] args){
        

        printSpielfeld();
        while (true) {
            System.out.println("Bitte geben Sie 'x' und neue Position ein: ");
            String playerx =scan.nextLine();
            int x = scan.nextInt();
            int y = scan.nextInt();
            while (!checkSet(playerx, x, y)) {
                scan.nextLine();
                System.out.println("Falsche Eingabe! Versuchen Sie nochmal: ");
                playerx =scan.nextLine();
                x = scan.nextInt();
                y = scan.nextInt();
                if (checkSet(playerx, x, y))
                    break;
            }
            ausgabeSpielFeld(playerx, x, y);
            if (checkGewinner(playerx)) {
                System.out.println("Spieler X hat gewonnen!");
                break;
            }
            scan.nextLine();   

            System.out.println("Bitte geben Sie 'O' und neue Position ein: ");
            String playero =scan.nextLine();
            x = scan.nextInt();
            y = scan.nextInt();
            while (!checkSet(playero, x, y)) {
                scan.nextLine();
                System.out.println("Falsche Eingabe! Versuchen Sie nochmal: ");
                playero =scan.nextLine();
                x = scan.nextInt();
                y = scan.nextInt();                
            }
            ausgabeSpielFeld(playero, x, y);
            if (checkGewinner(playero)) {
                System.out.println("Spieler O hat gewonnen!");
                break;
            }
            scan.nextLine();  
        }
    }

    public static boolean checkSet(String X_O, int x, int y){
        if ( x < 0 || x > 2 || y < 0 || y > 2)
            return false;

        if (!(spielField[x][y].equals("-")) )
            return false;

        return true;
    }

    public static boolean checkGewinner(String player){
            for(int i = 0 ; i < 3; i++){
                if (spielField[i][0].equals(player) && spielField[i][1].equals(player) && spielField[i][2].equals(player)) 
                return true;
            }
            for (int i = 0; i < 3; i++){
                if (spielField[0][i].equals(player) &&spielField[1][i].equals(player) &&spielField[2][i].equals(player))
                    return true;
            }
            if (spielField[0][0].equals(player)&& spielField[1][1].equals(player)&& spielField[2][2].equals(player))
                return true;
            
            if (spielField[0][2].equals(player)&& spielField[1][1].equals(player)&& spielField[2][0].equals(player))
                return true;
           
        return false;
    }

    public static void ausgabeSpielFeld(String X_O, int x, int y){
        spielField[x][y] = X_O;
        for (int i = 0; i < 3; i++){
            for (int j = 0; j < 3; j++){
               System.out.print(spielField[i][j] + "|");
            }
            System.out.println();
        }


        
    }
    public static void printSpielfeld(){
        for (int i = 0; i < 3; i++){
            for (int j = 0; j < 3; j++){
                if (j == 2){
                    spielField[i][j] = "-";
                    System.out.print(spielField[i][j]);
                }else{
                    spielField[i][j] = "-";
                    System.out.print(spielField[i][j]);
                    System.out.print("|");
                }
            }
            System.out.println();
        }

    }
}
