# Fünf Gewinnt



## PeteDawinsky (19. Jun 2019)

Hallo,

als Anfänger wollte ich mir vornehmen ein Fünf Gewinnt Spiel zu programmieren.
Ich habe das Feld nun erstellt (10 x 10), sowie dass man bei 5 in einer Reihe gewinnt und dass  Spieler 1 und Spieler 2 jeweils abwechselnd am Zug sind.

Soweit so gut, das Problem hiermit ist jedoch, dass das Programm die 5 in einer Reihe nicht registriert, wenn es in der unteren Hälfte des Spielfeldes geschieht.
In der oberen Hälfte ( d.h. 5x10), funktioniert alles einwandfrei.

Nun weiß ich jedoch nicht mehr weiter, da  keine Syntaxfehler enstanden sind und es völlig funktionstuechtig sein muesste.

_Ü_ber jegliche Hilfe wäre ich sehr erfreut und dankbar.


Konkrete Hinweise auf Fehler wären sehr hilfreich

Java:

```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.URI;
import java.awt.Desktop;

public class FünfGewinnt extends JFrame {
    // Anfang Attribute

    // Anfang Variablen
    private JLabel jLabel1 = new JLabel();
    private JButton[][] buttons = new JButton[10][10];
    int[][] wert = new int[10][10];
    // Ende Variablen

    // Ende Attribute
    public FünfGewinnt(String title) {
        // Frame-Initialisierung
        super(title);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        int frameWidth = 1000;
        int frameHeight = 1000;
        setSize(frameWidth, frameHeight); 
        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
        int x = (d.width - getSize().width / 2) ;
        int y = (d.height - getSize().height / 2) ;
        setLocation(x, y);
        Container cp = getContentPane();
        cp.setLayout(null);
        // Anfang Komponenten

        jLabel1.setBounds(420, 16, 133, 32);
        jLabel1.setText("Fünf gewinnt");
        jLabel1.setFont(new Font("Arial", Font.BOLD, 19));
        cp.add(jLabel1);
        
        //Spielfeld 
        for (int xk = 0; xk < 10; xk++) {
            for (int yk = 0; yk < 10; yk++) {
                buttons[xk][yk] = new JButton("");
                buttons[xk][yk].setBounds(128 + 68 * xk, 64 + 74 * yk, 67, 73);
                buttons[xk][yk].addActionListener(new ActionListener() {

                    public void actionPerformed(ActionEvent evt) {
                        buttonClicked(evt);
                    }
                });
                cp.add(buttons[xk][yk]);
            }
        }


        setResizable(true);
        setVisible(true);
    }
    public static void main(String[] args) {
        new FünfGewinnt("Fünf gewinnt");
    }
    int total = 0;

    public void buttonClicked(ActionEvent evt) {
        JButton button = (JButton) evt.getSource();
        button.setText(total % 2 == 0 ? "X" : "O");
        button.setEnabled(false);

        for (int xk = 0; xk < 10; xk++) {
            for (int yk = 0; yk < 10; yk++) {
                if (buttons[xk][yk] == button) {
                    wert[xk][yk] = 1 + total % 2;
                }
            }
        }
        winnerTest(1 + total % 2);
        total++;
    }
    //Test auf 5 in einer Reihe
    public void winnerTest(int value) {
        boolean winner = false;
        for(int i = 0; i < 10; i++) {
            if(wert[i][0] == value && wert[i][1] == value && wert[i][2] == value && wert[i][3] == value && wert[i][4] == value) {
                winner = true;
            }
            if(wert[0][i] == value && wert[1][i] == value && wert[2][i] == value && wert[3][i]  == value && wert[4][i] == value) {
                winner = true;
            }
        }
       if(wert[0][0] == value && wert[1][1] == value && wert[2][2] == value && wert[3][3]  == value && wert[4][4] == value) {
           winner = true;
       }
       if(wert[0][4] == value && wert[1][3] == value && wert[2][2] == value && wert[3][1] == value && wert[4][0]  == value) {
           winner = true;
       }

        if (winner) {
           JOptionPane.showMessageDialog(this, "Spieler" + value + " hat gewonnen!");
            for (int xk = 0; xk < 10; xk++) {
                for (int yk = 0; yk < 10; yk++) {
                    buttons[xk][yk].setText("");
                    buttons[xk][yk].setEnabled(true);
                    wert[xk][yk] = 0;
                                    }
            }
            total = 0;
        }
    }
}
```


----------



## mihe7 (19. Jun 2019)

PeteDawinsky hat gesagt.:


> Soweit so gut, das Problem hiermit ist jedoch, dass das Programm die 5 in einer Reihe nicht registriert, wenn es in der unteren Hälfte des Spielfeldes geschieht.


Naja, Du prüfst ja auch nur die Werte mit den Indizes 0 bis 4 ab...


----------



## Xyz1 (19. Jun 2019)

Wieso hast Du alles unterkringelt?


----------



