# Vier gewinnt programmieren



## Tiger (21. Jun 2010)

i,

ich muss das Spiel "Vier gewinnt" mit GUI mit Java programmieren.
Ich bin noch relativ am Anfang mit Java.

Also folgendes:

Das Layout habe ich schon gemacht=> Es sind insgesamt 16 Buttons, angeordnet als Tabelle 4 x 4 .
So jetzt habe ich einige Probleme damit, wie ich
1) Festlege wann welcher Spieler (es gibt Spieler1 und Spieler2) rankommt?
Wie kann ich das machen?
2) Die Auswertung mache, bin mir nicht sicher ob das was ich geschrieben habe richtig ist.

Könnt ihr mir bitte helfen?
Ich gebe euch den Code für das Spiel, was ich geschrieben habe bis jetzt.
Am besten wäre es, wenn ihr mir bitte den Code anschreibt, an den Stellen die falsch sind.


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

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 08.06.2010
  * @author
  */

public class Prog extends JFrame {
  // Anfang Attribute

  // Anfang Variablen
  private JLabel jLabel1 = new JLabel();
  private JButton Spielanleitung = new JButton();
  private JButton button00 = new JButton();
  private JButton button01 = new JButton();
  private JButton button02 = new JButton();
  private JButton button03 = new JButton();
  private JButton button10 = new JButton();
  private JButton button11 = new JButton();
  private JButton button12 = new JButton();
  private JButton button13 = new JButton();
  private JButton button20 = new JButton();
  private JButton button21 = new JButton();
  private JButton button22 = new JButton();
  private JButton button23 = new JButton();
  private JButton button30 = new JButton();
  private JButton button31 = new JButton();
  private JButton button32 = new JButton();
  private JButton button33 = new JButton();
  int[] [] wert = new int [4] [4];
  // Ende Variablen

  // Ende Attribute

