enum Status { FREI(0), X(1), O(2); private int zahl; private Status(int i) { this.zahl = i; } public static String toString(Status status[][]){ String output="\n"; for(int i=0;i<3;i++) { for(int j=0;j<3;j++){ output+=status[i][j]+" "; output+="\t"+"\t"; } output+="\n"; } return output; } } class Spielfeld{ //Settermethode static void Set(int x, int y, Status[][] status,int auswahl){ if (auswahl==1) {status[x][y]= Status.X;} if (auswahl==2) {status [x][y]=Status.O;} } //Gettermethode static Status Get(int x, int y,Status[][] status ){ return status[x][y]; } //Gewinnüberprüfer static int GameOver(Status[][] spielstatus,int Spielzüge){ int wert = (-1); //Auf Zeilen Testen for (int b=0;b<3;b++){ int a=0; if(Spielfeld.Get( a,b,spielstatus)==Status.X && Spielfeld.Get((a+1),b,spielstatus)==Status.X && Spielfeld.Get((a+2),b,spielstatus)==Status.X) {wert= 1;} else if((Spielfeld.Get( a,b,spielstatus)==Status.O && Spielfeld.Get((a+1),b,spielstatus)==Status.O && Spielfeld.Get((a+2),b,spielstatus)==Status.O)) { wert= 2;} } //Auf Spalten Testen for (int a=0;a<3;a++){ int b=0; if (Spielfeld.Get( a,b,spielstatus)==Status.X && Spielfeld.Get(a,(b+1),spielstatus)==Status.X && Spielfeld.Get(a,(b+2),spielstatus)==Status.X) {wert= 1;} else if (Spielfeld.Get( a,b,spielstatus)==Status.O && Spielfeld.Get(a,(b+1),spielstatus)==Status.O && Spielfeld.Get(a,(b+2),spielstatus)==Status.O) {wert= 2;} } //Diagonale if(Spielfeld.Get( 0,0,spielstatus)==Status.X && Spielfeld.Get(1,1,spielstatus)==Status.X && Spielfeld.Get(2,2,spielstatus)==Status.X) {wert= 1;} else if(Spielfeld.Get( 0,0,spielstatus)==Status.O && Spielfeld.Get(1,1,spielstatus)==Status.O && Spielfeld.Get(2,2,spielstatus)==Status.O) {wert= 2;} //Antidiagonale else if(Spielfeld.Get( 0,2,spielstatus)==Status.X && Spielfeld.Get(1,1,spielstatus)==Status.X && Spielfeld.Get(2,0,spielstatus)==Status.X) {wert= 1;} else if(Spielfeld.Get( 0,2,spielstatus)==Status.O && Spielfeld.Get(1,1,spielstatus)==Status.O && Spielfeld.Get(2,0,spielstatus)==Status.O) {wert= 2;} else if (Spielzüge<9) {wert=(-1);} else {wert= 0;} return wert; }//Ende Gewinnüberprüfer }// ende klasse class hauptklasse{ public static void main(String[]args){ Status[][] spielstatus = new Status[3][3]; //Spielstatus initialisieren for (int i =0;i<3;i++) { for (int j=0;j<3;j++) { spielstatus[i][j] = Status.FREI; } } int Spieler1prüfung =0; int Spieler2prüfung =0; int Spielzüge =0; //Spielroutine läuft bis GameOver 1,2 oder 0 also Sieg1, Sieg2 oder Unentschieden liefert while(Spielfeld.GameOver(spielstatus,Spielzüge)==(-1)) { //Routine läuft bis Spieler1 ein leeres Feld wählt while(Spieler1prüfung==0) { System.out.println("Spieler 1 geben sie die x-Koordinate für ihr Feld ein!"); int x =(Input.in.readInteger()-1); System.out.println("Spieler 1 geben sie die y-Koordinate für ihr Feld ein!"); int y= (Input.in.readInteger()-1); //Überprüfen ob Spieler 1 hier schon gesetzt hat if (Spielfeld.Get(x, y, spielstatus)== Status.X) {System.out.println("Hier hatst du schon gesetzt!");} //Überprüfen ob Spieler 2 hier schon gesetzt hat else if(Spielfeld.Get(x, y, spielstatus)==Status.O) {System.out.println("Hier hat Spieler 2 schon gesetzt!");} else //Feld für Spieler1 besetzen {Spielfeld.Set(x,y,spielstatus ,1); //Spielzüge erhöhen Spielzüge++; //Spielfeld ausgeben System.out.println(Status.toString(spielstatus)); //Routine verlassen Spieler1prüfung =1;} }//while spieler1prüfungende //damit Schleife nachher wieder aufgerufen wird Spieler1prüfung = 0; //Routine läuft bis Spieler2 ein leeres Feld wählt while(Spieler2prüfung==0) { System.out.println("Spieler 2 geben sie die x-Koordinate für ihr Feld ein!"); int v =(Input.in.readInteger()-1); System.out.println("Spieler 2 geben sie die y-Koordinate für ihr Feld ein!"); int z= (Input.in.readInteger()-1); //Überprüfen ob Spieler 1 hier schon gesetzt hat if (Spielfeld.Get(v, z, spielstatus)== Status.X) {System.out.println("Hier hat Spieler 1 schon gesetzt!");} //Überprüfen ob Spieler 2 hier schon gesetzt hat else if(Spielfeld.Get(v, z, spielstatus)==Status.O) {System.out.println("Hier hast du schon gesetzt!");} else //Feld für Spieler 2 besetzen {Spielfeld.Set(v,z,spielstatus,2); //Spielzüge erhöhen Spielzüge++; //Spielfeld ausgeben System.out.println(Status.toString(spielstatus)); //Routine verlassen Spieler2prüfung =1;} }//while Spieler2Prüfung ende //damit Schleife nachher wieder aufgerufen wird Spieler2prüfung =0; }//while Spielfeld.GameOver ende if (Spielfeld.GameOver(spielstatus, Spielzüge) == 1) { System.out.println("Spieler 1 hat gewonnen!"); } else if (Spielfeld.GameOver(spielstatus, Spielzüge)==2) { System.out.println("Spieler 2 hat gewonnen!"); } else if (Spielfeld.GameOver(spielstatus, Spielzüge)==0) { System.out.println("Das Spiel endet unentschieden!"); } }//Ende main }//Ende class hauptklasse