import java.util.Scanner; 
public class Ian {

    public static void main(String[] args) {
        int winsPlayerOne = 0; 
        int winsPlayerTwo = 0; 
        boolean resetTurn = false; 
        boolean gameEnding = false;
        boolean keepPlaying = true;
        boolean endRound = true;
        boolean ersterZug = true;
        int[][] Feld = new int[3][3]; 
        Scanner scanner = new Scanner(System.in);
        boolean spieler = true; 
        int letzerX = 0; 
        int letzerY = 0;
        int runde = 0; 
        System.out.println("Regeln: Die Felder sind in der x und y Achse von 1-3 nummeriert. Tippe die jeweiligen Koordinaten des Feldes ein, um es auszuwählen. Es gibt Spieler 1 und 2. Ist ein Feld mit 0 beschriftet, heißt das, es ist noch nicht von einem Spieler in Besitz genommen worden. Tippe 5 als x Koordinate ein, um das Spiel zu beenden. Tippe 4 als x Koordinate ein, um den Zug zurückzusetzen. "); 
        while(keepPlaying){
            if (endRound && !gameEnding){
                ersterZug = true;
                System.out.println("");
                System.out.println("");
                runde++; 
                System.out.println("__________________________________________________________________________________________");
                System.out.println("Runde: " + runde);
                System.out.println("");
                System.out.println("  1 2 3 ");
                for (int i = 0; i < 3; i++){
                    System.out.print(i +1);
                    System.out.print("|");
                    for(int j = 0; j < 3; j++){
                        Feld[i][j] = 0;
                        System.out.print(Feld[i][j] + "|"); 
                    }
                    System.out.println("");
                }
                endRound = false; 
            }
            int zugVon = 0;

                System.out.println("");
            if (spieler){
                zugVon = 1;
                System.out.println("Spieler 1 ist am Zug."); 
            } else {
                zugVon = 2;
                System.out.println("Spieler 2 ist am Zug."); 
            }

            int xKoordinate = 0; 
            System.out.print("x-Koordinate: ");
            do {
                xKoordinate = scanner.nextInt() -1;
                if (xKoordinate > 4){
                    System.out.print("Die x-Koordinate ist invalide. Bitte gib eine Zahl unter 5 ein: ");
                }
            } while (xKoordinate > 4);

            if(xKoordinate == 3){
                keepPlaying = false; 
                resetTurn = true; 
            }
            
            if(xKoordinate == 4){
                keepPlaying = false;
                gameEnding = true; 
            }

            if (keepPlaying) {
                System.out.print("y-Koordinate: "); 
                int yKoordinate = 0; 
                do {
                    yKoordinate = scanner.nextInt() -1;
                    if (yKoordinate > 2){
                        System.out.print("Die y-Koordinate ist invalide. Bitte gib eine Zahl unter 4 ein: ");
                    }
                } while (yKoordinate > 2); 
                if (Feld [yKoordinate] [xKoordinate] == 0){
                    Feld [yKoordinate] [xKoordinate] = zugVon;
                    ersterZug = false; 
                    letzerX = xKoordinate; 
                    letzerY = yKoordinate; 
                    spieler = !spieler;
                }  else {
                    System.out.println("Zug muss wiederholt werden, da das ausgewählte Feld bereits besetzt ist. ");
                }
            } 
            if (resetTurn){ 
                if (ersterZug) {
                    System.out.println("");
                    System.err.println("Der erste Zug kann nicht rückgängig gemacht werden.");
                    System.out.println("");
                    keepPlaying = true; 
                    resetTurn = false;
                } else {
                    System.out.println("");
                    System.out.println("Der Zug wurde rückgängig gemacht. Das ist der vorherige Stand: ");
                    System.out.println("");
                    keepPlaying = true; 
                    resetTurn = false;
                    Feld[letzerY][letzerX] = 0; 
                    spieler = !spieler; 
                }
            }
            
            if (Feld[0][0] == Feld [0][1] && Feld[0][1] == Feld[0][2] && Feld[0][1] != 0){
                int gewinner = Feld [0][1]; //correct
                System.out.println("");                         
                System.out.println("Spieler " + gewinner + " hat gewonnen!");  
                System.out.println("");
        endRound = true; 
        if (gewinner == 1){
            winsPlayerOne++; 
        } else  if (gewinner == 2){
            winsPlayerTwo++; 
        }
            } else if (Feld[1][0] == Feld [1][1] && Feld[1][1] == Feld[1][2] && Feld[1][1] != 0){
                int gewinner = Feld [1][1]; //correct
                System.out.println("");                         
                System.out.println("Spieler " + gewinner + " hat gewonnen!");  
                System.out.println("");
        endRound = true;  
        if (gewinner == 1){
            winsPlayerOne++; 
        } else  if (gewinner == 2){
            winsPlayerTwo++; 
        }
            } else if (Feld[2][0] == Feld [2][1] && Feld[2][1] == Feld[2][2] && Feld[2][1] != 0){
                int gewinner = Feld [2][1]; //correct
                System.out.println("");                         
                System.out.println("Spieler " + gewinner + " hat gewonnen!");  
                System.out.println("");
        endRound = true; 
        if (gewinner == 1){
            winsPlayerOne++; 
        } else  if (gewinner == 2){
            winsPlayerTwo++; 
        }
            } else if (Feld[0][0] == Feld [1][0] && Feld[1][0] == Feld[2][0] && Feld[1][0] != 0){
                int gewinner = Feld [1][0]; //correct
                System.out.println("");                         
                System.out.println("Spieler " + gewinner + " hat gewonnen!");  
                System.out.println("");
        endRound = true; 
        if (gewinner == 1){
            winsPlayerOne++; 
        } else  if (gewinner == 2){
            winsPlayerTwo++; 
        }
            } else if (Feld[0][1] == Feld [1][1] && Feld[1][1] == Feld[2][1] && Feld[1][1] != 0){
                int gewinner = Feld [1][1]; //correct
                System.out.println("");                         
                System.out.println("Spieler " + gewinner + " hat gewonnen!");  
                System.out.println("");
        endRound = true; 
        if (gewinner == 1){
            winsPlayerOne++; 
        } else  if (gewinner == 2){
            winsPlayerTwo++; 
        }
            } else if (Feld[0][2] == Feld [1][2] && Feld[1][2] == Feld[2][2] && Feld[1][2] != 0){
                int gewinner = Feld [1][2]; //correct
                System.out.println("");                         
                System.out.println("Spieler " + gewinner + " hat gewonnen!");  
                System.out.println("");
        endRound = true; 
        if (gewinner == 1){
            winsPlayerOne++; 
        } else  if (gewinner == 2){
            winsPlayerTwo++; 
        }
            }   else if (Feld[0][0] == Feld [1][1] && Feld[1][1] == Feld[2][2] && Feld[1][1] != 0){
                int gewinner = Feld [1][1]; //correct
                System.out.println("");                         
                System.out.println("Spieler " + gewinner + " hat gewonnen!");  
                System.out.println("");
        endRound = true; 
        if (gewinner == 1){
            winsPlayerOne++; 
        } else  if (gewinner == 2){
            winsPlayerTwo++; 
        } 
            } else if (Feld[2][0] == Feld [1][1] && Feld[1][1] == Feld[0][2] && Feld[1][1] != 0){
                int gewinner = Feld [1][1]; 
                System.out.println("");                         
                System.out.println("Spieler " + gewinner + " hat gewonnen!");  
                System.out.println("");
        endRound = true; 
        if (gewinner == 1){
            winsPlayerOne++; 
        } else  if (gewinner == 2){
            winsPlayerTwo++; 
        }
            } else {
                boolean noZero = true;
                for (int i = 0; i < 3; i++){
                    for(int j = 0; j < 3; j++){
                        if (Feld[i][j] == 0){
                            noZero = false; 
                        }
                    }
                }
                if (noZero){
                    endRound = true; 
                    System.out.println("Unentschieden!");
                }
            } 

            if(gameEnding){
                System.out.println("");
                System.out.println("Das Spiel wurde beendet. Das ist der Endstand: ");
                System.out.println("Siege Spieler 1: " + winsPlayerOne); 
                System.out.println("Siege Spieler 2: " + winsPlayerTwo); 
                System.out.println("");
            } 
            if (!gameEnding){
                System.out.println("  1 2 3"); 
                for (int i = 0; i < 3; i++){
                    System.out.print(i +1);
                    System.out.print("|");
                    for(int j = 0; j < 3; j++){
                        System.out.print(Feld[i][j] + "|"); 
                    }
                    System.out.println("");
                } 
            }
        }
        scanner.close();
    }
}
