2017-06-02 3 views
0

Die Wincondition ist in siegBedung(). Ich möchte, dass die do-Schleife aufhört, wenn siegBedung() wahr ist, aber selbst wenn die Wincondition erfüllt ist, wird die Schleife nicht beendet. ausgewählteReihe ist die ausgewählteRow und ausgewählteSpalte ist die gewählteColumn des Spielers.Do-Schleife endet nicht im Tic-Tac-Toe Spiel

Meine Gedanken: Wenn Spieler 1 2,2 wählt und er bereits seine Note auf 1,2 und 3,2 hat, sollte er die zweite Win-Bedingung verifizieren und true zurückgeben, damit die while-Bedingung der do-Schleife erfüllt ist es endet.

import java.util.Scanner; 

public class TTT { 
    static Scanner sc = new Scanner(System.in); 
    static final int spalte = 3; 
    static final int reihe = 3; 
    static int[][] feld = new int[reihe][spalte]; 
    static int leer = 0; 
    static int kreuz = 1; 
    static int kreis = 2; 
    static int spieler; 
    static int ausgewählteReihe; 
    static int ausgewählteSpalte; 
    static int spielerSymbol; 
    static boolean siegBedingung; 

public static void main(String[] args) { 


    start(); 
    do { 
    brett(); 
    zug(); 
    siegBedingung(); 
    }while(siegBedingung == false); 
    System.out.println("Spieler " + spielerSymbol + " gewinnt."); 
} 

public static void start() { 
    for(int zählerReihe = 0; zählerReihe < reihe; zählerReihe++) { 
     for(int zählerSpalte = 0; zählerSpalte < spalte; zählerSpalte++) { 
      feld[zählerReihe][zählerSpalte] = leer; 
     } 
    } 
    spielerSymbol = 1; 
} 

public static void zug() { 
    boolean validInput = false; 
    do { 
     if(spielerSymbol == 1) { 
      System.out.println("Spieler 1 (Kreuz) ist am Zug."); 
     } 
     if(spielerSymbol == 2) { 
      System.out.println("Spieler 2 (Kreis) ist am Zug."); 
     } 
     System.out.println("Geben Sie die gewünschte Reihe ein."); 
     ausgewählteReihe = sc.nextInt() -1; 
     System.out.println("Geben Sie die gewünschte Spalte ein."); 
     ausgewählteSpalte = sc.nextInt() -1; 
     if(ausgewählteReihe >= 0 && ausgewählteReihe < reihe && ausgewählteSpalte >= 0 && ausgewählteSpalte < spalte && feld[ausgewählteReihe][ausgewählteSpalte] == leer) { 
      feld[ausgewählteReihe][ausgewählteSpalte] = spielerSymbol; 
      validInput=true; 
     } else { 
      System.out.println("Das ausgewählte Feld ist nicht gültig."); 
     } 
    }while(!validInput==true); 
    spielerSymbol = (spielerSymbol == 1) ? 2 : 1; 
} 

public static boolean siegBedingung() { 
    return(feld[ausgewählteReihe][0] == spielerSymbol && feld[ausgewählteReihe][1] == spielerSymbol && feld[ausgewählteReihe][2] == spielerSymbol 
    || feld[0][ausgewählteSpalte] == spielerSymbol && feld[1][ausgewählteSpalte] == spielerSymbol && feld[2][ausgewählteSpalte] == spielerSymbol 
    || feld[1][1] == spielerSymbol && feld[2][2] == spielerSymbol && feld[0][0] == spielerSymbol 
    || feld[0][2] == spielerSymbol && feld[1][1] == spielerSymbol && feld[2][0] == spielerSymbol); 
} 
public static void brett() { 
    for(int zählerReihe = 0; zählerReihe < reihe; zählerReihe++) { 
     for(int zählerSpalte = 0; zählerSpalte < spalte; zählerSpalte++) { 
      System.out.print("|"); 
      zelle(feld[zählerReihe][zählerSpalte]); 
     } 
     System.out.print("|"); 
     System.out.println(); 
    } 
} 

public static void zelle(int inhalt) { 
    switch(inhalt) { 
    case 0: System.out.print("_"); break; 
    case 1: System.out.print("X"); break; 
    case 2: System.out.print("O"); break; 
    } 
} 

}

Antwort

1

so testete ich Ihren Code und es funktionierte. Ich brauchte diese Dinge zu ändern:

start(); 
do { 
    spielerSymbol = (spielerSymbol == 1) ? 2 : 1; 
    brett(); 
    zug(); 
} while (!siegBedingung()); 
System.out.println("Spieler " + spielerSymbol + " gewinnt."); 

in zug() entfernen Sie die letzte Zeile

Änderung siegBedingung wie der othe Benutzer vorgeschlagen:

public static boolean siegBedingung() { 
    return (feld[ausgewählteReihe][0] == spielerSymbol && feld[ausgewählteReihe][1] == spielerSymbol 
      && feld[ausgewählteReihe][2] == spielerSymbol) 
      || (feld[0][ausgewählteSpalte] == spielerSymbol && feld[1][ausgewählteSpalte] == spielerSymbol 
        && feld[2][ausgewählteSpalte] == spielerSymbol) 
      || (feld[1][1] == spielerSymbol && feld[2][2] == spielerSymbol && feld[0][0] == spielerSymbol) 
      || (feld[0][2] == spielerSymbol && feld[1][1] == spielerSymbol && feld[2][0] == spielerSymbol); 
} 
+0

Hallo, hinzugefügt, aber es immer noch nicht beendet . – Cali

+0

Warum ist die Variable derselbe Name wie die Methode? – Li357

+0

@AndrewLi fragen OP, er nannte es so – JohnnyAW