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:

PeteDawinsky

Mitglied
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;
        }
    }
}
 

PeteDawinsky

Mitglied
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;
        }
    }
}
 

mihe7

Top Contributor
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.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C fünf oder sechs player states? Spiele- und Multimedia-Programmierung 7
I Vier gewinnt programmieren, Klick-Reihenfolge Spiele- und Multimedia-Programmierung 2
M Hilfe bei vier gewinnt Spiele- und Multimedia-Programmierung 4
C Vier Gewinnt Spiel Programmiertipp Spiele- und Multimedia-Programmierung 11
C Vier Gewinnt Problem mit Ordnerstruktur Spiele- und Multimedia-Programmierung 2
S 4 Gewinnt Spiele- und Multimedia-Programmierung 1
F 4 Gewinnt - Code wird ignoriert Spiele- und Multimedia-Programmierung 7
S Problem mit 4 gewinnt(MinMax Algorithmus) Spiele- und Multimedia-Programmierung 2
C Vier Gewinnt Spiele- und Multimedia-Programmierung 7
M Eine Art "Vier Gewinnt" Spiele- und Multimedia-Programmierung 5
T Vier gewinnt programmieren Spiele- und Multimedia-Programmierung 9
G 4 gewinnt - Kritik/Verbesserungsvorschläge/etc. Spiele- und Multimedia-Programmierung 3
C 4 gewinnt KI Spieler gegen Computer Spiele- und Multimedia-Programmierung 1
T vier gewinnt programmieren - aber wie Spiele- und Multimedia-Programmierung 19
H Tic Tac Toe / 3 Gewinnt OHNE Applet Spiele- und Multimedia-Programmierung 9
A Vier-Gewinnt-Problem Spiele- und Multimedia-Programmierung 11
Y Applet für "Vier Gewinnt": Welche Klassen verwende Spiele- und Multimedia-Programmierung 10
D 4 gewinnt Projekt Spiele- und Multimedia-Programmierung 2
B 4 Gewinnt Problem Spiele- und Multimedia-Programmierung 5
N 4 Gewinnt fertig (Kritik, Fragen etc. erwünscht) Spiele- und Multimedia-Programmierung 29
A 4 gewinnt Spiele- und Multimedia-Programmierung 4
S Welche Klassen für ein 4 Gewinnt? Spiele- und Multimedia-Programmierung 6
C Vier gewinnt 3D Spiele- und Multimedia-Programmierung 16
R Vier gewinnt: Bitte testen Spiele- und Multimedia-Programmierung 25

Ähnliche Java Themen


Oben