VierGewinnt Überprüfung

seemsbroken

Mitglied
Hallo ihr Lieben!
Ich arbeite momentan an einem kleinen Vier Gewinnt, was auch soweit funktioniert, ausser das es nicht stoppt wenn 4 in einer Linie/Spalte/Diagonalen sind.

Ich verzweifele grade buchstäblich & hoffe dass ihr mir irgendwie helfen könnt was hier dran falsch ist.

Java:
public class Spielbrett 
{
    Coin[][] spielbrett;; 
     
     public Spielbrett ()
    {
       spielbrett = new Coin[7][6];     
    }
    public boolean istvoll()        
    {
        for (int i = 0; i < spielbrett.length; i++ )
        {
            if (spielbrett[i][0] == null) 
            { 
                return false; 
            }
        }
        return true;
    }
    public void spielbrettausgabe()   
    {                               
        System.out.println();       
        for(int i = 0; i<=5; i++)    
        {
            System.out.print("| ");
            for(int j = 0; j<=6; j++)
            {
               Coin coin = spielbrett[j][i];
                    if(coin == null)
                        System.out.print("_");
                    else
                        coin.coinausgabe();
                    System.out.print(" | ");
            }
            System.out.println();
        }
    System.out.println("-----------------------------");
    System.out.println("  1   2   3   4   5   6   7");
    System.out.println();
    }
     
     
    public boolean coinsetzenfeld(int spalte, Spieler aktuellerspieler)
    { 
        System.out.println(spalte);
        for(int zeile=5;zeile>=0;zeile--)
        {
            if(spielbrett[spalte-1][zeile]==null)
            {
                Coin coin = new Coin(aktuellerspieler);
                spielbrett[spalte-1][zeile]=coin;
                return true;
                     
            }
        }
        return false;
    }   
     
    public Spieler gewinner(int spalte) 
    {                                   
        int zeile = 0;                  
        while (spielbrett[spalte-1][zeile] == null)
        { 
            zeile++; 
        } 
        Coin coin = spielbrett [spalte-1] [zeile];     
        return coin.getspieler();
    }           
     
    public boolean gewinnzug () 
                                 
                                 
    {
        if (gewinnzeile (spielbrett)) return true;
        if (gewinnspalte (spielbrett)) return true;
         
                                 
        return false;
    }
     
    public boolean gewinnzeile(Coin[][] s)  
    {                                       
    Coin[][] spielbrett = new Coin[7][6];
        spielbrett= s;
        for (int zeile=0; zeile<6; zeile++)      
            {int summe=1;
            for (int spalte=0; spalte<4; spalte++)
                {
                if((spielbrett[zeile][spalte])==(spielbrett[zeile][spalte+1])   
                && spielbrett[zeile][spalte] != null                   
                && spielbrett[zeile][spalte+1] != null)                 
                    {summe=summe+1;                                 
                    if(summe>=4)
                    {return true;}}
                    else {summe=1;}
                     
                 
                }   
            }
            return false;
                     
    }
     
 
            static void gewinnzeile(char[][] spielbrett, int spalte, int zeile, char zeichen) {
                // nach links
                int go = zeile - 1; // mit dem Punkt links neber dem gesetzten beginne
                                    // ich
                int i = 1; // der gesetzte Punkt = 1 Treffer
                while (go >= 0) {
                    if (spielbrett[spalte][go] != zeichen)
                        break;
                    go--;
                    i++;
                }
                 
    }
    private boolean gewinnspalte(Coin[][] s)                
    {   
    Coin[][] spielbrett = new Coin[7][6];   
    spielbrett=s;
    for (int spalte=0; spalte<4;spalte++)        
        {int summe=1;
            for (int zeile=0; zeile<6; zeile++)
            {
            if((spielbrett[zeile][spalte])==(spielbrett[zeile+1][spalte])   
                    && spielbrett[zeile][spalte] != null                       
            && spielbrett[zeile+1][spalte] != null)                     
            {summe=summe+1;                                     
            if(summe==4)
                {return true;}
            System.out.println( "gewinnt in der Spalte!");
            }
                else {summe=1;}
                     
            }
        }               
    return false;
    }

danke schonmal im Voraus!



}
 

