Minesweeper

TPKey

Mitglied
Hallo,

ich möchte nun in meiner Klasse Spielfeld eine linksKlick Methode implementieren, welches das Anklicken eines Feldes darstellt. Dabei soll das angeklickte Feld und evtl. benachbarte Felder offengelegt werden.

Nun stellt sich mir eine grobe Frage.

Wie implementiere ich dies?
Java:
class Feld{
  
    boolean istMine;
    boolean offen;
    int anzahl;
  
    /*
    Zeichen:
  
    istMine = x
  
        */
    public void Feld(){
        offen = false;
        istMine = false;
        anzahl = 0;
    }
    public boolean getMine(){
        return istMine;
    }
    public void setMine(){
        istMine=true;
    }
    public void setNachbar(){
        anzahl++;
    }
    public String printFeld(){
        if(istMine==true){
            return("X");
      
        }
        else{
            return Integer.toString(anzahl);
        }
    }
  

}

Java:
import java.util.Random;
class Spielfeld{
      
        int laenge; //y hoehe
        int breite; //x breite
        int anzahl;
      
        Feld[][] EndeSF ;
      
        Spielfeld(int l, int b, int a){
            //Feldererstellung
            laenge = l;
            breite = b;
            anzahl = a;
            Feld[][] spfe = new Feld[breite][laenge];
            for(int h1=0;h1<laenge;h1++){
                for(int h2=0; h2<breite;h2++){
                    spfe[h2][h1] = new Feld();
                }
            }
            //Minenverteilung
            Random rand = new Random();
            for(int h1=0; h1<anzahl;h1++){
                int rb =rand.nextInt(breite);
                int rl = rand.nextInt(laenge);
                if(spfe[rb][rl].istMine==false){
                    spfe[rb][rl].setMine();
                    //linker Rand
                    if(rb!=0){
                        if(rl!=0){
                            spfe[rb-1][rl-1].setNachbar();
                          
                        }
                        if(rl!=laenge-1){
                            spfe[rb-1][rl+1].setNachbar();
                        }
                        spfe[rb-1][rl].setNachbar();
                    }
                    //rechter Rand
                    if(rb!=breite-1){
                        if(rl!=0){
                            spfe[rb+1][rl-1].setNachbar();
                        }
                        if(rl!=laenge-1){
                            spfe[rb+1][rl+1].setNachbar();
                          
                        }
                        spfe[rb+1][rl].setNachbar();
                    }
                    //oben und unten
                    if(rl!=0){
                        spfe[rb][rl-1].setNachbar();
                    }
                    if(rl!=laenge-1){
                        spfe[rb][rl+1].setNachbar();
                    }
                }
                else {
                    h1--;
                }
            }
            EndeSF=spfe;
        }
        public void printSPFE(){
            for(int h1=0;h1<laenge;h1++){
                System.out.print("\n");
                for(int h2=0; h2<breite;h2++){
                    System.out.print(EndeSF[h2][h1].printFeld()+" ");
              
                }
            }
        }  

    }
 

HarleyDavidson

Bekanntes Mitglied
Gerade für Minesweeper würde sich auch ein Spielfeld aus JButtons / JToggleButtons wunderbar eignen.
Das ganze in ein Panel mit einem GridLayout gepackt und fertig ist das Spielfeld.
 

HarleyDavidson

Bekanntes Mitglied
Mal ein ganz einfaches und schnelles Beispiel für ein Spielfeld 10x10:
Java:
public static void main( String args[] ) throws Exception
    {
        JFrame frame = new JFrame( "MinesweeperTest" );
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
        //Feld 10x10
        frame.setLayout( new GridLayout( 10, 10 ) );

        //Buttons setzen
        for ( int x = 0; x < 10; x++ )
        {
            for ( int y = 0; y < 10; y++ )
            {
                JButton button = new JButton();
                //Größe Buttons
                button.setPreferredSize(new Dimension(20, 20) );
                frame.add( button );
            }
        }
        //Größe anpassen
        frame.pack();
        //Position zentral auf dem Bildschirm
        frame.setLocationRelativeTo( null);
        frame.setVisible( true );
    }

Jetzt könnte man die Klasse JButton erweitern und ihm seine Koordinaten mitgeben, ob unter ihm eine Mine versteckt ist und und und ...
Generell wie auch schon SchwarzWeiß geschrieben hat:
Hast du schon mal mit einer Grafikbibliothek (Swing, JavaFX) gearbeitet?
solltest du dich vorher ein bisschen mit den Grafikbibliotheken beschäftigen. Wobei bei Minesweeper nicht viel zu tun und das eigentlich ein schönes Einstiegsprojekt dafür ist.
 

Ähnliche Java Themen

Neue Themen


Oben