Kein überprüfen des gesamten Arrays möglich.(Viergewinnt Spiel)

Z

Zakon

Mitglied
Hallo,
und zwar lerne ich für mein Studium gerade Java und bin noch im ersten Semester.
Ich soll ein Vier gewinnt spiel programmieren was sich selbst zufällig füllt.
Alles soweit so gut. Nur habe ich das Problem, dass bei meiner Diagonalen überprüfung ich nie auf meine Anzahl = 4 komme da ich den letzten "Block" nicht überprüfen kann durch meine "spielfeld.length -1".
Problem aber wenn ich die -1 lösche wird bekomme ich eine Fehlermeldung da ich ja ausserehalb des Array komme.

Hoffe jemand kann mir da helfen.
Danke schonmal im Vorraus: :)


Diagonale überprüfung:
       //Diagonal übeprüfen
        for(int spalte =0; spalte<spielfeld.length-1;spalte++){
            for (int zeile = 0; zeile < spielfeld.length-1; zeile++) {
                if (spielfeld[spalte][zeile] == stein) {

                    int y=spalte;
                    int x=zeile;

                    while(x < spielfeld.length-1
                            && y < spielfeld.length-1
                            && spielfeld[y+1][x+1] == stein){//Letzte nicht weil kein stein mehr kommt
                        anzahldi++;
                        x++;
                        y++;
                        if (anzahldi == n) {
                            System.out.println("4 in einer Reihe diagonal");
                            break;
                        }
                    }
                }
                anzahldi=0;
            }
        }
 
BestGoalkeeper

BestGoalkeeper

Top Contributor
Java:
public boolean areFourConnected(int player){

    // horizontalCheck
    for (int j = 0; j<getHeight()-3 ; j++ ){
        for (int i = 0; i<getWidth(); i++){
            if (this.board[i][j] == player && this.board[i][j+1] == player && this.board[i][j+2] == player && this.board[i][j+3] == player){
                return true;
            }           
        }
    }
    // verticalCheck
    for (int i = 0; i<getWidth()-3 ; i++ ){
        for (int j = 0; j<this.getHeight(); j++){
            if (this.board[i][j] == player && this.board[i+1][j] == player && this.board[i+2][j] == player && this.board[i+3][j] == player){
                return true;
            }           
        }
    }
    // ascendingDiagonalCheck
    for (int i=3; i<getWidth(); i++){
        for (int j=0; j<getHeight()-3; j++){
            if (this.board[i][j] == player && this.board[i-1][j+1] == player && this.board[i-2][j+2] == player && this.board[i-3][j+3] == player)
                return true;
        }
    }
    // descendingDiagonalCheck
    for (int i=3; i<getWidth(); i++){
        for (int j=3; j<getHeight(); j++){
            if (this.board[i][j] == player && this.board[i-1][j-1] == player && this.board[i-2][j-2] == player && this.board[i-3][j-3] == player)
                return true;
        }
    }
    return false;
}

Von hier https://stackoverflow.com/questions/32770321/connect-4-check-for-a-win-algorithm
 
Z

Zakon

Mitglied
Java:
public boolean areFourConnected(int player){

    // horizontalCheck
    for (int j = 0; j<getHeight()-3 ; j++ ){
        for (int i = 0; i<getWidth(); i++){
            if (this.board[i][j] == player && this.board[i][j+1] == player && this.board[i][j+2] == player && this.board[i][j+3] == player){
                return true;
            }          
        }
    }
    // verticalCheck
    for (int i = 0; i<getWidth()-3 ; i++ ){
        for (int j = 0; j<this.getHeight(); j++){
            if (this.board[i][j] == player && this.board[i+1][j] == player && this.board[i+2][j] == player && this.board[i+3][j] == player){
                return true;
            }          
        }
    }
    // ascendingDiagonalCheck
    for (int i=3; i<getWidth(); i++){
        for (int j=0; j<getHeight()-3; j++){
            if (this.board[i][j] == player && this.board[i-1][j+1] == player && this.board[i-2][j+2] == player && this.board[i-3][j+3] == player)
                return true;
        }
    }
    // descendingDiagonalCheck
    for (int i=3; i<getWidth(); i++){
        for (int j=3; j<getHeight(); j++){
            if (this.board[i][j] == player && this.board[i-1][j-1] == player && this.board[i-2][j-2] == player && this.board[i-3][j-3] == player)
                return true;
        }
    }
    return false;
}