seemsbroken

Mitglied
Zur Sicherheit alle Klassen mal :

Java:
public class VierGewinntstart {
	 public static void main(String [] args)
	 {
         Spiel neuesspiel = new Spiel(); 
           
         neuesspiel.start();     
                    
           
                           
} 

}

Java:
import java.util.Scanner;
public class Spieler 
{
     
     
    public String name;
    public int nr;
    public Spieler (int nummer) 
    {
          Scanner s=new Scanner(System.in);
     
            System.out.println("Spieler " + nummer + ", bitte Namen eingeben");
            name=s.nextLine();
            this.nr = nummer;
    }
 
    public String getname() 
    {
        return this.name;
    }
    public int getspielernr() 
    {
        return this.nr;
    }
 
    public int coinsetzenspieler() 
    {
     
        int spalte;
        System.out.println(this.getname()+", geben Sie bitte die Spaltennummer ein:");
        spalte=Tools.intEingabe();
        return spalte;
    }
 
}

Java:
public class Coin
{
 
    public int nr;          
    public Spieler spieler;
    public String name;
                                 
 
 
    public Coin (Spieler aktuellerspieler)  
                                             
    {
        nr = aktuellerspieler.getspielernr(); 
        spieler = aktuellerspieler; 
    }
 
    public int getcoinnr() 
    {
        return this.nr;
    }
 
    public Spieler getspieler() 
    {
        return this.spieler;
    }
    public void coinausgabe()   
                                 
    {
        if(this.getcoinnr() == 1)
            System.out.print("Z");
        else
            System.out.print("L");
    }
}
Java:
import java.util.Scanner;



public class Spiel 
{
    public Spielbrett spielbrett;   
    public Spieler spieler1;        
    public Spieler spieler2;        
    public Spieler aktuellerspieler;
 
 
    public Spiel() 
                    
    {
        spielbrett = new Spielbrett(); 
        spieler1 = new Spieler(1);  
        spieler2 = new Spieler(2);  
        aktuellerspieler = spieler2;
    }
 

 
 
    public void start()  
    {	
        spielausgabe();  
        int spalte;      
        do
        {
            spielerwechsel();
            spalte = aktuellerspieler.coinsetzenspieler();  
                                                             
            spielbrett.coinsetzenfeld(spalte, aktuellerspieler);
                                                                        spielausgabe();                                     
        }while(!gewinncheck(spalte));   
    }
     
    private void spielerwechsel() 
    {
        if (aktuellerspieler == spieler1) 
            aktuellerspieler = spieler2;      
        else
            aktuellerspieler = spieler1;
    }   
    private boolean gewinncheck(int spalte)        
    {
        if(spielbrett.istvoll())  
                                 
        {
            System.out.println("Das Spielbrett ist voll! Unentschieden!");
            return true;    
        }
        if (spielbrett.gewinnzug()) 
        {                           
         
            Spieler spieler = spielbrett.gewinner(spalte); 
                                                           
                                                            
            System.out.println("Der Spieler "+ spieler.getname()  +" hat gewonnen");
            return true;
        }
        return false;
    }
    public void spielausgabe()      
    {
        spielbrett.spielbrettausgabe(); 
    }
}
Java:
import java.util.Scanner;
 
public class Tools {
    static int intEingabe() 
    { 
        Scanner scanner = new Scanner(System.in); 
        return scanner.nextInt(); } 
    }
 

Tiding

Aktives Mitglied
Ich kann dir aber auch den Tipp geben, dass du in deinen Überprüfungsschleifen niemals dazu kommst, das der Summe 1 addiert wird!

Sprich der "Coin" den du da überprüfen willst, ist immer null.
 
Zuletzt bearbeitet:

Tiding

Aktives Mitglied
Jaja, natürlich, meine Vorgehendsweise wäre auch nur geringfügig verschieden zu deiner!