## PeteDawinsky (19. Jun 2019)

mihe7 hat gesagt.:


> Naja, Du prüfst ja auch nur die Werte mit den Indizes 0 bis 4 ab...


Fängt  Java nicht an bei 0 zu zählen? Also wuerde man dann nicht auf 5 kommen?


----------



## PeteDawinsky (19. Jun 2019)

Tobias-nrw hat gesagt.:


> Wieso hast Du alles unterkringelt?


Ich habe das Programm in BlueJ verfasst, tut mir leid falls das irritierend wirkt.


----------



## Xyz1 (19. Jun 2019)

PeteDawinsky hat gesagt.:


> Ich habe das Programm in BlueJ verfasst, tut mir leid falls das irritierend wirkt.


Es wirkt nicht irritierend vielmehr stört es den Lesefluss. Und was hat das unterkringeln mit BlueJ zu tun? Poste Deinen Code erneut...


----------



## PeteDawinsky (19. Jun 2019)

Tobias-nrw hat gesagt.:


> Es wirkt nicht irritierend vielmehr stört es den Lesefluss. Und was hat das unterkringeln mit BlueJ zu tun? Poste Deinen Code erneut...



Da ich den eigentlichen Post nicht mehr bearbeiten kann, ist der Code hier nochmal abgebildet:


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.URI;
import java.awt.Desktop;

public class VierGewinnt extends JFrame {
    // Anfang Attribute

    // Anfang Variablen
    private JLabel jLabel1 = new JLabel();
    private JButton Spielanleitung = new JButton();
    private JButton[][] buttons = new JButton[4][4];
    int[][] wert = new int[4][4];
    // Ende Variablen

    // Ende Attribute
    public VierGewinnt(String title) {
        // Frame-Initialisierung
        super(title);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        int frameWidth = 540;
        int frameHeight = 505;
        setSize(frameWidth, frameHeight);
        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
        int x = (d.width - getSize().width) / 2;
        int y = (d.height - getSize().height) / 2;
        setLocation(x, y);
        Container cp = getContentPane();
        cp.setLayout(null);
        // Anfang Komponenten

        jLabel1.setBounds(216, 16, 133, 32);
        jLabel1.setText("Vier gewinnt");
        jLabel1.setFont(new Font("Arial", Font.BOLD, 18));
        cp.add(jLabel1);
        Spielanleitung.setBounds(56, 392, 131, 33);
        Spielanleitung.setText("Spielanleitung");
        Spielanleitung.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent evt) {
                spielanleitung();
            }
        });
        cp.add(Spielanleitung);
        for (int xk = 0; xk < 4; xk++) {
            for (int yk = 0; yk < 4; yk++) {
                buttons[xk][yk] = new JButton("");
                buttons[xk][yk].setBounds(128 + 68 * xk, 64 + 74 * yk, 67, 73);
                buttons[xk][yk].addActionListener(new ActionListener() {

                    public void actionPerformed(ActionEvent evt) {
                        buttonClicked(evt);
                    }
                });
                cp.add(buttons[xk][yk]);
            }
        }


        setResizable(false);
        setVisible(true);
    }

    // Anfang Ereignisprozeduren
    // Anfang Methoden
    public void spielanleitung() {
        // TODO hier Quelltext einfügen

        //Desktopobjekt holen
        Desktop desktop = Desktop.getDesktop();

        //Adresse mit Standardbrowser anzeigen
        URI uri;
        try {
            uri = new URI("anleitungl.html");
            desktop.browse(uri);
        } catch (Exception oError) {
            //Hier Fehler abfangen
        }
    }

    // Ende Methoden
    public static void main(String[] args) {
        new VierGewinnt("Vier gewinnt");
    }
    int total = 0;

    public void buttonClicked(ActionEvent evt) {
        JButton button = (JButton) evt.getSource();
        button.setText(total % 2 == 0 ? "X" : "O");
        button.setEnabled(false);

        for (int xk = 0; xk < 4; xk++) {
            for (int yk = 0; yk < 4; yk++) {
                if (buttons[xk][yk] == button) {
                    wert[xk][yk] = 1 + total % 2;
                }
            }
        }
        winnerTest(1 + total % 2);
        total++;
    }

    public void winnerTest(int value) {
        boolean winner = false;
        for(int i = 0; i < 4; i++) {
            if(wert[i][0] == value && wert[i][1] == value && wert[i][2] == value && wert[i][3] == value) {
                winner = true;
            }
            if(wert[0][i] == value && wert[1][i] == value && wert[2][i] == value && wert[3][i] == value) {
                winner = true;
            }
        }
       if(wert[0][0] == value && wert[1][1] == value && wert[2][2] == value && wert[3][3] == value) {
           winner = true;
       }
       if(wert[0][3] == value && wert[1][2] == value && wert[2][1] == value && wert[3][0] == value) {
           winner = true;
       }

        if (winner) {
           JOptionPane.showMessageDialog(this, "Spieler" + value + " hat gewonnen!");
            for (int xk = 0; xk < 5; xk++) {
                for (int yk = 0; yk < 5; yk++) {
                    buttons[xk][yk].setText("");
                    buttons[xk][yk].setEnabled(true);
                    wert[xk][yk] = 0;
                }
            }
            total = 0;
        }
    }
}
```


----------



## mihe7 (19. Jun 2019)

PeteDawinsky hat gesagt.:


> Fängt Java nicht an bei 0 zu zählen? Also wuerde man dann nicht auf 5 kommen?


Doch aber nicht auf 10.


----------



## PeteDawinsky (19. Jun 2019)

PeteDawinsky hat gesagt.:


> Da ich den eigentlichen Post nicht mehr bearbeiten kann, ist der Code hier nochmal abgebildet:
> 
> 
> ```
> ...



