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 :oops: .

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:

fLooojava

Bekanntes Mitglied
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.
 

127.0.0.1

Bekanntes Mitglied
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ß
 

WasserEsser

Mitglied
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:

WasserEsser

Mitglied
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:

fLooojava

Bekanntes Mitglied
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:

WasserEsser

Mitglied
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:

Ruzmanz

Top Contributor
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:
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
I Threads Spiel gol Java Basics - Anfänger-Themen 6
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
J ArrayList vergleichen im spiel Mastermind Java Basics - Anfänger-Themen 2
enesss tictactoe spiel Java Basics - Anfänger-Themen 5
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
Jxhnny.lpz TicTacToe Spiel vs Computer. (Probleme) Java Basics - Anfänger-Themen 7
httprt Probleme bei dem erstellen von leveln in meinem Spiel Java Basics - Anfänger-Themen 2
berserkerdq2 Habe ein Spiel entwickelt, dass immer in der 4 Runde einen cast-Fehler erhält Java Basics - Anfänger-Themen 3
berserkerdq2 Spiel hängt sich immer in der 4 Runde auf, obwohl ich jede Runde das gleiche mache Java Basics - Anfänger-Themen 1
Ekooekoo Hilfe spiel Java Basics - Anfänger-Themen 5
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
Kennewick Basketball Spiel Ergebnisse Java Basics - Anfänger-Themen 11
X Erste Schritte Hilfe bei einem kleinen Spiel. Java Basics - Anfänger-Themen 19
D Snake-Spiel ähnliche Aufgabe Hilfe Java Basics - Anfänger-Themen 3
R Hangman-Spiel-zufälliges Wort ermitteln Java Basics - Anfänger-Themen 4
JEP1 Java Dialog Fenster schließen Spiel Java Basics - Anfänger-Themen 0
I Simples Risiko-Spiel Java Basics - Anfänger-Themen 5
Hallolu Pong-Spiel: Schläger schneller werden lassen Java Basics - Anfänger-Themen 9
M Java Spiel wie Wer wird Millionär Java Basics - Anfänger-Themen 1
T Startbildschirm für ein Spiel erstellen Java Basics - Anfänger-Themen 0
Z Kein überprüfen des gesamten Arrays möglich.(Viergewinnt Spiel) Java Basics - Anfänger-Themen 6
G Ufo Spiel programmieren Java Basics - Anfänger-Themen 13
C Java Spiel Java Basics - Anfänger-Themen 3
J Spiel programmieren Java Basics - Anfänger-Themen 16
S Spiel-Programmieren. Wenn ein Objekt den anderen berührt. Java Basics - Anfänger-Themen 6
B Memory Spiel Java Basics - Anfänger-Themen 29
J Memory-Spiel Aktivierung der Methode mit Timer Java Basics - Anfänger-Themen 44
Kamy Ein einfaches "Vier Gewinnt" Spiel für Anfängerin Java Basics - Anfänger-Themen 51
A Breakout-Spiel , Ball mit Platten abprallen lassen Java Basics - Anfänger-Themen 1
S Spiel programmieren mit Java Java Basics - Anfänger-Themen 11
Olis Erste Schritte Simples Memory Spiel möglich? Java Basics - Anfänger-Themen 1
J Spiel mit Button klick starten Java Basics - Anfänger-Themen 9
C Rekursives Backtracking beim Spiel Peg Java Basics - Anfänger-Themen 22
M Spiel programmieren Java Basics - Anfänger-Themen 16
Spencer Reid Feedback zu kleinem Spiel Java Basics - Anfänger-Themen 4
kokojamboo92 Spiel programmieren Java Basics - Anfänger-Themen 1
R Kleines Java Spiel funktioniert nicht. Java Basics - Anfänger-Themen 2
I Spiel Java Basics - Anfänger-Themen 34
H ein einfaches Tic Tac Toe Spiel Java Basics - Anfänger-Themen 1
I Spiel programmieren. Java Basics - Anfänger-Themen 16
B Hilfe bei Escape - Spiel Java Basics - Anfänger-Themen 6
S Java-Spiel Java Basics - Anfänger-Themen 2
M Nim-Spiel geht in den negativen Bereich Java Basics - Anfänger-Themen 1
K Klassen Registrierungsseite für ein Spiel Java Basics - Anfänger-Themen 6
J Programmierung Quiz Spiel Java Basics - Anfänger-Themen 3
J Programmierung Quiz Spiel Java Basics - Anfänger-Themen 2
M Brauche Tipps für ein Spiel Java Basics - Anfänger-Themen 4
S Probleme mit GamGrid Spiel-Erstellung => Actor reagiert nicht auf Tastatur Java Basics - Anfänger-Themen 2
Mxxxt Mosaik Spiel - Steuerpanel wird nicht angezeigt Java Basics - Anfänger-Themen 5
M Erste Schritte Zufallszahl Spiel Problem Java Basics - Anfänger-Themen 7
Z Erste Schritte Kleines 2D. Spiel Objekt Bewegung funktioniert nicht Java Basics - Anfänger-Themen 2
H Spiel Kniffel: Gesamtes Array untersuchen. Java Basics - Anfänger-Themen 15
Tacofan Hangman als fertiges Spiel Java Basics - Anfänger-Themen 7
M Array und Objektorientierung? - TicTacToe Spiel Java Basics - Anfänger-Themen 43
C Klassen Sudoku-Spiel Werte werden nicht gesetzt Java Basics - Anfänger-Themen 4
K Kleines Spiel auf Java programmieren Java Basics - Anfänger-Themen 2
S Im objektorientiertem "Spiel" kämpfen Java Basics - Anfänger-Themen 3
I Klassen Umsetzungsfrage zu Spiel "Zuul" Java Basics - Anfänger-Themen 3
F Mastermind Spiel Java Basics - Anfänger-Themen 9
H Liste ausgeben (Spiel Hey Fisch (software-challenge) ändern Anzahl Fische) Java Basics - Anfänger-Themen 1
F Game-Engine für textbasierendes Spiel: Architektur? Java Basics - Anfänger-Themen 9
K Erste Schritte Frage Antwort Spiel - Fragen zur Planung Java Basics - Anfänger-Themen 2
J Java Spiel Zufallsauswahl für Zugbeginn Java Basics - Anfänger-Themen 3
J Frage Antwort Spiel - Wie Zeitcountdown realisieren? Java Basics - Anfänger-Themen 2
L Erste Schritte Spiel: Glückliches Sieben Java Basics - Anfänger-Themen 3
T Hangman spiel Java Basics - Anfänger-Themen 5
J 2 Pc's - Spiel gegeneinander ?! Java Basics - Anfänger-Themen 3
V Spiel Programmieren Java Basics - Anfänger-Themen 9
P 2D-Spiel und Bildschirmgröße Java Basics - Anfänger-Themen 2
O Methoden Fehlermeldung(Illegal start of expression) bei 4-Gewinnt-Spiel Java Basics - Anfänger-Themen 5
T Blöcke für ein Jump and Run Spiel Java Basics - Anfänger-Themen 8
S 2D-Spiel mit Threads... Java Basics - Anfänger-Themen 3
S 2D-Spiel im Vollbild an größe anpassen? Java Basics - Anfänger-Themen 3
M hangman spiel Java Basics - Anfänger-Themen 1
K JTextField in ein Spiel einfügen Java Basics - Anfänger-Themen 2
S Mosaik Spiel Java Basics - Anfänger-Themen 19
pinar memory spiel Java Basics - Anfänger-Themen 10
T OOP Mein erstes Java-Spiel - Schiffe versenken! Java Basics - Anfänger-Themen 2
K Erste Schritte Wie mache ich weiter? (Spiel-Menü) Java Basics - Anfänger-Themen 9
C Java Applet in html. Pong - old school Spiel Java Basics - Anfänger-Themen 10
J Variablen Invalid Character - Error -> Spiel mit Variablenergebnissen Java Basics - Anfänger-Themen 8
K Schere Stein Papier Spiel Java Basics - Anfänger-Themen 3
A Feedback zum Spiel Java Basics - Anfänger-Themen 5
F Hilfe bei meinem Spiel Java Basics - Anfänger-Themen 3
C Lotto Spiel Java Basics - Anfänger-Themen 23
Jagson Dotcom Spiel - Dots Random setzen Java Basics - Anfänger-Themen 8
Dogge Farben-Spiel Java Basics - Anfänger-Themen 20
K Diverse Bugs in einem Snake Spiel Java Basics - Anfänger-Themen 4
2 Lotto-Spiel Java Basics - Anfänger-Themen 9
X Datentypen Probleme mit Char bei meinem 1. Spiel Java Basics - Anfänger-Themen 20
D Erste Schritte Einstieg in die Java Spiel Programmierung Java Basics - Anfänger-Themen 7
H kleines Spiel [Processing] Java Basics - Anfänger-Themen 7
P NullPointerException in Memory-Spiel Java Basics - Anfänger-Themen 5
R Server/Client für Spiel Java Basics - Anfänger-Themen 2
K Hilfe, komme nicht weiter in meinem JAVA-Spiel Java Basics - Anfänger-Themen 3
J Programm(Spiel) neustarten Java Basics - Anfänger-Themen 8
M Suche Beispiel-Spiel Java Basics - Anfänger-Themen 3
C Java Nullpointer Exception in 2D-Spiel Snake Java Basics - Anfänger-Themen 8
M Apfel-Spiel KeyListener Java Basics - Anfänger-Themen 33

Ähnliche Java Themen

Neue Themen


Oben