Von hier https://stackoverflow.com/questions/32770321/connect-4-check-for-a-win-algorithm
Danke für die schnelle Antwort. Nur möchte ich ungern jetzt alles übern Haufen schmeißen und ein vorgefertigten Code verwenden. Wollte es ertsmal zum nachvolziehen auf meine Weise machen und habe gehofft es könnte mir jemand dabei einen Denkanstoß geben :)
 
BestGoalkeeper

BestGoalkeeper

Top Contributor
Am einfachsten wäre es wohl Du würdest dir das Board einmal aufzeichnen und die Linien/Schritte einzeichnen wie Du es per Hand überprüfen würdest... Das hilft meist schon, es zu verstehen.
 
kneitzel

kneitzel

Top Contributor
Also irgendwie ist der Auszug noch nicht aussagekräftig genug.

Derzeit nehme ich an, dass Du die Diagonale prüfst, indem Du stein auf den Wert aus dem Feld 0,0 setzt?
Und wie initialisierst Du anzahldi?

Kann es sein, dass anzahldi auf 0 gesetzt ist am Anfang? Dann kommst Du nur auf 3, denn du prüfst ja, ob drei Steine so sind, wie der erste.
Der erste Stein wird ja nicht geprüft und daher müsste dann anzahldi auf 1 initialisiert werden...

Das ist aber nur eine kleine Vermutung beim Überfliegen des Codes.

Edit: Ist aber auch generell etwas dubios, wenn Du nur prüfst, ob etwas gleich dem ersten Stein auf 0,0 ist. Also die Logik solltest Du noch einmal prüfen. Derzeit schaust Du nur ab index 1, da du ja x+1 und y+1 prüfst. Also bei einer Schleife ab 0 hast Du nie geschaut, was auf dem Feld 0,0 liegt. Daher wirklich einmal erst in Worten sagen, was Du genau bei dem Algorithmus machen möchtest um es dann umzusetzen ....
 
Z

Zakon

Mitglied
Also irgendwie ist der Auszug noch nicht aussagekräftig genug.

Derzeit nehme ich an, dass Du die Diagonale prüfst, indem Du stein auf den Wert aus dem Feld 0,0 setzt?
Und wie initialisierst Du anzahldi?

Kann es sein, dass anzahldi auf 0 gesetzt ist am Anfang? Dann kommst Du nur auf 3, denn du prüfst ja, ob drei Steine so sind, wie der erste.
Der erste Stein wird ja nicht geprüft und daher müsste dann anzahldi auf 1 initialisiert werden...

Das ist aber nur eine kleine Vermutung beim Überfliegen des Codes.
Ja anzahldi =0 oben. Ich glaube ich habe mein fehler gefunden undzwar muss ich wahrscheinlich in der erste if-Schleife ein anzahldi++; hinzufügen.(Da ich snst den ersten Stein nicht mitzähle)
Kann das gerade leider nur nicht ausprobieren, weil ich meinen Code gerade versuche mit Methoden zu Ordnen. 👏
Sobald es klappt werde ich euch Rückmeldung geben danke aber schonmal für die Antworten👍
 
kneitzel

kneitzel