  public Prog(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_ActionPerformed(evt);
      }
    });
    cp.add(Spielanleitung);
    button00.setBounds(128, 64, 67, 73);
    button00.setText("");


    button00.addMouseListener(new MouseAdapter() {
      public void mousepressed(MouseEvent evt) {
        button00.setText("red");;
      }
    });
    cp.add(button00);
    button01.setBounds(192, 64, 67, 73);
    button01.setText("");
    button01.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        button01_ActionPerformed(evt);
      }
    });
    cp.add(button01);
    button02.setBounds(256, 64, 67, 73);
    button02.setText("");
    button02.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        button02_ActionPerformed(evt);
      }
    });
    cp.add(button02);
    button03.setBounds(320, 64, 67, 73);
    button03.setText("");
    button03.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        button03_ActionPerformed(evt);
      }
    });
    cp.add(button03);
    button10.setBounds(128, 136, 67, 73);
    button10.setText("");
    button10.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        button10_ActionPerformed(evt);
      }
    });
    cp.add(button10);
    button11.setBounds(192, 136, 67, 73);
    button11.setText("");
    button11.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        button11_ActionPerformed(evt);
      }
    });
    cp.add(button11);
    button12.setBounds(256, 136, 67, 73);
    button12.setText("");
    button12.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        button12_ActionPerformed(evt);
      }
    });
    cp.add(button12);
    button13.setBounds(320, 136, 67, 73);
    button13.setText("");
    button13.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        button13_ActionPerformed(evt);
      }
    });
    cp.add(button13);
    button20.setBounds(128, 208, 67, 65);
    button20.setText("");
    button20.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        button20_ActionPerformed(evt);
      }
    });
    cp.add(button20);
    button21.setBounds(192, 208, 67, 65);
    button21.setText("");
    button21.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        button21_ActionPerformed(evt);
      }
    });
    cp.add(button21);
    button22.setBounds(256, 208, 67, 65);
    button22.setText("");
    button22.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        button22_ActionPerformed(evt);
      }
    });
    cp.add(button22);
    button23.setBounds(320, 208, 67, 65);
    button23.setText("");
    button23.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        button23_ActionPerformed(evt);
      }
    });
    cp.add(button23);
    button30.setBounds(128, 272, 67, 73);
    button30.setText("");
    button30.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        button30_ActionPerformed(evt);
      }
    });
    cp.add(button30);
    button31.setBounds(192, 272, 67, 73);
    button31.setText("");
    button31.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        button31_ActionPerformed(evt);
      }
    });
    cp.add(button31);
    button32.setBounds(256, 272, 67, 73);
    button32.setText("");
    button32.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        button32_ActionPerformed(evt);
      }
    });
    cp.add(button32);
    button33.setBounds(320, 272, 67, 73);
    button33.setText("");
    button33.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        button33_ActionPerformed(evt);
      }
    });
    cp.add(button33);
    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }

  // Anfang Ereignisprozeduren

  // Anfang Methoden
  public void Spielanleitung_ActionPerformed(ActionEvent evt) {
    // 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 Prog("Prog");
  }
  
  //Wann ist Spieler 1 bzw. Spieler 2 an der Reihe? //
              int Spieler1;
          int Spieler2;
          int total;
       private int Spielerwert (int Spieler1, int Spieler2);

          
          if (total%2) {
            Spieler1;
          }
          else {
            Spieler2;
          }
          
  
  
  
  public void button00_ActionPerformed(ActionEvent evt) {
  
  if (Spieler1){
                String text_spieler1 = "Spieler 1";
             button00.setText(text_spieler1);
             }
             else {
                  String text_spieler2 = "Spieler 2";
               button00.setText(text_spieler2);
             }

         }



  
  


  public void button01_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
    if (Spieler1){
                String text_spieler1 = "Spieler 1";
             button01.setText(text_spieler1);
             }
             else {
                  String text_spieler2 = "Spieler 2";
               button01.setText(text_spieler2);
             }

  }

  public void button02_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
    if (Spieler1){
                String text_spieler1 = "Spieler 1";
             button02.setText(text_spieler1);
             }
             else {
                  String text_spieler2 = "Spieler 2";
               button02.setText(text_spieler2);
             }

  }

  public void button03_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
    if (Spieler1){
                String text_spieler1 = "Spieler 1";
             button03setText(text_spieler1);
             }
             else {
                  String text_spieler2 = "Spieler 2";
               button03.setText(text_spieler2);
             }

  }

  public void button10_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
    if (Spieler1){
                String text_spieler1 = "Spieler 1";
             button10.setText(text_spieler1);
             }
             else {
                  String text_spieler2 = "Spieler 2";
               button10.setText(text_spieler2);
             }

  }

  public void button11_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
    if (Spieler1){
                String text_spieler1 = "Spieler 1";
             button11.setText(text_spieler1);
             }
             else {
                  String text_spieler2 = "Spieler 2";
               button11.setText(text_spieler2);
             }

  }

  public void button12_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
    if (Spieler1){
                String text_spieler1 = "Spieler 1";
             button12.setText(text_spieler1);
             }
             else {
                  String text_spieler2 = "Spieler 2";
               button12.setText(text_spieler2);
             }

  }

  public void button13_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
    if (Spieler1){
                String text_spieler1 = "Spieler 1";
             button13.setText(text_spieler1);
             }
             else {
                  String text_spieler2 = "Spieler 2";
               button13.setText(text_spieler2);
             }

  }

  public void button20_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
    if (Spieler1){
                String text_spieler1 = "Spieler 1";
             button20.setText(text_spieler1);
             }
             else {
                  String text_spieler2 = "Spieler 2";
               button20.setText(text_spieler2);
             }

  }

  public void button21_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
    if (Spieler1){
                String text_spieler1 = "Spieler 1";
             button21.setText(text_spieler1);
             }
             else {
                  String text_spieler2 = "Spieler 2";
               button21.setText(text_spieler2);
             }

  }

  public void button22_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
    if (Spieler1){
                String text_spieler1 = "Spieler 1";
             button22.setText(text_spieler1);
             }
             else {
                  String text_spieler2 = "Spieler 2";
               button22.setText(text_spieler2);
             }

  }

  public void button23_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
    if (Spieler1){
                String text_spieler1 = "Spieler 1";
             button23.setText(text_spieler1);
             }
             else {
                  String text_spieler2 = "Spieler 2";
               button23.setText(text_spieler2);
             }

  }

  public void button30_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
    if (Spieler1){
                String text_spieler1 = "Spieler 1";
             button30.setText(text_spieler1);
             }
             else {
                  String text_spieler2 = "Spieler 2";
               button30.setText(text_spieler2);
             }

  }

  public void button31_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
    if (Spieler1){
                String text_spieler1 = "Spieler 1";
             button31.setText(text_spieler1);
             }
             else {
                  String text_spieler2 = "Spieler 2";
               button31.setText(text_spieler2);
             }

  }

  public void button32_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
    if (Spieler1){
                String text_spieler1 = "Spieler 1";
             button32.setText(text_spieler1);
             }
             else {
                  String text_spieler2 = "Spieler 2";
               button32.setText(text_spieler2);
             }

  }

  public void button33_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
    if (Spieler1){
                String text_spieler1 = "Spieler 1";
             button33.setText(text_spieler1);
             }
             else {
                  String text_spieler2 = "Spieler 2";
               button33.setText(text_spieler2);
             }

  }
  

  
  
  
  
  
  
  
              //Nun beginnt die Auswertung der DAten und Bestimmung des Siegers//
           private  vergleich (int Spielerwert)
           {


        int zeile;
        int spalte ;
   boolean Zeile [4] = true

    ;
   boolean Spalte[4] = true;  //das viermal in eckigen Klammern, auch für Zeilen
   
   for (int iZeile = 0; iZeile < 4; iZeile++)
   {
     for (int iSpalte = 0; iSpalte < 4; iSpalte++)
     {
       if (Spielerwert! == wert [iZeile, iSpalte])
       {
         Zeile[iZeile] = false;
         Spalte[iSpalte] = false;
       }
     }
   }
       if ( Zeile[0] || Zeile[1] || Zeile[2] || Zeile[3])
          { //Spieler hat gewonnen//

          }
else {
          if ( Spalte[0] || Spalte [1] || Spalte [2] || Spalte[3])
          //Spieler hat in Spalten gewonnen//
          
          }
          else {
            //Diagonale//
            if(Spielerwert == wert[0,0] && Spielerwert == wert [1,1] &&  Spielerwert == wert [2,2] && Spielerwert == wert [3,3]
            {
              //Spieler hat mit Diagonalen nach oben gewonnen//
            }
            else {
              if(Spielerwert == wert [0,3] && Spielerwert == wert [1,2] && Spielerwert == wert [2,1] && Spielerwert == wert [3,0]
              {
                //Spieler hat mit Diagonalen nach unten gewonnen//
              }
            }
          }
           }

  // Ende Ereignisprozeduren
}
```


----------



## Landei (21. Jun 2010)

Gleiches Spiel, falsche Sprache: Vier gewinnt – Künstliche Intelligenz  eSCALAtion Blog

Aber wie das ganze verknüppert ist, kannst du da auch sehen, und die GUI ist auch Swing.

Deine Buttons solltest du wirklich in ein Array packen und in einer Schleife erzeugen...


----------



## Tiger (21. Jun 2010)

Danke ,Landei, aber kannst du vllt. bitte mir direkt bezogen auf meinen Quellcode einen Hinweis geben.

Wie kann ich denn am besten feststellen, wann Sp. 1 und Spieler 2 an der Reihe sind?
Habe ja, wie Du sehen kannst, schon angefangen, habe eine Idee mit irgendwas mit Abzählen.
Und die geraden Zahlen sidn Sp. 2 und ungerade Spieler 1.
Aber wie kann ich das am besten schreiben??

Bitte helft mir.


----------



## Landei (21. Jun 2010)

Na ja, du zählst bei jedem Zug eine Variable total hoch, und wenn total % 2 == 0 ist Spieler1 dran, ansonsten Spieler 2.

Aber dein Code ist grausig, schonmal was von DRY gehört?


----------



## Tiger (21. Jun 2010)

Landei hat gesagt.:


> Na ja, du zählst bei jedem Zug eine Variable total hoch, und wenn total % 2 == 0 ist Spieler1 dran, ansonsten Spieler 2.



Und macht man das hochzählen?


----------



## Landei (21. Jun 2010)

Na du hast eine Variable int total in deiner Klasse. Am Anfang jedes Spiels setzt du sie auf 0 und nachdem ein Spieler gezogen hat machst du einfach total++


----------



## Tiger (21. Jun 2010)

Landei, meinst du mit einer for-schleife?


----------



## Landei (21. Jun 2010)

So:


```
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 < 4; xk++) {
                for (int yk = 0; yk < 4; yk++) {
                    buttons[xk][yk].setText("");
                    buttons[xk][yk].setEnabled(true);
                    wert[xk][yk] = 0;
                }
            }
            total = 0;
        }
    }
}
```


----------



## Tiger (21. Jun 2010)

Vielen, Vielen Dank, Landei.

Ja, genau das fehlte mir 

Du hast mir wirklich sehr, sehr geholfen.

Vielen dank nochmals


----------



## Landei (21. Jun 2010)

Aber gerne :-D


----------

