Tic Tac Toe

HABB23

Neues Mitglied
Hiho,
Ich arbeite grade an einem Tic Tac Toe spiel.
Ich bin noch ein ziemlicher anfänger und wollte mal fragen ob es irgendwie möglich ist alle Arrays mit einem bestimmten wert abzufragen ? es geht darum den Sieg zu bestimmen und ich wollte es eigentlich so machen das einfach alle arrays abgefragt werden in dem ein X oder O steht und wenn alle arrays in einer kooardinate also X oder Y übereinstimmen halt der spieler gewonnen hat.

Java:
public class TICTACTOE
{
    private int x;
    private int y;
    private char spieler;
    private boolean sieg;
    private char[][] spielfeld = new char[3][3]; 
    private int zaehler;
    


    public TICTACTOE()
    {
        zaehler= 9;
        
    }

  
    public void Zug(int x, int y , char spieler)
    {    
        
        if(zaehler==0)
        {
            System.out.print("Unentschieden");
        }
        else
        {
            spielfeld[x][y]= spieler;
            zaehler=zaehler-1;
            


    }
    
}
}
ist was ich bisher habe. Ist bestimmt alles nicht ideal aber ich würde ganz gerne mein code so simpel behalten damit ich da auch noch durch steige ! Also ist meine idee überhaupt umsetztbar oder geht das garnicht so wie ich das gerne hätte? Achja ich habe natürlich auch schon dran gedacht immer alles mit IF IF IF IF IF abzufragen aber das kanns ja nicht sein oder ?


Danke und entschuldigung für meine vielen Rechtschreibfehler
 

Landei

Top Contributor
Du brauchst zwei verschachtelte Schleifen für Zeilen und Spalten, und zwei einfache für die Diagonalen:
(ungetestet)
Java:
boolean gewonnen = false;
boolean test = true;

//Spalten
for(int x = 0; x < 3; x++) {
  test = true;
  for(int y = 0; y < 3; y++) { 
    test &= (spielfeld[x][y] == spieler);
  }
  gewonnen |= test;
}
//Zeilen
for(int y = 0; y < 3; y++) {
  test = true;
  for(int x = 0; x < 3; x++) { 
    test &= (spielfeld[x][y] == spieler);
  }
  gewonnen |= test;
}
//Hauptdiagonale
test = true;
for(int d = 0; d < 3; d++) {
   test &= (spielfeld[d][d] == spieler);
}
gewonnen |= test;
//Nebendiagonale
test = true;
for(int d = 0; d < 3; d++) {
   test &= (spielfeld[d][2-d] == spieler);
}
gewonnen |= test;
if (gewonnen) {
   //tu was
}

Man kann das noch ein wenig zusammenfassen:
Java:
boolean gewonnen = false;
boolean test1 = true;
boolean test2 = true;

//Spalten und Zeilen
for(int x = 0; x < 3; x++) {
  test1 = true;
  test2 = true;
  for(int y = 0; y < 3; y++) { 
    test1 &= (spielfeld[x][y] == spieler);
    test2 &= (spielfeld[y][x] == spieler);
  }
  gewonnen |= test1 || test2;
}
//Diagonalen
test1 = true;
test2 = true;
for(int d = 0; d < 3; d++) {
   test1 &= (spielfeld[d][d] == spieler);
   test2 &= (spielfeld[d][2-d] == spieler);
}
gewonnen |= test1 || test2;
 
Zuletzt bearbeitet:

HABB23

Neues Mitglied
hey vielen dank für deine Antwort nur habe ich jetzt noch ein paar fragen wie gesagt bin nochn anfänger :x

was ist das |= ? und verstehe nicht ganz diese test varible
 

Landei

Top Contributor
Statt a = a + b kann man a += b schreiben. Das geht mit den meisten Operatoren, und aus x = x || y wird dann x |= y und aus x = x && y wird x &= y.

Test bestimmt, ob eine bestimmte Zeile, Spalte u.s.w. komplett gefüllt ist, z.B. Ist [0][0] OK und [0][1] OK und [0][2] OK, dann ist das entsprechede test true. gewonnen fügt alle tests zusammen: Ist einer der Zeilentests true oder ist einer der Spaltentests true u.s.w., dann ist gewonnen true.
 

Oben