tictactoe spiel

enesss

Mitglied
ich möchte ein Tiktaktoe Spiel erstellen. Unten seht ihr meine Klasse mit meinen Methoden. Nun möchte ich eine weiter klasse erstellen, die das Spiel startet. ich komme, aber nicht weiter und weiß leider nicht wie ich weitervorgehen muss und ob meine Methode richtig sind















Java:
package TicTacToe;



    public class PlayBoard {
          // Das Spielfeld besteht aus einem 3x3-Array von Zeichen
          public char[][] field = new char[3][3];
          // Konstruktor, der das Spielfeld initialisiert
          public PlayBoard() {
            // Alle Felder auf '-' setzen, um anzuzeigen, dass sie noch frei sind
            for (int i = 0; i < 3; i++) {
              for (int j = 0; j < 3; j++) {
                field[i][j] = '-';
              }
            }
          }

          // Überprüft, ob das Feld mit dem angegebenen Index frei ist
          // Index muss zwischen 0 und 8 liegen
          public boolean isEmpty(int index) {
            // Wandle den Index in x- und y-Koordinate um
            int x = index % 3;
            int y = index / 3;
            return field[x][y] == '-';
          }

          // Überprüft, ob das Spielfeld voll ist
          public boolean isFull() {
            // Gehe alle Felder durch und überprüfe, ob sie frei sind
            for (int i = 0; i < 3; i++) {
              for (int j = 0; j < 3; j++) {
                if (field[i][j] == '-') {
                  return false;
                }
              }
            }
            return true;
          }

          // Überprüft, ob ein Spieler gewonnen hat
          public boolean hasWon(String[][] board, String player) {
              // Überprüfen Sie jede Zeile auf eine Gewinnkombination
              for (int i = 0; i < 3; i++) {
                if (board[i][0].equals(player) && board[i][1].equals(player) && board[i][2].equals(player)) {
                  return true;
                }
              }

              // Überprüfen Sie jede Spalte auf eine Gewinnkombination
              for (int j = 0; j < 3; j++) {
                if (board[0][j].equals(player) && board[1][j].equals(player) && board[2][j].equals(player)) {
                  return true;
                }
              }

              // Überprüfen Sie die Diagonalen auf eine Gewinnkombination
              if (board[0][0].equals(player) && board[1][1].equals(player) && board[2][2].equals(player)) {
                return true;
              }
              if (board[0][2].equals(player) && board[1][1].equals(player) && board[2][0].equals(player)) {
                return true;
              }

              // Keine Gewinnkombination gefunden
              return false;
            }

    
    private char[] board;
          public boolean isFull(String[][] board) {
              for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 3; j++) {
                  if (board[i][j] == null || board[i][j].isEmpty()) {
                    return false;
                  }
                }
              }
              return true;
            }
          public void placePlayerSign(int index, char playerSign) {
              // Überprüfe, ob der übergebene Index gültig ist
              if (index < 0 || index > 8) {
                throw new IllegalArgumentException("Ungültiger Index. Bitte einen Index zwischen 0 und 8 angeben.");
              }
              
    
            // Überprüfe, ob das Feld an der angegebenen Stelle bereits besetzt ist
              if (board[index] != '-') {
                throw new IllegalArgumentException("Feld ist bereits besetzt. Bitte wähle ein anderes Feld.");
              }
              
              // Setze das Zeichen des Spielers auf das ausgewählte Feld
              board[index] = playerSign;
            }
          public static String getTicTacToeString(char[][] board) {
                // Überprüfen, ob das Spielfeld gültig ist
                if (board == null || board.length != 3 || board[0].length != 3) {
                    return "";
                }

                // Initialisieren der Zeichenkette, die das Spielfeld darstellt
                StringBuilder sb = new StringBuilder();

                // Iterieren über jede Zeile des Spielfelds
                for (int i = 0; i < 3; i++) {
                    // Iterieren über jedes Zeichen in der Zeile
                    for (int j = 0; j < 3; j++) {
                        sb.append(board[i][j]);
                    }
                    sb.append('\n'); // Zeilenumbruch am Ende der Zeile hinzufügen
                }

                return sb.toString(); // Zeichenkette zurückgeben
            }
          public int getWinningMove(int player, int[] board) {
              // Überprüfe jedes Feld im Spielfeld
              for (int i = 0; i < board.length; i++) {
                // Überspringe belegte Felder
                if (board[i] != 0) continue;
                // Versuche, das Feld zu besetzen
                board[i] = player;
                // Überprüfe, ob der Spieler gewonnen hat
                if (hasWon(player, board)) {
                  // Rücke das Feld zurück und gib den Index zurück
                  board[i] = 0;
                  return i;
                }
                // Rücke das Feld zurück
                board[i] = 0;
              }
              // Kein gewinnender Zug gefunden, gib -1 zurück
              return -1;
            }
        private boolean hasWon(int player, int[] board2) {
            // TODO Auto-generated method stub
            return false;
        }

        

    }
 
Zuletzt bearbeitet:
Bitte verwende die Code-Tags (das </> Symbol im Editor ganz links). So kann man das nicht gut lesen und es kommt zu Fehlern in der Darstellung. Du kannst deinen Beitrag ggf. noch editieren.
 
Warum eigentlich gefühlt jeden Tag ein neuer Thread zum Thema TicTacToe?

Und bitte formatiere deinen Beitrag mal sauber (auch mit Code Tags). Das kann keiner lesen..
 
Nun möchte ich eine weiter klasse erstellen, die das Spiel startet. ich komme, aber nicht weiter und weiß leider nicht wie ich weitervorgehen muss und ob meine Methode richtig sind
Ob deine Methoden richtig sind, musst du selbst rausfinden. Ansonsten könntest du eine neue Klasse z. B. Main erstellen und darin eine main-Methode in der du Instanzen deiner Klasse erstellst. Die main-Methode ist der Einstiegspunkt für dein Programm.
Java:
public class Main {
 
    public static void main(String[] args) {
     
        PlayBoard board = new PlayBoard();
     
        // jetzt kannst du deine Methoden über die Instanz aufrufen board.xxx()
    }
}

Vermutlich wirst du noch eine weitere Klasse brauche, die die Eingaben der Benutzers und die Ausgabe auf der Konsole übernimmt. Das sollte immer von der eigentlichen Logik getrennt bleiben.

Es ist aber durchaus sinnvoll, zunächst deine Methoden gut zu testen, indem du sie mit Daten aufrufst und prüfst, ob das Ergebnis korrekt ist.
 
Ich möchte jetzt das Spiel noch erweitern, dass ein Spieler gegen den Computer spielt. Dafür würde ich eine neue Klasse erstellen. Die Methode in dieser Klasse, soll den Index des Feldes für den nächsten Zug zurückgeben (also der Zug vom Computer). Die Methode soll wie folgt vorgehen:
1. Wenn der Spieler durch das Setzen auf ein Feld gewinnen kann, wird der Index dieses Feldes zurückgegeben
2. Kann der Spieler durch das Setzen auf ein Feld direkt den Sieg des Gegners im darauffolgenden Zug verhindern (Kette aus zwei Zeichen und einem freien Feld unterbrechen, indem selbst auf das freie Feld gesetzt wird), wird der Index dieses Feldes zurückgegeben.
3. Ist die Mitte frei, wird der Index der Mitte (4) zurückgegeben.
4.Ist eine Ecke frei, wird der Index der Ecke (0, 2, 6, 8) zurückgegeben.
5.Gebe den niedrigsten Index eines freien Feldes zurück.

Wenn es mehrere Möglichkeiten für eine Regel gibt, soll der niedrigste Index zurückgegeben werden.
Wie kann ich da vorgehen?
 

Zurück
Oben