Minesweeper

H

Hilfmir

Ich möchte in Java Minessweeper realisieren:
Dies ist mein Ansatz:
Ich möchte die einzelnen JButtons automatisch erzeugen lassen, aber nachher dann noch drauf zugreifen können. Dies ist mir nicht gelungen. (Habe es mit einer ArrayList ausprobiert). Wüsste da jemand etwas ?

Code:
import java.util.*;
import java.applet.Applet;
import javax.swing.*;
import java.awt.Color.*;
import java.awt.*;
import java.awt.event.*;

public class Minesweeper extends JFrame implements ActionListener
{
  private int Reihe;
  private int Spalte;
  private JPanel Sweeper;
  private JPanel Menue;
  private JButton start;
  private JLabel text;
  private int bombe=10;
  private int[] bomben= new int[10];
  private ArrayList<Object> list;
  private int Produkt;
  
    public Minesweeper(int x, int y)
    {
     list = new ArrayList<Object>();
     this.setTitle("Minesweeper");
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     this.setSize(500,600);
     this.setLayout(new BorderLayout());
     
     Sweeper=new JPanel();
     Sweeper.setLayout(new GridLayout(x,y));
     
     this.add(Sweeper, BorderLayout.CENTER);
     
     Menue=new JPanel();
     this.add(Menue, BorderLayout.NORTH);
     
     start=new JButton("Start");
     Menue.add(start);
     
     text=new JLabel();
     text.setText("Bomben: "+bombe);
     Menue.add(text);
    
     Reihe=x;
     Spalte=y;
     Produkt=Reihe*Spalte;
     erstelleZufallsZahl(Produkt);
     berechneFelder();

              
               
            

     this.setVisible(true);
    }
    
   
    public void berechneFelder()
    {
      list.add(Sweeper.add(new Feld(true)));
      
      
      }
    
    public void erstelleZufallsZahl(int Produkt)
    {
        Random zufallsgenerator = new Random();
 
        for(int i=0; i<10; i++)
        {
            int zahl = zufallsgenerator.nextInt(Produkt);
            for(int s=0; s<=9; s++)
            {
             if (zahl==bomben[i])
             {
                }
              else{ bomben[i]=zahl;} 
              
              if (bomben[i]==0)
              {
                i--;
                }
            }
           
        }
    }
    
    
     public void actionPerformed( ActionEvent e)
     {  
  
     
   
     
   
    }
    
    public void Nachbarfelderreservieren(int i)
    {}
    
   
}

public class Feld extends JButton
{
   boolean bombe=false;
   int nachbarfelder=0;
   private JButton feld;
   
   
    public Feld(boolean dieBombe)
    {
     bombe=dieBombe;
   
     
   
     
    }

    public boolean gibBombe()
    {
     return(bombe);
    }
    
    public void Nachbarfelder(int zahl)
    {
     nachbarfelder=zahl;
    }
    
}
 

Bratkartoffel

gebratene Kartoffel
Premium-User
Hallo,

bevor ich mir deinen Code anschaue bitte ich dich diesen in Codetags einzufassen, so kann man das ja nicht lesen...

Als Ansatz für dein Problem würde ich keine ArrayList<?> verwenden, sondern eher auf ein zweidimensionales Array setzen.

Java:
//                                X  Y
JButton[][] buttons = new JButton[8][8];

Diese kannst du dann wie X- und Y-Koordinaten abfragen.

Gruß
BK
 
H

HilfMir

Sorry.
Wenn ich dieses zweidimensionale Array benutze, wie kann ich dann nachher auf meine JButtons zugreifen und in diesen Variablen verändern bzw. diese abgreifen ?
ist dies auch mit einem normalem Array zu regeln, denn ich hab alles in einem Gridlayout und das haut ja einfach alle hintereinander.

Java:
import java.util.*;
import java.applet.Applet;
import javax.swing.*;
import java.awt.Color.*;
import java.awt.*;
import java.awt.event.*;

public class Minesweeper extends JFrame implements ActionListener
{
private int Reihe;
private int Spalte;
private JPanel Sweeper;
private JPanel Menue;
private JButton start;
private JLabel text;
private int bombe=10;
private int[] bomben= new int[10];
private ArrayList<Object> list;
private int Produkt;

public Minesweeper(int x, int y)
{
list = new ArrayList<Object>();
this.setTitle("Minesweeper");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(500,600);
this.setLayout(new BorderLayout());

Sweeper=new JPanel();
Sweeper.setLayout(new GridLayout(x,y));

this.add(Sweeper, BorderLayout.CENTER);

Menue=new JPanel();
this.add(Menue, BorderLayout.NORTH);

start=new JButton("Start");
Menue.add(start);

text=new JLabel();
text.setText("Bomben: "+bombe);
Menue.add(text);

Reihe=x;
Spalte=y;
Produkt=Reihe*Spalte;
erstelleZufallsZahl(Produkt);
berechneFelder();





this.setVisible(true);
}


public void berechneFelder()
{
list.add(Sweeper.add(new Feld(true)));


}

public void erstelleZufallsZahl(int Produkt)
{
Random zufallsgenerator = new Random();

for(int i=0; i<10; i++)
{
int zahl = zufallsgenerator.nextInt(Produkt);
for(int s=0; s<=9; s++)
{
if (zahl==bomben[i])
{
}
else{ bomben[i]=zahl;}

if (bomben[i]==0)
{
i--;
}
}

}
}


public void actionPerformed( ActionEvent e)
{





}

public void Nachbarfelderreservieren(int i)
{}


}

public class Feld extends JButton
{
boolean bombe=false;
int nachbarfelder=0;
private JButton feld;


public Feld(boolean dieBombe)
{
bombe=dieBombe;




}

public boolean gibBombe()
{
return(bombe);
}

public void Nachbarfelder(int zahl)
{
nachbarfelder=zahl;
}

}