Hallo und guten morgen!
Ich habe soweit alles fertig. Würde jetzt gerne nur statt den drei "." in einer Reihe ein Spielfeld der Form
#123
1
2
3
(# ist hier nur der platzhalter, ist also nicht bestandteil des programms)
haben.
Ich habs schon probiert, aber sobald ich das programm starten will, sieht es alles andere aus als wie oben...
Kann mir einer vielleicht einer helfen... - danke -
Ich habe soweit alles fertig. Würde jetzt gerne nur statt den drei "." in einer Reihe ein Spielfeld der Form
#123
1
2
3
(# ist hier nur der platzhalter, ist also nicht bestandteil des programms)
haben.
Ich habs schon probiert, aber sobald ich das programm starten will, sieht es alles andere aus als wie oben...
Kann mir einer vielleicht einer helfen... - danke -
Code:
import java.io.*;
class TicTacToe {
static int freieFelder;
static int[][] Feld=new int[3][3];
static void zeigFeld()
{
int x,y;
for(y=0;y<3;y++)
{
for(x=0;x<3;x++)
{
if(Feld[x][y]==1) System.out.print("O ");
else if(Feld[x][y]==-1) System.out.print("X ");
else System.out.print(". ");
}
System.out.println();
}
}
static boolean dreiInReihe()
{
if((Feld[0][0]!=0)&&(Feld[0][0]==Feld[0][1])&&(Feld[0][1]==Feld[0][2]))
return true;
if((Feld[1][0]!=0)&&(Feld[1][0]==Feld[1][1])&&(Feld[1][1]==Feld[1][2]))
return true;
if((Feld[2][0]!=0)&&(Feld[2][0]==Feld[2][1])&&(Feld[2][1]==Feld[2][2]))
return true;
if((Feld[0][0]!=0)&&(Feld[0][0]==Feld[1][0])&&(Feld[1][0]==Feld[2][0]))
return true;
if((Feld[0][1]!=0)&&(Feld[0][1]==Feld[1][1])&&(Feld[1][1]==Feld[2][1]))
return true;
if((Feld[0][2]!=0)&&(Feld[0][2]==Feld[1][2])&&(Feld[1][2]==Feld[2][2]))
return true;
if((Feld[0][0]!=0)&&(Feld[0][0]==Feld[1][1])&&(Feld[1][1]==Feld[2][2]))
return true;
if((Feld[2][0]!=0)&&(Feld[2][0]==Feld[1][1])&&(Feld[1][1]==Feld[0][2]))
return true;
return false;
}
static boolean sieg(int x,int y,int spielerZug,int spielerWin) // Berechnet ob spielerWin gewinnt, wenn spielerZug auf die Position x, y setzt
{ // unter der Vorraussetzung, dass spielerWin immer perfekt spielt
int a,b;
boolean sieg;
freieFelder--;
Feld[x][y]=spielerZug;
if(!dreiInReihe())
{
if(freieFelder == 0) sieg=false;
else
{
if(spielerZug==spielerWin) sieg=true; else sieg=false;
for(b=0;b<3;b++)
for(a=0;a<3;a++)
if(Feld[a][b]==0)
{
if(spielerZug==spielerWin)
sieg=sieg&&sieg(a,b,-spielerZug,spielerWin);
else
sieg=sieg||sieg(a,b,-spielerZug,spielerWin);
}
}
}
else {
if(spielerZug==spielerWin) sieg=true;
else sieg=false;
}
Feld[x][y]=0;
freieFelder++;
return sieg;
}
public static void main(String[] args){ // Start der Main-methode
TicTacToe start = new TicTacToe();
start.anfang();
}
public void anfang(){
int x,y,x_Pos=0,y_Pos=0;
char antwort=' ';
BufferedReader stdin=null;
for(x=0;x<=2;x++)
for(y=0;y<=2;y++) Feld[x][y]=0;
freieFelder=9;
zeigFeld();
do {
System.out.print("Soll der Computer anfangen? ");
try {
stdin = new BufferedReader(
new InputStreamReader(System.in));
antwort = stdin.readLine().charAt(0);
} catch (Exception e) {
e.printStackTrace();
}
antwort |=32;
} while (!((antwort=='j') || (antwort=='n')));
if(antwort=='j') {
Feld[1][1]=1;
freieFelder--;
zeigFeld();
}
while(freieFelder>0 && (!dreiInReihe()) ) {
do {
try {
System.out.print("\nGeben Sie nun bitte die X-Koordinate ein (1-3) ");
String inputString = stdin.readLine();
x_Pos=Integer.parseInt(inputString);
System.out.print("\nGeben Sie nun bitte die Y-Koordinate ein (1-3) ");
inputString = stdin.readLine();
y_Pos=Integer.parseInt(inputString);
} catch (Exception e) {
e.printStackTrace();
}
} while (Feld[x_Pos-1][y_Pos-1]!=0);
Feld[x_Pos-1][y_Pos-1]=-1;
freieFelder--;
boolean gefunden=false;
out:
for(y=0;y<3;y++)
for(x=0;x<3;x++)
if(Feld[x][y]==0 && sieg(x,y,1,1))
{
Feld[x][y]=1;
freieFelder--;
gefunden=true;
break out;
}
if(!gefunden)
out:
for(y=0;y<3;y++)
for(x=0;x<3;x++)
if(Feld[x][y]==0 && !sieg(x,y,1,-1) )
{
Feld[x][y]=1;
freieFelder--;
break out;
}
zeigFeld();
}
}
}