Hi
Ich bin gerade dabei TicTacToe zu implementieren. Bin jetzt schon soweit, dass man abwechselnd X bzw O auf das Spielfeld setzen kann. Es ist allerdings noch so, dass wenn der nächste Spieler dran ist, die Markierung des vorherigen Spielers verschwindet, da das Spielfeld eben neu geladen wird.
Ich komme gerade nicht drauf, wie ich erreichen kann, dass von Spieler zu Spieler die Kreuze bzw Kreise auf dem Spielfeld gespeichert bleiben. Freue mich über Tipps und Anregungen.
Hier der bisherige Code, testet selbst:
:toll:
Ich bin gerade dabei TicTacToe zu implementieren. Bin jetzt schon soweit, dass man abwechselnd X bzw O auf das Spielfeld setzen kann. Es ist allerdings noch so, dass wenn der nächste Spieler dran ist, die Markierung des vorherigen Spielers verschwindet, da das Spielfeld eben neu geladen wird.
Ich komme gerade nicht drauf, wie ich erreichen kann, dass von Spieler zu Spieler die Kreuze bzw Kreise auf dem Spielfeld gespeichert bleiben. Freue mich über Tipps und Anregungen.
Hier der bisherige Code, testet selbst:
Java:
package tictactoe;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class tictactoe {
char[][] spielfeld = new char[3][3];
/**x-Koordinate für Felder */
int x=-1;
/**y-Koordinate für Felder */
int y=-1;
/**bestimmt, wann Spiel vorbei ist*/
boolean SpielzuEnde=false;
/**bestimmt wer an der Reihe ist*/
public boolean Spieler1=true;
int i;
int j;
public static void main(String[] args){
tictactoe test = new tictactoe();
test.Anzeige();
test.SpielSchleife();
}
/**zur Anzeige des Spielfelds*/
public void Anzeige(){
System.out.print(" "+ " 1"+" 2"+" 3"+ '\n');
for (i=0; i<= 2; i++){
System.out.print(i+1);
for (j=0; j <=2; j++){
spielfeld[i][j] = '-';
System.out.print('|');
Ankreuzen();
System.out.print(spielfeld [i][j]);
}
System.out.print('|');
System.out.print('\n');
}
}
/**gibt x-Koordinate zurück und überprüft Eingabe auf Gültigkeit
* */
public int Eingabe (){
if (Spieler1==true){
System.out.println("Spieler 1 ist dran.");
}else{
System.out.println("Spieler 2 ist dran.");
}
System.out.println("Erste Koordinate eingeben:");
this.x = readInt();
if(x==1 | x==2 | x==3){
return x;
}else{
Anzeige();
System.out.println("Eingabe ungültig");
return Eingabe();
}
}
/**gibt y-Koordinate zurück und überprüft Eingabe auf Gültigkeit*/
public int Eingabe2() {
System.out.println("Zweite Koordinate eingeben:");
this.y = readInt();
if (y == 1 | y == 2 | y == 3) {
return y;
} else {
Anzeige();
System.out.println("Eingabe ungültig");
return Eingabe2();
}
}
/**
* Spieler1 setzt X, Spieler2 setzt O
*
* Funktionsweise des Kreuzesetzens:
* Schleife zur Spielfelderstellung wird durchlaufen und wenn die Stelle
* x/y erreicht wird, wird das X bzw das O gesetzt.
*/
public void Ankreuzen(){
if(this.Spieler1==true){
if(i==this.x & j==this.y){
spielfeld[this.x][this.y]='X';
}
}else{
if(i==this.x & j==this.y){
spielfeld[this.x][this.y]='O';
}
}
}
public void Spielplan(){
this.x = Eingabe()-1;
this.y = Eingabe2()-1;
System.out.print("Gewähltes Feld: " + (x+1) + "/" + (y+1) +"\n");
Anzeige();
}
public void SpielSchleife(){
while (SpielzuEnde==false){
Spielplan();
if(this.Spieler1==true){
this.Spieler1=false;
}else{
this.Spieler1=true;
}
}
}
private BufferedReader console = new BufferedReader( new InputStreamReader( System.in ) );
/**
* Gibt die nächste Eingabezeile als String zurück.
*/
public String readLine() {
try {
return console.readLine();
} catch (IOException e) {
return "\n";
}
}
/**
* Gibt die nächste Eingabezeile als int-Wert zurück. Es werden
* nur die ersten Ziffer inklusive Vorzeichen berücksichtigt.
*/
public int readInt() {
return parseInt(readLine());
}
/**
* Wandelt <code>zahl</code> in einen int-Wert.
*/
public int parseInt(String zahl) {
try {
return Integer.parseInt(zahl);
} catch (NumberFormatException e) {
return 0;
}
}
}
:toll:
Zuletzt bearbeitet: