Frage von iCraft, 29

Bräuchte Hilfe beim Programmieren eines TickTackToe Spiel.?

Hey leute, ich hab mithilfe GUI ein TicTacToe Spiel programmiert, jedoch klappt es nicht so wie ich es geplannt habe. Es zeigt mir an, wer gewonnen hat, jedoch passiert nichts wenn es unendschieden ist, und ich möchte dies ändern, also wenn keiner gewinnt soll dies mir ausgegeben werden. Vllt kommt ihr ja weiter und könnt sagen wo der fehler ist hier einmal der code :

    import java.util.Scanner;

public class ViewGUI {

public static boolean playerTurn = true;
public static boolean playerWon = false;
public static boolean computerWon = false;

public static TicTacTou board ;

public static void main(String[] args) {

    board = new TicTacTou();

}


public static void checkforwin() {
    //Player 1
    if (board.button1.getText().equals("X")&&
        board.button2.getText().equals("X")&&
        board.button3.getText().equals("X")&&
        board.button4.getText().equals("X")||
        
                   ...... (hier kommen andere ähnliche ueberprufungen fuers gewinnen)....

        board.button4.getText().equals("X")&&
        board.button7.getText().equals("X")&&
        board.button10.getText().equals("X")&&
        board.button13.getText().equals("X")) {
                    playerWon = true;
                    computerWon = false;
                    System.out.println("Player Won!");
                    
            
    }else{
    //Player 2 || Computer
    if (board.button1.getText().equals("O")&&
            board.button2.getText().equals("O")&&
            board.button3.getText().equals("O")&&
            board.button4.getText().equals("O")||
            
            ......(fasst das selbe wie fuer player 1) .....


        (Hier ist der "Fehler" bzw sollte if schleife sein, wenn es unendschieden ist, dass er mir dies ausgibt)
    else{
        if(board.button1.getText().equals("O") || board.button1.getText().equals("X") &&
            board.button2.getText().equals("O")|| board.button2.getText().equals("X")&&
            board.button3.getText().equals("O")|| board.button3.getText().equals("X")&&
            board.button4.getText().equals("O")|| board.button4.getText().equals("X")&&
            board.button5.getText().equals("O")|| board.button5.getText().equals("X")&&
            board.button6.getText().equals("O")|| board.button6.getText().equals("X")&&
            board.button7.getText().equals("O")|| board.button7.getText().equals("X")&&
            board.button8.getText().equals("O")|| board.button8.getText().equals("X")&&
            board.button9.getText().equals("O")|| board.button9.getText().equals("X")&&
            board.button10.getText().equals("O")|| board.button10.getText().equals("X")&&
            board.button11.getText().equals("O")|| board.button11.getText().equals("X")&&
            board.button12.getText().equals("O")|| board.button12.getText().equals("X")&&
            board.button13.getText().equals("O")|| board.button13.getText().equals("X")&&
            board.button14.getText().equals("O")|| board.button14.getText().equals("X")&& 
            board.button15.getText().equals("O")|| board.button15.getText().equals("X")&&
            board.button16.getText().equals("O")|| board.button16.getText().equals("X")){
        
            System.out.println("Keiner Gewinnt");
            }       
        }
Antwort
von Copyyy, 21

Woher soll der Computer wissen, dass du (O oder X) und (O oder X) meinst und nicht O oder (X und (O oder X))?

Dass es in verschiedenen Zeilen steht ist dem egal


Edit: Ich habe natürlich nicht getestet, ob es daran liegt, aber das fiel mir ins Auge..

Kommentar von Copyyy ,

Hmm.. Merke gerade, wenn alles true ist, sollte es ja egal sein, wie verglichen wird, true&&true und true||true ist immer true...
Ich würde mir zum debuggen einfach mal alle Vergleiche ausgeben lassen und gucken, ob nicht doch vielleicht einmal false ist.
Mal abgesehen von dem Problem: Vergleich doch lieber, ob in den Buttons überhaupt etwas steht bzw. Vergleich mit dem Standardstring, den du da reinpackst. 

Kommentar von iCraft ,

stimmt, dass könnt ich auch machen :) aber unsere "Professorin " möchte dass wir genau das machen, was wir in der Vorlesung hatten. In der VL sind haben wir neu mit GUI angefangen.

Kommentar von iCraft ,

Naja hat geklappt :) was du meintest, bzw ddas was du geschrieben hast aht mich auf eine idee gebracht. Der fehler war sehr klein ich musste einfach ( ) setzen :) also bsp:

(board.button1.getText().equals("O") || board.button1.getText().equals("X")) &&
( board.button2.getText().equals("O")|| board.button2.getText().equals("X"))&&
( board.button3.getText().equals("O")|| board.button3.getText().equals("X"))&&
Kommentar von Copyyy ,

Das meinte ich zuerst auch, aber einfach die Lösung zu verraten ist langweilig :P

Kommentar von regex9 ,

Ein paar Anmerkungen zu deinem Code:

  1. Mit binärer Addition könntest du dir die ewig langen Vergleiche sparen. 1 wäre X, 0 wäre O. Ansonsten gäbe es noch die Möglichkeit, die Buttons in einem Aggregat zu speichern, über das iteriert werden kann. 
  2. Es gibt keine If-Schleifen!
  3. Verwende auch für deine Methodennamen die Kamelhöckerschreibweise (checkForWin).

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten