# Programmierprojekt VierGewinnt



## babuschka (28. Nov 2010)

Hallo Leute,

Ich würde gerne ein Vier Gewinnt Spiel für mein Java Projekt programmieren und komme über den Ansatz nicht hinaus, da meine Kenntnisse sich auf ein Minimum beschränken.
Ich habe mir gedacht 4 Klassen zu erstellen: Spielfeld, Spieler, Spielsteine und GUI.

Habe auch schon im Internet gegoogelt, blicke aber bei den Lösungen nicht wirklich durch.
Hat jemand ne Idee wie man das als Anfänger möglichst einfach hinbekommt?

Ich würde mich über ein paar Lösungsansätze freuen 

Vielen Dank schomal


----------



## Final_Striker (28. Nov 2010)

Genau so wie du angefangen hast. Die Klassen jetzt mit Attributen und Methoden vervollständigen. ;-)


----------



## babuschka (28. Nov 2010)

Also ich habe schon folgendes:

Das sind die Buttons auf die man drücken soll damit die Steine in die jeweilige Reihe fallen(also drückt man Button eins fällt der Stein in Reihe eins.


```
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.JOptionPane;

public class Buttons extends JApplet
{

JButton eins, zwei, drei, vier, fünf, sechs, sieben;

public void init() {

eins = new JButton("1");
zwei = new JButton("2");
drei = new JButton("3");
vier = new JButton("4");
fünf = new JButton("5");
sechs = new JButton("6");
sieben = new JButton("7");

eins.addActionListener(new EinsAction());
zwei.addActionListener(new ZweiAction());
drei.addActionListener(new DreiAction());
vier.addActionListener(new VierAction());
fünf.addActionListener(new FünfAction());
sechs.addActionListener(new SechsAction());
sieben.addActionListener(new SiebenAction());

setLayout(null);
eins.setBounds(25,25,25,25);
zwei.setBounds(55,25,25,25);
drei.setBounds(85,25,25,25);
vier.setBounds(115,25,25,25);
fünf.setBounds(145,25,25,25);
sechs.setBounds(175,25,25,25);
sieben.setBounds(205,25,25,25);

add(eins);
add(zwei);
add(drei);
add(vier);
add(fünf);
add(sechs);
add(sieben);
}

class EinsAction implements ActionListener {  
        
        @Override
        public void actionPerformed(ActionEvent e) {
 

    }
}

class ZweiAction implements ActionListener {  
        
        @Override
        public void actionPerformed(ActionEvent e) {
           

    }
}

class DreiAction implements ActionListener {  
        
        @Override
        public void actionPerformed(ActionEvent e) {
           

    }
}

class VierAction implements ActionListener {  
        
        @Override
        public void actionPerformed(ActionEvent e) {
            
    }
}

class FünfAction implements ActionListener {  
        
        @Override
        public void actionPerformed(ActionEvent e) {
           

    }
}

class SechsAction implements ActionListener {  
        
        @Override
        public void actionPerformed(ActionEvent e) {
            

    }
}

class SiebenAction implements ActionListener {  
        
        @Override
        public void actionPerformed(ActionEvent e) {
            

    }
}

}
```

Die Aktionen sind noch leer, da ich nicht weiß wie die Methode aussieht, die die Spielsteine in die jeweilige Reihe fallen lässt.
Jemand eine Idee? 
Das Spielfeld habe ich auch schon, ist zwar nicht das schönste aber für meine Zwecke ausreichend.


```
import java.awt.*;
import javax.swing.*;




public class Spielfeld extends JApplet
{

    
    public void init()
    { 
      
    }

  
    public void paint(Graphics g)
    {
        g.drawString("VierGewinnt", 20, 20);
  


 for (int i = 1; i <= 7; i++)
{
  
       
        for (int k = 1; k <= 7; k++)
      
        g.drawRect(40*i,40*k,40,40);
        
      

    }
    
    for (int k = 1; k <= 7 ;k=k+2)
          for (int i = 1; i <= 7; i=i+2)
          { 
              
              
      g.setColor(new Color(0,0,0));
      g.fillRect(i*40,40*k,40,40);
    }
    for (int o = 2; o <= 7 ;o=o+2)
          for (int l = 2; l <= 7; l=l+2)
          { 
              if (l%2 == 0)
              {
      g.setColor(new Color(0,0,0));
      g.fillRect(l*40,40*o,40,40);
    }
    
}
   
    
}
 }
```


----------



## babuschka (28. Nov 2010)

Habe jetzt eine Lösung hier im Forum gefunden


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Desktop;
 
public class VierGewinnt extends JFrame {
    // Anfang Attribute
 
    // Anfang Variablen
    private JLabel jLabel1 = new JLabel();
    private JButton Reset = 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);
        Reset.setBounds(56, 392, 131, 33);
        Reset.setText("Neues Spiel");
        Reset.addActionListener(new ActionListener() {
 
            public void actionPerformed(ActionEvent evt) {
                reset();
            }
        });
        cp.add(Reset);
        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
   [COLOR="Red"] public void reset() {
        
    }[/COLOR]
 
    // 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;
        }
    }
}
```

Ich würde noch gerne eine reset Methode hinzufügen um das Spiel neu zu starten, habe auch schon den Button erstellt, brauche jetzt nur noch den Code für die Methode.
Außerdem wäre es sehr nett wenn jemand den Code mal für einen Anfänger erklären könnte.


----------