Aber: gewinnzeile, du überprüfst die Zeilen 0-5 hat es nicht 7 Zeilen?
und die Spalten 0-4, für 0-5 würds ja noch Sinn machen, da du immer die Nachfolger überprüfst, aber 0-4? Evtl. überseh ich ja auch was ;)

Selbes bei den Spalten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Bei VierGewinnt fragen ob man gegen CPU oder Menschen spielen will. Java Basics - Anfänger-Themen 7
A Bei VierGewinnt Eingabe per Buchstabe (a,b,c...) Java Basics - Anfänger-Themen 2
A Bei VierGewinnt vorher fragen, ob man gegen den Computer spielen möchte oder gegeneinander. Java Basics - Anfänger-Themen 1
A Bei VierGewinnt fragen, ob man gegen den Computer spielen möchte oder gegeneinander Java Basics - Anfänger-Themen 1
Z Kein überprüfen des gesamten Arrays möglich.(Viergewinnt Spiel) Java Basics - Anfänger-Themen 6
K Viergewinnt - boolean Problem Java Basics - Anfänger-Themen 2
B Programmierprojekt VierGewinnt Java Basics - Anfänger-Themen 3
B Überprüfung dass Zahl nur aus 0,1 besteht Java Basics - Anfänger-Themen 2
A Überprüfung für unentschieden in TicTacToe Java Basics - Anfänger-Themen 10
A Überprüfung in TicTacToe Java Basics - Anfänger-Themen 5
C Problem mit If Else If und Überprüfung eines Counters Java Basics - Anfänger-Themen 3
S Überprüfung rechtwinkliges Dreieck Java Basics - Anfänger-Themen 4
I Null-Überprüfung durch Lambda-Expressions abkürzen Java Basics - Anfänger-Themen 8
T Algorithmus zur Überprüfung eines binären Suchbaums Java Basics - Anfänger-Themen 2
V Personalnummer Überprüfung Java Basics - Anfänger-Themen 2
T Überprüfung einer Aufgabe zu verketteten Listen Java Basics - Anfänger-Themen 5
O Überprüfung auf Existenz einer Methode Java Basics - Anfänger-Themen 6
P Fallunterscheidung mit Überprüfung (enum) Java Basics - Anfänger-Themen 11
A null-Überprüfung Java Basics - Anfänger-Themen 24
J While-Überprüfung wird nicht wahr Java Basics - Anfänger-Themen 2
C Datentypen Methode zur Überprüfung, ob ein Rechenergbnis Int ist Java Basics - Anfänger-Themen 4
C Mit if Überprüfung von drei Werten durchführen Java Basics - Anfänger-Themen 6
B Problem bei Überprüfung des Inhalts eines Arrays Java Basics - Anfänger-Themen 25
S Überprüfung Benutzereingabe Java Basics - Anfänger-Themen 5
J Überprüfung, ob Array aufsteigend sortiert Java Basics - Anfänger-Themen 6
U Frage zur Überprüfung von einer Zahl Java Basics - Anfänger-Themen 9
C Überprüfung eines Arrays auf einen speziellen Wert Java Basics - Anfänger-Themen 5
D String-Überprüfung Java Basics - Anfänger-Themen 4
Q Überprüfung ob JTextField einen Text enthält Java Basics - Anfänger-Themen 2
B Überprüfung ob Methode von geerbter Klasse aufgerufen wird Java Basics - Anfänger-Themen 2
C Überprüfung ob Eingabe Text/ASCII Java Basics - Anfänger-Themen 24
J Überprüfung ersten Zeichens Java Basics - Anfänger-Themen 7
D Überprüfung: Double oder Integer Java Basics - Anfänger-Themen 4
N Überprüfung der ZufallsZahl? Java Basics - Anfänger-Themen 2
R Eingabe eines Chars mit Überprüfung Java Basics - Anfänger-Themen 3
O Überprüfung von Eingaben auf Sinnhaftigkeit Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben