Tic Tac Toe Spiel ohne Arrays

WasserEsser

Mitglied
Hallo,

ich bin relativ neu in Sachen Programmierung, und habe vor kurzem angefangen, Java zu lernen. Nun habe ich mir zur Aufgabe gemacht, ein Tic Tac Toe Spiel zu programmieren. Da ich in Sachen Arrays noch nicht fuxig bin, habe ich mir gedacht, ich versuche mich mal dran das ganze ohne Arrays zu machen. Nach einigem hin und her, habe ich ein funktionierendes Spiel. Spieler gegen Spieler.

Nun wollte ich euch fragen, ob ihr irgendwelche Verbesserungsvorschläge für mich hättet, und mir vielleicht sogar bei einer eigenen KI helfen könntet, allerdings "Noob" Freundlich 😳 .

Ich freue mich auf eure Antworten!

Gruß

Java:
import javax.swing.JOptionPane;

public class TicTacToe {
	
	//Felder Definition, Statisch, für alle zugänglich
	static int AD = 0;
	static int AE = 0;
	static int AF = 0;
	static int BD = 0;
	static int BE = 0;
	static int BF = 0;
	static int CD = 0;
	static int CE = 0;
	static int CF = 0;
	
	//Main beginnt
	public static void main(String[] args) {
		
		
		
		//Setze Felder auf Wert X,Y
		int SpielerX = 1;
		int SpielerO = -1;
		
		//Welcher Spieler ist gerade dran?
		int currentPlayer = SpielerX;
		
		//Welcher Spieler ist der nächste?
		int nextPlayer = SpielerO;
		
		//Wer ist der nächste Spieler?
		String nextPlayerIs;
		
		//zugNichtGültig = true - Zug nicht gültig
		//zugNichtGültig = false - Zug gültig
	
		
		boolean zugNichtGültig = true;
		
		int status = 0;
		
		
		/* Der Status des Spiels
		 0 = Spiel läuft
		 1 = Spiel wurde beendet, Spieler hat gewonnen.
		 2 = Spiel wurde unentschieden beendet. Kein Spieler hat gewonnen.
		 */
		
		  /*
			A B C
		  D
		  E
		  F
		  */
			
		//Starten der Schleife
		while(status == 0 ){		
			
		//User Eingabe. Springt zum Anfang zurück, falls falsche Eingabe oder doppelte Eingabe
		while(zugNichtGültig){					
		String s = JOptionPane.showInputDialog("Bitte wählen Sie ein Feld.");
		if(s.equalsIgnoreCase("AD") ){ if(AD == 0 ){
			AD = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else if(s.equalsIgnoreCase("AE")){ if(AE == 0 ){
			AE = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else if(s.equalsIgnoreCase("AF")){ if(AF == 0 ){
			AF = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else if(s.equalsIgnoreCase("BD")){ if(BD == 0 ){
			BD = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else if(s.equalsIgnoreCase("BE")){ if(BE == 0 ){
			BE = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else if(s.equalsIgnoreCase("BF")){ if(BF == 0 ){
			BF = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else if(s.equalsIgnoreCase("CD")){ if(CD == 0 ){
			CD = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else if(s.equalsIgnoreCase("CE")){ if(CE == 0 ){
			CE = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else if(s.equalsIgnoreCase("CF")){ if(CF == 0 ){
			CF = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else{
			System.out.println("Kein gültiges Feld!");
			zugNichtGültig = true;
		}		
	}
		
		//Spielfeld Ausgabe
		spielFeld();		
		
		if(nextPlayer == 1){
			nextPlayerIs = "X";
		}else{
			nextPlayerIs = "O";
		}
		
		//Spiel vorbei?
		if(checkWinner(currentPlayer)){ 
			System.out.println("Das Spiel wurde beendet.");
			status = 1;
			if(currentPlayer == SpielerO){
				System.out.println("Spieler O hat gewonnen.");
			}
			if(currentPlayer == SpielerX){
				System.out.println("Spieler X hat gewonnen.");
			}
			break;
		}else if(checkEnd()){
			status = 2;
			System.out.println("Das Spiel wurde beendet. Keine Partei hat gewonnen.");
			break;
		}else if(status == 0){
			System.out.println("Das Spiel läuft noch. Spieler " + nextPlayerIs + " ist am Zug.");
			
			if(nextPlayer == SpielerO){
				nextPlayer = SpielerX;
			}else{
				nextPlayer = SpielerO;
			}
			
			
			//Wechsle Spieler
			if(currentPlayer == SpielerX) {
				currentPlayer = SpielerO;
			}else{
				currentPlayer = SpielerX;
			}	
		}
}

	}

	//Hat einer gewonnen? TRUE oder FALSE	
	public static boolean checkWinner(int Player){
		
		//Linien

		//Horizontale
		
			int ABCD = AD + BD + CD;
			int ABCE = AE + BE + CE;
			int ABCF = AF + BF + CF;

		//Vertikale
			
			int DEFA = AD + AE + AF;
			int DEFB = BD + BE + BF;
			int DEFC = CD + CE + CF;

		//Schräge
			
			int ADBECF = AD + BE + CF;
			int CDBEAF = CD + BE + AF;
		
		//3 Nebeneinander?
		if(
				ABCD == 3*Player ||
				ABCE == 3*Player ||
				ABCF == 3*Player ||
				DEFA == 3*Player ||
				DEFB == 3*Player ||
				DEFC == 3*Player ||
				ADBECF == 3*Player ||
				CDBEAF == 3*Player
				){
			return true;
		}return false;
		

}
	//Sind alle Spielfelder besetzt? TRUE oder FALSE	
	public static boolean checkEnd(){
		
		if(
				AD != 0 &&
				AE != 0 &&
				AF != 0 &&
				BD != 0 &&
				BE != 0 &&
				BF != 0 &&
				CD != 0 &&
				CE != 0 &&
				CF != 0 )
		{ return true;
		}return false;
		
				}
	//Spielfeld Ausgabe	
	public static void spielFeld(){
		
		if(AD == 1){
			System.out.print("X  ");
		}else if(AD == -1){
			System.out.print("O  ");
		}else{
			System.out.print("-  ");
		}
		
		if(AE == 1){
			System.out.print("X  ");
		}else if(AE == -1){
			System.out.print("O  ");
		}else{
			System.out.print("-  ");
		}
		
		if(AF == 1){
			System.out.println("X  ");
		}else if(AF == -1){
			System.out.println("O  ");
		}else{
			System.out.println("-  ");
		}
		
		if(BD == 1){
			System.out.print("X  ");
		}else if(BD == -1){
			System.out.print("O  ");
		}else{
			System.out.print("-  ");
		}
		
		if(BE == 1){
			System.out.print("X  ");
		}else if(BE == -1){
			System.out.print("O  ");
		}else{
			System.out.print("-  ");
		}
		
		if(BF == 1){
			System.out.println("X  ");
		}else if(BF == -1){
			System.out.println("O  ");
		}else{
			System.out.println("-  ");
		}
		
		if(CD == 1){
			System.out.print("X  ");
		}else if(CD == -1){
			System.out.print("O  ");
		}else{
			System.out.print("-  ");
		}
		
		if(CE == 1){
			System.out.print("X  ");
		}else if(CE == -1){
			System.out.print("O  ");
		}else{
			System.out.print("-  ");
		}
		
		if(CF == 1){
			System.out.println("X  ");
		}else if(CF == -1){
			System.out.println("O  ");
		}else{
			System.out.println("-  ");
		}
		
	}

}
 
Zuletzt bearbeitet:
Habe den Code kurz mal ausgeführt, was mir aufgefallen ist sind die Verteilung der einzelnen Zellen.

Finde die Aufteilung relativ unpassend, ich denke es wäre einfacher mit:

A1 A2 A3
B1 B2 B3
C1 C2 C3

🙂

Allgemein zum Code - ja mit Arrays wäre es vermutlich viel viel kürzer und somit kompakter.
 
Hallo,

wenn du neu in JAVA bist und dich gleich an ein Spiel wagen möchtest hilft dir vielleicht diese Seite bzw. dieses Programm weiter:
Greenfoot

Hat zumindest mir geholfen, man kann ganz einfach eigene Spiele erstellen und sich den Code anschauen bzw. schreiben

Gruß
 
Habe den Code kurz mal ausgeführt, was mir aufgefallen ist sind die Verteilung der einzelnen Zellen.

Finde die Aufteilung relativ unpassend, ich denke es wäre einfacher mit:



🙂

Allgemein zum Code - ja mit Arrays wäre es vermutlich viel viel kürzer und somit kompakter.

Hallo,

vielen Dank für den Tipp. Ich habe es jetzt soweit geändert, dass das Raster nun so aussieht:

A1 A2 A3
B1 B2 B3
C1 C2 C3

Hallo,

wenn du neu in JAVA bist und dich gleich an ein Spiel wagen möchtest hilft dir vielleicht diese Seite bzw. dieses Programm weiter:
Greenfoot

Hat zumindest mir geholfen, man kann ganz einfach eigene Spiele erstellen und sich den Code anschauen bzw. schreiben

Gruß

Vielen Dank, ich werde mich nachher mal daran setzen.
 
Zuletzt bearbeitet:
Neuer Code mit verändertem Raster:

Java:
import javax.swing.JOptionPane;

public class TicTacToe {
	
	//Felder Definition, Statisch, für alle zugänglich
	static int A1 = 0;
	static int A2 = 0;
	static int A3 = 0;
	static int B1 = 0;
	static int B2 = 0;
	static int B3 = 0;
	static int C1 = 0;
	static int C2 = 0;
	static int C3 = 0;
	
	//Main beginnt
	public static void main(String[] args) {
		
		
		
		//Setze Felder auf Wert X,Y
		int SpielerX = 1;
		int SpielerO = -1;
		
		//Welcher Spieler ist gerade dran?
		int currentPlayer = SpielerX;
		
		//Welcher Spieler ist der nächste?
		int nextPlayer = SpielerO;
		
		//Wer ist der nächste Spieler?
		String nextPlayerIs;
		
		//zugNichtGültig = true - Zug nicht gültig
		//zugNichtGültig = false - Zug gültig
	
		
		boolean zugNichtGültig = true;
		
		int status = 0;
		
		
		/* Der Status des Spiels
		 0 = Spiel läuft
		 1 = Spiel wurde beendet, Spieler hat gewonnen.
		 2 = Spiel wurde unentschieden beendet. Kein Spieler hat gewonnen.
		 */
		
		  /*
			1 2 3
		  A
		  B
		  C
		  */
			
		//Starten der Schleife
		while(status == 0 ){		
			
		//User Eingabe. Springt zum Anfang zurück, falls falsche Eingabe oder doppelte Eingabe
		while(zugNichtGültig){					
		String s = JOptionPane.showInputDialog("Bitte wählen Sie ein Feld.");
		if(s.equalsIgnoreCase("A1") ){ if(A1 == 0 ){
			A1 = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else if(s.equalsIgnoreCase("A2")){ if(A2 == 0 ){
			A2 = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else if(s.equalsIgnoreCase("A3")){ if(A3 == 0 ){
			A3 = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else if(s.equalsIgnoreCase("B1")){ if(B1 == 0 ){
			B1 = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else if(s.equalsIgnoreCase("B2")){ if(B2 == 0 ){
			B2 = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else if(s.equalsIgnoreCase("B3")){ if(B3 == 0 ){
			B3 = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else if(s.equalsIgnoreCase("C1")){ if(C1 == 0 ){
			C1 = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else if(s.equalsIgnoreCase("C2")){ if(C2 == 0 ){
			C2 = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else if(s.equalsIgnoreCase("C3")){ if(C3 == 0 ){
			C3 = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else{
			System.out.println("Kein gültiges Feld!");
			zugNichtGültig = true;
		}		
	}
		
		//Spielfeld Ausgabe
		spielFeld();		
		
		//Wandle Wert in String um (1,-1 in X, O)
		if(nextPlayer == 1){
			nextPlayerIs = "X";
		}else{
			nextPlayerIs = "O";
		}
		
		//Spiel vorbei?
		if(checkWinner(currentPlayer)){ 
			System.out.println("Das Spiel wurde beendet.");
			status = 1;
			if(currentPlayer == SpielerO){
				System.out.println("Spieler O hat gewonnen.");
			}
			if(currentPlayer == SpielerX){
				System.out.println("Spieler X hat gewonnen.");
			}
			break;
		}else if(checkEnd()){
			status = 2;
			System.out.println("Das Spiel wurde beendet. Keine Partei hat gewonnen.");
			break;
		}else if(status == 0){
			System.out.println("Das Spiel läuft noch. Spieler " + nextPlayerIs + " ist am Zug.");
			
			//Wechsle nächsten Spieler
			if(nextPlayer == SpielerO){
				nextPlayer = SpielerX;
			}else{
				nextPlayer = SpielerO;
			}
			
			
			//Wechsle Spieler
			if(currentPlayer == SpielerX) {
				currentPlayer = SpielerO;
			}else{
				currentPlayer = SpielerX;
			}	
		}
}

	}

	//Hat einer gewonnen? TRUE oder FALSE	
	public static boolean checkWinner(int Player){
		
		//Linien

		//Horizontale
		
			int ABCD = A1 + B1 + C1;
			int ABCE = A2 + B2 + C2;
			int ABCF = A3 + B3 + C3;

		//Vertikale
			
			int DEFA = A1 + A2 + A3;
			int DEFB = B1 + B2 + B3;
			int DEFC = C1 + C2 + C3;

		//Schräge
			
			int ADBECF = A1 + B2 + C3;
			int CDBEAF = C1 + B2 + A3;
		
		//3 Nebeneinander?
		if(
				ABCD == 3*Player ||
				ABCE == 3*Player ||
				ABCF == 3*Player ||
				DEFA == 3*Player ||
				DEFB == 3*Player ||
				DEFC == 3*Player ||
				ADBECF == 3*Player ||
				CDBEAF == 3*Player
				){
			return true;
		}return false;
		

}
	//Sind alle Spielfelder besetzt? TRUE oder FALSE	
	public static boolean checkEnd(){
		
		if(
				A1 != 0 &&
				A2 != 0 &&
				A3 != 0 &&
				B1 != 0 &&
				B2 != 0 &&
				B3 != 0 &&
				C1 != 0 &&
				C2 != 0 &&
				C3 != 0 )
		{ return true;
		}return false;
		
				}
	//Spielfeld Ausgabe	
	public static void spielFeld(){
		
		if(A1 == 1){
			System.out.print("X  ");
		}else if(A1 == -1){
			System.out.print("O  ");
		}else{
			System.out.print("-  ");
		}
		
		if(A2 == 1){
			System.out.print("X  ");
		}else if(A2 == -1){
			System.out.print("O  ");
		}else{
			System.out.print("-  ");
		}
		
		if(A3 == 1){
			System.out.println("X  ");
		}else if(A3 == -1){
			System.out.println("O  ");
		}else{
			System.out.println("-  ");
		}
		
		if(B1 == 1){
			System.out.print("X  ");
		}else if(B1 == -1){
			System.out.print("O  ");
		}else{
			System.out.print("-  ");
		}
		
		if(B2 == 1){
			System.out.print("X  ");
		}else if(B2 == -1){
			System.out.print("O  ");
		}else{
			System.out.print("-  ");
		}
		
		if(B3 == 1){
			System.out.println("X  ");
		}else if(B3 == -1){
			System.out.println("O  ");
		}else{
			System.out.println("-  ");
		}
		
		if(C1 == 1){
			System.out.print("X  ");
		}else if(C1 == -1){
			System.out.print("O  ");
		}else{
			System.out.print("-  ");
		}
		
		if(C2 == 1){
			System.out.print("X  ");
		}else if(C2 == -1){
			System.out.print("O  ");
		}else{
			System.out.print("-  ");
		}
		
		if(C3 == 1){
			System.out.println("X  ");
		}else if(C3 == -1){
			System.out.println("O  ");
		}else{
			System.out.println("-  ");
		}
		
	}

}
 
Zuletzt bearbeitet:
Ich hab mir auch mal aus Interesse schnell ein TicTacToe zusammengestellt, jedoch das Spielfeld mit Arrays aufgebaut.

Ich denke dein nächster Schritt wäre es ebenfalls umzubauen, dass dein Spielfeld aus einem Array besteht. ( ob int, String ist egal - jenachdem wie du es aufbauen möchtest ).

Der GrundCode von der Abfrage, ob einer gewonnen hat ist folgender:
basierend auf
0 1 2
3 4 5
6 7 8

Java:
public static boolean checkSieger(String symbol){
		// horizontal
		for( int i=0; i<3; i++){
			if(spielfeld[3*i]==symbol&&spielfeld[3*i+1]==symbol&&spielfeld[3*i+2]==symbol){
				return true;
			}
		}
		
		// vertical
		for( int k=0; k<3; k++){
			if(spielfeld[k]==symbol&&spielfeld[3+k]==symbol&&spielfeld[6+k]==symbol){
				return true;

			}
		}
		
		// schräg
		for( int j=0; j<2; j++){
			if(spielfeld[2*j]==symbol&&spielfeld[4]==symbol&&spielfeld[8-2*j]==symbol){
				return true;

			}
		}
		return false;
	}
 
Zuletzt bearbeitet:
Hallo, ich habe eine sehr einfach AI erstellen können, somit sucht der Computer sich immer das nächst beste Feld.

Diese AI ist natürlich sehr leicht auszutricksen, bzw zu predicten.

Nun möchte ich es ein wenig Advanced machen. Sprich der Computer soll sich ein Random freies Feld suchen.

Dafür muss der Computer erst mal wissen, ob überhaupt noch ein Feld frei ist. Dies habe ich mit einer Methode gelöst:

Java:
	public static boolean turnLeft(){
		
		if(		
				A1 == 0 ||
				A2 == 0 ||
				A3 == 0 ||
				B1 == 0 ||
				B2 == 0 ||
				B3 == 0 ||
				C1 == 0 ||
				C2 == 0 ||
				C3 == 0	){
			return true;
		}return false;

Nun muss der Computer wissen, welche Felder noch frei sind, und welche er somit benutzen kann, um sich von den übrig gebliebenen Feldern eins random auszusuchen. Habt ihr irgendwelche Vorschläge, wie ich das anstellen kann, ohne mein derzeitiges Programm groß umzuschreiben?

Der Code mit der AI sieht derzeit so aus:

Java:
import javax.swing.JOptionPane;

public class TicTacToe2 {
	
	//Felder Definition, Statisch, für alle zugänglich
	static int A1 = 0;
	static int A2 = 0;
	static int A3 = 0;
	static int B1 = 0;
	static int B2 = 0;
	static int B3 = 0;
	static int C1 = 0;
	static int C2 = 0;
	static int C3 = 0;
	
	//Main beginnt
	public static void main(String[] args) {
		
		
		
		//Setze Felder auf Wert X,Y
		int SpielerX = 1;
		int SpielerO = -1;
		
		//Welcher Spieler ist gerade dran?
		int currentPlayer = SpielerX;
		
		//Welcher Spieler ist der nächste?
		int nextPlayer = SpielerO;
		
		//Wer ist der nächste Spieler?
		String nextPlayerIs;
		
		//zugNichtGültig = true - Zug nicht gültig
		//zugNichtGültig = false - Zug gültig
	
		
		boolean zugNichtGültig = true;
		
		int status = 0;
		
		
		/* Der Status des Spiels
		 0 = Spiel läuft
		 1 = Spiel wurde beendet, Spieler hat gewonnen.
		 2 = Spiel wurde unentschieden beendet. Kein Spieler hat gewonnen.
		 */
		
		  /*
			1 2 3
		  A           
		  B
		  C
		  */
		spielFeld();	
		//Starten der Schleife
		while(status == 0 ){		
			
		//User Eingabe. Springt zum Anfang zurück, falls falsche Eingabe oder doppelte Eingabe
		while(zugNichtGültig){					
		String s = JOptionPane.showInputDialog("Bitte wählen Sie ein Feld.");
		if(s.equalsIgnoreCase("A1") ){ if(A1 == 0 ){
			A1 = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else if(s.equalsIgnoreCase("A2")){ if(A2 == 0 ){
			A2 = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else if(s.equalsIgnoreCase("A3")){ if(A3 == 0 ){
			A3 = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else if(s.equalsIgnoreCase("B1")){ if(B1 == 0 ){
			B1 = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else if(s.equalsIgnoreCase("B2")){ if(B2 == 0 ){
			B2 = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else if(s.equalsIgnoreCase("B3")){ if(B3 == 0 ){
			B3 = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else if(s.equalsIgnoreCase("C1")){ if(C1 == 0 ){
			C1 = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else if(s.equalsIgnoreCase("C2")){ if(C2 == 0 ){
			C2 = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else if(s.equalsIgnoreCase("C3")){ if(C3 == 0 ){
			C3 = currentPlayer;
			break;
		}else{
			System.out.println("Dieses Feld ist bereits belegt!");
			zugNichtGültig = true;
			}
		}else{
			System.out.println("Kein gültiges Feld!");
			zugNichtGültig = true;
		}		
	}
		
		//Spielfeld Ausgabe
		spielFeld();		
		
		//Wandle Wert in String um (1,-1 in X, O)
		if(nextPlayer == 1){
			nextPlayerIs = "X";
		}else{
			nextPlayerIs = "O";
		}
		
		//Spiel vorbei?
		if(checkIfWinner(currentPlayer)){ 
			System.out.println("Das Spiel wurde beendet.");
			status = 1;
			if(currentPlayer == SpielerO){
				System.out.println("Spieler O hat gewonnen.");
			}
			if(currentPlayer == SpielerX){
				System.out.println("Spieler X hat gewonnen.");
			}
			break;
		}else if(checkIfEnd()){
			status = 2;
			System.out.println("Das Spiel wurde beendet. Keine Partei hat gewonnen.");
			break;
		}else if(status == 0){
			System.out.println("Das Spiel läuft noch. Spieler " + nextPlayerIs + " ist am Zug.");
			
			//Wechsle nächsten Spieler
			if(nextPlayer == SpielerO){
				nextPlayer = SpielerX;
			}else{
				nextPlayer = SpielerO;
			}
			
			
			//Wechsle Spieler
			if(currentPlayer == SpielerX) {
				currentPlayer = SpielerO;
			}else{
				currentPlayer = SpielerX;
			}	
			
			spielFeld();
			
			
			//AI Spielt
			
			//AI checkt, ob noch Felder frei sind
			if(turnLeft()){
				
				if(A1 == 0){
					A1 = currentPlayer;
				}else if(A2 == 0){
					A2 = currentPlayer;
				}else if(A3 == 0){
					A3 = currentPlayer;
				}else if(B1 == 0){
					B1 = currentPlayer;
				}else if(B2 == 0){
					B2 = currentPlayer;
				}else if(B3 == 0){
					B3 = currentPlayer;
				}else if(C1 == 0){
					C1 = currentPlayer;
				}else if(C2 == 0){
					C2 = currentPlayer;
				}else if(C3 == 0){
					C3 = currentPlayer;
				}else{
					System.out.println("ERROR");
							
				}
				spielFeld();
				
				//Wandle Wert in String um (1,-1 in X, O)
				if(nextPlayer == 1){
					nextPlayerIs = "X";
				}else{
					nextPlayerIs = "O";
				}
				
				//Spiel vorbei?
				if(checkIfWinner(currentPlayer)){ 
					System.out.println("Das Spiel wurde beendet.");
					status = 1;
					if(currentPlayer == SpielerO){
						System.out.println("Spieler O hat gewonnen.");
					}
					if(currentPlayer == SpielerX){
						System.out.println("Spieler X hat gewonnen.");
					}
					break;
				}else if(checkIfEnd()){
					status = 2;
					System.out.println("Das Spiel wurde beendet. Keine Partei hat gewonnen.");
					break;
				}else if(status == 0){
					System.out.println("Das Spiel läuft noch. Spieler " + nextPlayerIs + " ist am Zug.");
					
					//Wechsle nächsten Spieler
					if(nextPlayer == SpielerO){
						nextPlayer = SpielerX;
					}else{
						nextPlayer = SpielerO;
					}
					
					
					//Wechsle Spieler
					if(currentPlayer == SpielerX) {
						currentPlayer = SpielerO;
					}else{
						currentPlayer = SpielerX;
					}
			}
			
			
		}
}
		}

	}

	//Hat einer gewonnen? TRUE oder FALSE	
	public static boolean checkIfWinner(int Player){
		
		//Linien

		//Horizontale
		
			int ABCD = A1 + B1 + C1;
			int ABCE = A2 + B2 + C2;
			int ABCF = A3 + B3 + C3;

		//Vertikale
			
			int DEFA = A1 + A2 + A3;
			int DEFB = B1 + B2 + B3;
			int DEFC = C1 + C2 + C3;

		//Schräge
			
			int ADBECF = A1 + B2 + C3;
			int CDBEAF = C1 + B2 + A3;
		
		//3 Nebeneinander?
		if(
				ABCD == 3*Player ||
				ABCE == 3*Player ||
				ABCF == 3*Player ||
				DEFA == 3*Player ||
				DEFB == 3*Player ||
				DEFC == 3*Player ||
				ADBECF == 3*Player ||
				CDBEAF == 3*Player
				){
			return true;
		}return false;
		

}
	//Sind alle Spielfelder besetzt? TRUE oder FALSE	
	public static boolean checkIfEnd(){
		
		if(
				A1 != 0 &&
				A2 != 0 &&
				A3 != 0 &&
				B1 != 0 &&
				B2 != 0 &&
				B3 != 0 &&
				C1 != 0 &&
				C2 != 0 &&
				C3 != 0 )
		{ return true;
		}return false;
		
				}
	//Spielfeld Ausgabe	
	public static void spielFeld(){
		
		if(A1 == 1){
			System.out.print("X  ");
		}else if(A1 == -1){
			System.out.print("O  ");
		}else{
			System.out.print("-  ");
		}
		
		if(A2 == 1){
			System.out.print("X  ");
		}else if(A2 == -1){
			System.out.print("O  ");
		}else{
			System.out.print("-  ");
		}
		
		if(A3 == 1){
			System.out.println("X  ");
		}else if(A3 == -1){
			System.out.println("O  ");
		}else{
			System.out.println("-  ");
		}
		
		if(B1 == 1){
			System.out.print("X  ");
		}else if(B1 == -1){
			System.out.print("O  ");
		}else{
			System.out.print("-  ");
		}
		
		if(B2 == 1){
			System.out.print("X  ");
		}else if(B2 == -1){
			System.out.print("O  ");
		}else{
			System.out.print("-  ");
		}
		
		if(B3 == 1){
			System.out.println("X  ");
		}else if(B3 == -1){
			System.out.println("O  ");
		}else{
			System.out.println("-  ");
		}
		
		if(C1 == 1){
			System.out.print("X  ");
		}else if(C1 == -1){
			System.out.print("O  ");
		}else{
			System.out.print("-  ");
		}
		
		if(C2 == 1){
			System.out.print("X  ");
		}else if(C2 == -1){
			System.out.print("O  ");
		}else{
			System.out.print("-  ");
		}
		
		if(C3 == 1){
			System.out.println("X  ");
		}else if(C3 == -1){
			System.out.println("O  ");
		}else{
			System.out.println("-  ");
		}
		
	}
	
	public static boolean turnLeft(){
		
		if(		
				A1 == 0 ||
				A2 == 0 ||
				A3 == 0 ||
				B1 == 0 ||
				B2 == 0 ||
				B3 == 0 ||
				C1 == 0 ||
				C2 == 0 ||
				C3 == 0	){
			return true;
		}return false;
		
		
	}
			
}
 
Zuletzt bearbeitet:
Da ist ziemlich viel Copy&Paste, was schlecht ist. Das kannst du mit deinem Wissen bereits entfernen.

Java:
	// Spielfeld Ausgabe
	public static void spielFeld() {
		neueReihe(A1, A2, A3);
		neueReihe(B1, B2, B3);
		neueReihe(C1, C2, C3);
	}

	private static void neueReihe(int a, int b, int c) {
		neuesFeld(a);
		neuesFeld(b);
		neuesFeld(c);
                System.out.println();
	}

	private static void neuesFeld(int wert) {
		if (wert == 1) {
			System.out.print("X ");
		} else if (wert == -1) {
			System.out.print("O ");
		} else {
			System.out.print("- ");
		}
	}
 
Zuletzt bearbeitet:

Zurück
Oben