Hallo erstmal ich bin noch nicht so lange am Coden und auch nicht sonderlich gut in Java (Programmieren generell: Anfänger Niveau würde ich sagen) und als mir langweilig war hab ich mir gedacht einen Tic Tac Toe Code zu schreiben. Es funktionieren so ziemlich alle Fälle die ich versucht habe, außer eben einer (der ist auch unten angeführt). Ich weiß wirklich nicht weshalb das ist, ich bin die (ich weiß unnötig lange) if-Bedingung schon doppelt und dreifach durchgegangen aber bin nicht auf den Wurm gekommen :/ Ich hoffe ihr könnt mir helfen und möglicherweise könnte mir auch jemand eine elegantere Lösung zur checkWin() Methode zu sagen, statt der vielen, überlangen ifs. Ach ja, die Zahlen bei den Gewinner ausgaben (z.B.: Der Gewinner ist Spieler x4) habe ich reingetan um auf das Problem zu kommen, also bitte ignorieren
Vielen Dank schonmal im Vorraus für jede Antwort und seit bitte nicht zu Grob zu mir ich bin erst Anfänger >.<
Java:
/**
* Simulation des Spieles Tic Tac Toe
* Datum der letzten Bearbeitung: 1.03.2015
* Author: ******
*/
import java.util.Scanner;
public class TicTacToe {
public static void main(String[] args) {
char[][] arr=new char[3][3]; //Spielfeld
int[] pos=new int[2]; //1...Zeile, 2...Spalte
int countTurn=1; //Zug counter
boolean game=true; //Bedingung damit die Schleife rennt
fillArrFirstTime(arr); //Füllt das Array zum ersten Mal mit "-"
while(game==true){
printField(arr); //Gibt das Array aus
pos=inputPos(pos, arr); //In dieser Methode gibt der Spieler ein wo er sein Zeichen Setzen will
arr=fillPosInArr(pos, arr, countTurn); //In dieser Methode wird das Zeichen tatsächlich ins Spielfeld eingefügt
if(countTurn>=5){ //Es ist erst möglich ab dem 5. Zug zu gewinnen. Dieses if ist nicht notwendig und dient eher zur Orientierung
game=checkWin(arr, countTurn); //In dieser Methode wird überprüft ob der Spieler der dran ist 3 in einer Zeile, und damit gewonnen hat
}
countTurn++;
}
}
public static char[][] fillArrFirstTime(char[][] arr){
for(int i=0; i<arr.length; i++){
for(int j=0; j<arr[i].length; j++){
arr[i][j]='-'; //Füllen der Stelle x, y (in dem Fall i, j) mit "-". Dies wird nur am Anfang des Programms gemacht
}
}
return arr;
}
public static void printField(char[][] arr){
int count=1; //Hilfe zur Gestaltung der Ausgabe
System.out.println(" 1 2 3");
for(char[] i: arr){ //foreach-Schleifen zur Ausgabe von Arrays
System.out.printf("%d ", count);
count++;
for(char j: i){
System.out.printf("%s ", j);
}
System.out.println();
}
}
public static int[] inputPos(int[] pos, char[][] arr){
Scanner s=new Scanner(System.in);
System.out.println("Geben Sie Ihre gewählte Zeile ein! ");
pos[0]=s.nextInt()-1; //-1 wegen der Index Abfrage bei Arrays
System.out.println("Geben Sie Ihre gewählte Spalte ein! ");
pos[1]=s.nextInt()-1; //-1 wegen der Index Abfrage bei Arrays
if(pos[0]>2||pos[1]>2||pos[0]<0||pos[1]<0||arr[pos[0]][pos[1]]=='x'||arr[pos[0]][pos[1]]=='o'){ //Überprüfen ob der eingegebene Wert zu groß/klein oder die Position schon beschrieben ist
System.out.println("Falsche Eingabe");
inputPos(pos, arr); //Rekursion zur Neueingabe
}
return pos;
}
public static char[][] fillPosInArr(int[] pos, char[][] arr, int count){
arr[pos[0]][pos[1]]=count%2==0?'o':'x'; //Bedingunsoperator zur Überprüfung welcher Spieler dran ist
return arr;
}
public static boolean checkWin(char[][] arr, int count){
if(count==9){ //Man kann nicht mehr als 9 Züge spielen
printField(arr);
System.out.println("Unentschieden");
return false;
}else{
if((arr[0][0]==arr[0][1]&&arr[0][0]==arr[0][2])||(arr[1][0]==arr[1][1]&&arr[1][0]==arr[1][2])||(arr[2][0]==arr[2][1]&&arr[2][0]==arr[2][2])){ //Überprüfen aller Zeilen auf Gleichheit
if(count%2==0){
printField(arr);
System.out.println("Der Gewinner ist Spieler o1");
}else{
printField(arr);
System.out.println("Der Gewinner ist Spieler x2");
}
return false;
}else if((arr[0][0]==arr[1][0]&&arr[0][0]==arr[2][0])||(arr[0][1]==arr[1][1]&&arr[0][1]==arr[2][1])||(arr[0][2]==arr[1][2]&&arr[0][2]==arr[2][2])){ //Überprüfen aller Spalten auf Gleichheit
if(count%2==0){
printField(arr);
System.out.println("Der Gewinner ist Spieler o3");
}else{
printField(arr);
System.out.println("Der Gewinner ist Spieler x4");
}
return false;
}else if((arr[0][0]==arr[1][1]&&arr[0][0]==arr[2][2])||(arr[0][2]==arr[1][1]&&arr[0][2]==arr[2][0])){ //Überprüfen aller Diagonalen auf Gleichheit
if(count%2==0){
printField(arr);
System.out.println("Der Gewinner ist Spieler o5");
}else{
printField(arr);
System.out.println("Der Gewinner ist Spieler x6");
}
return false;
}else{
return true;
}
}
}
}
Ausgabe:
1 2 3
1 - - -
2 - - -
3 - - -
Geben Sie Ihre gewählte Zeile ein!
1
Geben Sie Ihre gewählte Spalte ein!
1
1 2 3
1 x - -
2 - - -
3 - - -
Geben Sie Ihre gewählte Zeile ein!
2
Geben Sie Ihre gewählte Spalte ein!
1
1 2 3
1 x - -
2 o - -
3 - - -
Geben Sie Ihre gewählte Zeile ein!
1
Geben Sie Ihre gewählte Spalte ein!
2
1 2 3
1 x x -
2 o - -
3 - - -
Geben Sie Ihre gewählte Zeile ein!
2
Geben Sie Ihre gewählte Spalte ein!
2
1 2 3
1 x x -
2 o o -
3 - - -
Geben Sie Ihre gewählte Zeile ein!
3
Geben Sie Ihre gewählte Spalte ein!
1
1 2 3
1 x x -
2 o o -
3 x - -
Der Gewinner ist Spieler x4