Fünf Gewinnt

PeteDawinsky

Mitglied
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:
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;
        }
    }
}
 
Zuletzt bearbeitet von einem Moderator:
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:

Java:
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;
        }
    }
}
 
Da ich den eigentlichen Post nicht mehr bearbeiten kann, ist der Code hier nochmal abgebildet:

Java:
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;
        }
    }
}

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

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;
        }
    }
}
 
sorry, das war der vorherige code. das hier ist der richtige
Der ist aber auch nicht besser, z. B.
Java:
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
Java:
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.
 

Zurück
Oben