Top Contributor
Ja, das wäre eine Idee. Aber das ist ja der Start der Prüfung - wenn Du nur in der if Abfrage zählst, dann wäre meine Erwartungshaltung, dass Du anzahldi erst in der Schleife deklarierst und direkt mit 1 initialisierst. (Dann hast Du den möglichst kleinen Geltungsbereich)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
B Warum bekomme ich kein Bild. Java Basics - Anfänger-Themen 10
D kein hauptmanifestattribut in dateiname.jar Java Basics - Anfänger-Themen 14
X Methode bei mehrfachen Aufruf kein Effekt Java Basics - Anfänger-Themen 3
Z Warum kein Dreieck aus Sternen? Java Basics - Anfänger-Themen 9
T In C:\java\bin wird kein javac angezeigt. Java Basics - Anfänger-Themen 1
B Wieso gibt das Programm in der Console kein Ergebnis aus? Java Basics - Anfänger-Themen 2
N kein Sound beim Öffnen der jar-Datei, in Eclipse schon Java Basics - Anfänger-Themen 1
I Shutdown wenn kein Strom verfügbar Java Basics - Anfänger-Themen 4
K Interface Kein Bild im .jar-File Java Basics - Anfänger-Themen 15
X Best Practice SUCHE ein gutes Javabuch! (kein Anfang von 0) Java Basics - Anfänger-Themen 5
N Input/Output Wenn kein Input, dann Fehler anzeigen lassen im JFrame Java Basics - Anfänger-Themen 6
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
J Umgebungsvariable Programmfenster zeigt kein Bild an Java Basics - Anfänger-Themen 1
T Objektorientierte Programmierung - Kein Plan wieso das nicht funktioniert! Java Basics - Anfänger-Themen 6
B Compiler-Fehler 86:11: error: ';' expected obwohl kein ";" hingehört! Java Basics - Anfänger-Themen 10
T Compiler-Fehler Methode ist Abstrakt obwohl kein Schlüsselwort gesetzt wurde Java Basics - Anfänger-Themen 5
V Kann kein Java Projekt mehr mit Eclipse erstellen Java Basics - Anfänger-Themen 5
Joew0815 Methoden Objekt als Methoden-Parameter - Kein call-by-reference? Java Basics - Anfänger-Themen 12
J Warum kein new ? Java Basics - Anfänger-Themen 10
D Kein Zugriff auf JFrame Java Basics - Anfänger-Themen 2
C Klassen Wieso kein infiniter Regress? Java Basics - Anfänger-Themen 4
N Kein Zugriff auf Ordner -> NullPointerException Java Basics - Anfänger-Themen 2
I kein zugriff auf jList oder Textfield Java Basics - Anfänger-Themen 2
X Fehler beim Öffnen von Jar Datei: "kein Hauptmanifestattribut" Java Basics - Anfänger-Themen 5
D Classpath Kein Zugriff Java Basics - Anfänger-Themen 9
Xendarii Quicksort gibt kein Ergebnis aus Java Basics - Anfänger-Themen 13
K Warum ist ein Singleton kein Best Practise? Java Basics - Anfänger-Themen 3
J ResultSet.getStrin - doch kein String? oder wo liegt das Problem? Java Basics - Anfänger-Themen 3
Kenan89 JScrollPane, aber kein Scrollbalken Java Basics - Anfänger-Themen 4
G Generics kein Zugriff auf getter eines Objekts Java Basics - Anfänger-Themen 4
M In Netbeans kein Problem, im Terminal schon Java Basics - Anfänger-Themen 3
E Kein Rechtzeitiger Abbruch bei Rekursiverfunktion Java Basics - Anfänger-Themen 8
C Stringeingabe: kein Satz wegen Leerzeichen möglich Java Basics - Anfänger-Themen 3
I Warum kein this in Methode Java Basics - Anfänger-Themen 17
V Kein neuer Thread trotz Runnable Java Basics - Anfänger-Themen 4
H Erste Schritte Kein Zugriff auf einen button der ein Ereignis ausgelöst hat Java Basics - Anfänger-Themen 2
M Kann kein Objekt (AudioFile in diesem Beispiel) für ein leeren String erzeugen Java Basics - Anfänger-Themen 3
K SWT Fehler obwohl kein SWT benutzt wird Java Basics - Anfänger-Themen 4
L String: Objekt und doch kein Objekt? Java Basics - Anfänger-Themen 5
J Warum kein return wert? Java Basics - Anfänger-Themen 10
S kein sound? Java Basics - Anfänger-Themen 3
T JTextPane - setText kein kein neuladen der Bilder? Java Basics - Anfänger-Themen 8
L Kein System.out Java Basics - Anfänger-Themen 14
T Warum öffnet sich kein Fenster? Java Basics - Anfänger-Themen 3
c_sidi90 jTextarea kein Zeilenumbruch erlauben Java Basics - Anfänger-Themen 4
M Kein Sound in der .jar, davor schon Java Basics - Anfänger-Themen 6
alderwaran closed source jar, kein javadoc. was macht methode x eigentlich? ( oracle forms pjc beans ) Java Basics - Anfänger-Themen 2
K Arrays - Komma zu viel, kein Problem? Java Basics - Anfänger-Themen 3
G erweiterte for schleife kein new? Java Basics - Anfänger-Themen 4
I Kein Zugriff auf erstelltes Objekt aus anderer Methode Java Basics - Anfänger-Themen 6
C warum liefert equals kein TRUE Java Basics - Anfänger-Themen 12
T meinThread.wait(); wirft immer Exeption & hat kein Effekt Java Basics - Anfänger-Themen 15
Houly kein bild im JFrame bei Mp3 Wiedergabe Java Basics - Anfänger-Themen 5
T Jar-Archive kein System.out.println()?? Java Basics - Anfänger-Themen 5
W "Kein korrekter Schleifendurchlauf" Java Basics - Anfänger-Themen 3
S Kein Event bei Click auf JComboBox Java Basics - Anfänger-Themen 4
radiac Wieso bekomme ich kein Bild drauf??? Java Basics - Anfänger-Themen 13
W peinliches Problem - Kein Konstruktor? Java Basics - Anfänger-Themen 10
Spot84 kein interface iEditorInput Java Basics - Anfänger-Themen 2
Kasoki Compilen von Java Scripts (Nein kein JavaScript xD) Java Basics - Anfänger-Themen 13
G Logger mag kein Linux Java Basics - Anfänger-Themen 3
M erzugt kein objekt Java Basics - Anfänger-Themen 18
L Kein Zugriff auf Listen in einem Array Java Basics - Anfänger-Themen 2
G GUI von wiederholender Methode füttern; kein Programmende Java Basics - Anfänger-Themen 2
K kein Sound beim Öffnen der jar-Datei, in Eclipse schon Java Basics - Anfänger-Themen 2
P Eclipse startet kein Applet Java Basics - Anfänger-Themen 6
G Kein EJB-Package vorhanden Java Basics - Anfänger-Themen 2
A kein zugriff auf variable trotz public? Java Basics - Anfänger-Themen 3
F Seltsame Zeichen und kein Zeichenumbruch mit Filewriter Java Basics - Anfänger-Themen 4
S Kein Zugriff auf Files in Jar-Datei Java Basics - Anfänger-Themen 4
C Kann kein Java Programm starten Java Basics - Anfänger-Themen 8
G Auf Bildschirm (kein Fenster) schreiben Java Basics - Anfänger-Themen 2
G kein Zugriff auf eine Klasse in einem Unterordner Java Basics - Anfänger-Themen 11
M Prüfen, ob Tag im Jahr kein Samstag/Sonntag ist Java Basics - Anfänger-Themen 7
G kein text im dialogfeld Java Basics - Anfänger-Themen 3
K JavaKara Programm - erfolgreich compiliert jedoch kein Start Java Basics - Anfänger-Themen 12
M SystemTray zeigt kein Icon an Java Basics - Anfänger-Themen 11
L Warum öffnet sich aus einer .jar-Datei kein Dosfenster? Java Basics - Anfänger-Themen 5
G Listen, über Listen. und doch kein Überblick Java Basics - Anfänger-Themen 8
I translate.java - kein sichtbarer fehler im quelltext Java Basics - Anfänger-Themen 18
S Kein wirklicher Ansatz Java Basics - Anfänger-Themen 6
F Kann kein Programm über die Konsole ausführen Java Basics - Anfänger-Themen 5
G Habe bei String kein split()? Java Basics - Anfänger-Themen 7
G Kein Runden Java Basics - Anfänger-Themen 3
G readln, aber kein writeln :( Java Basics - Anfänger-Themen 12
G Kein main Type? Java Basics - Anfänger-Themen 3
R Klasse nicht sichtbar(kein private-Fehler) Java Basics - Anfänger-Themen 2
H kein lösungs ansatz mit java Java Basics - Anfänger-Themen 4
S Layout Probleme (Kein Adden möglich) Java Basics - Anfänger-Themen 18
M JSP: Cookies setzen ist kein Problem, aber wieder ändern ??? Java Basics - Anfänger-Themen 3
W mehrere Strings vergleichen, (kein equal-Problem) Java Basics - Anfänger-Themen 3
G Warum ist die Rückgabe kein Integer? Java Basics - Anfänger-Themen 5
V paint()-methode manuell aufrufen? kein autostart erwuenscht Java Basics - Anfänger-Themen 3
M Nach Serializierung kein Zugriff auf Variabeln moeglich Java Basics - Anfänger-Themen 7
A Ich will kein DOS-Fenster Java Basics - Anfänger-Themen 3
M Warum kann man dem Thread kein notify senden? Java Basics - Anfänger-Themen 15
N Fehler ArrayIndexOutOfBounds und kein Plan was zu tun ist Java Basics - Anfänger-Themen 4
P Kann kein Array von Properties erstellen. Java Basics - Anfänger-Themen 5
A table. kein header. kein scrollpane. Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Anzeige

Neue Themen


Oben