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

}
 
Zurück