sorry, das war der vorherige code. das hier ist der richtige


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.URI;
import java.awt.Desktop;

public class FünfGewinnt extends JFrame {
    // Anfang Attribute

    // Anfang Variablen
    private JLabel jLabel1 = new JLabel();
    private JButton[][] buttons = new JButton[10][10];
    int[][] wert = new int[10][10];
    // Ende Variablen

    // Ende Attribute
    public FünfGewinnt(String title) {
        // Frame-Initialisierung
        super(title);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        int frameWidth = 1000;
        int frameHeight = 1000;
        setSize(frameWidth, frameHeight); 
        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
        int x = (d.width - getSize().width / 2) ;
        int y = (d.height - getSize().height / 2) ;
        setLocation(x, y);
        Container cp = getContentPane();
        cp.setLayout(null);
        // Anfang Komponenten

        jLabel1.setBounds(420, 16, 133, 32);
        jLabel1.setText("Fünf gewinnt");
        jLabel1.setFont(new Font("Arial", Font.BOLD, 19));
        cp.add(jLabel1);
        
        //Spielfeld 
        for (int xk = 0; xk < 10; xk++) {
            for (int yk = 0; yk < 10; yk++) {
                buttons[xk][yk] = new JButton("");
                buttons[xk][yk].setBounds(128 + 68 * xk, 64 + 74 * yk, 67, 73);
                buttons[xk][yk].addActionListener(new ActionListener() {

                    public void actionPerformed(ActionEvent evt) {
                        buttonClicked(evt);
                    }
                });
                cp.add(buttons[xk][yk]);
            }
        }


        setResizable(true);
        setVisible(true);
    }
    public static void main(String[] args) {
        new FünfGewinnt("Fünf gewinnt");
    }
    int total = 0;

    public void buttonClicked(ActionEvent evt) {
        JButton button = (JButton) evt.getSource();
        button.setText(total % 2 == 0 ? "X" : "O");
        button.setEnabled(false);

        for (int xk = 0; xk < 10; xk++) {
            for (int yk = 0; yk < 10; yk++) {
                if (buttons[xk][yk] == button) {
                    wert[xk][yk] = 1 + total % 2;
                }
            }
        }
        winnerTest(1 + total % 2);
        total++;
    }
    //Test auf 5 in einer Reihe
    public void winnerTest(int value) {
        boolean winner = false;
        for(int i = 0; i < 10; i++) {
            if(wert[i][0] == value && wert[i][1] == value && wert[i][2] == value && wert[i][3] == value && wert[i][4] == value) {
                winner = true;
            }
            if(wert[0][i] == value && wert[1][i] == value && wert[2][i] == value && wert[3][i]  == value && wert[4][i] == value) {
                winner = true;
            }
        }
       if(wert[0][0] == value && wert[1][1] == value && wert[2][2] == value && wert[3][3]  == value && wert[4][4] == value) {
           winner = true;
       }
       if(wert[0][4] == value && wert[1][3] == value && wert[2][2] == value && wert[3][1] == value && wert[4][0]  == value) {
           winner = true;
       }

        if (winner) {
           JOptionPane.showMessageDialog(this, "Spieler" + value + " hat gewonnen!");
            for (int xk = 0; xk < 10; xk++) {
                for (int yk = 0; yk < 10; yk++) {
                    buttons[xk][yk].setText("");
                    buttons[xk][yk].setEnabled(true);
                    wert[xk][yk] = 0;
                                    }
            }
            total = 0;
        }
    }
}
```


----------



## mihe7 (19. Jun 2019)

PeteDawinsky hat gesagt.:


> sorry, das war der vorherige code. das hier ist der richtige


Der ist aber auch nicht besser, z. B.

```
if(wert[0][i] == value && wert[1][i] == value && wert[2][i] == value && wert[3][i]  == value && wert[4][i] == value) {
```
testet ja nur die ersten 5 Spalten und

```
if(wert[i][0] == value && wert[i][1] == value && wert[i][2] == value && wert[i][3] == value && wert[i][4] == value) {
```
die ersten fünf Zeilen.


----------

