Minesweeper Logik

alapychak07

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;//Eigenschaft
    boolean istgeoeffnet;
    int anzahlMine;
 
    Feld(){
        istMine = false; //konstruktur
        istgeoeffnet = false;
        anzahlMine = 0;
    }
 
    void setMine(){
        istMine= true; //Methode
    }
 
     boolean getMine(){
        return istMine;
    }
 
    void setgeoeffnet(){
        istgeoeffnet = true;
    }
    boolean getgeoeffnet(){
        return istgeoeffnet;
    }
 
    void setanzahl(int a){
        anzahlMine = a;
    }
 
    int getanzahl(int a){
        return anzahlMine;
    }
       
}






class Spielfeld{
    int h;
    int b;
    int am;
    Feld[][]s;
 
    Spielfeld(int h, int b, int am){
        this.h = h;
        this.b = b;
        this.am= am;
   
        s = new Feld[h][B];
    
        for(int i=0; i<h;i++){
            for(int j=0; j<b;j++){
                s[I][j] = new Feld();
            }
        }
        setMine();
        setanzahl();
    }
    public void setMine(){
        boolean anzahlMine = true;
        int counter = 0;
        if(am<=0){
            anzahlMine = false;
        }
        while(anzahlMine){
            int h = (int)(Math.random()*h);
            int b = (int)(Math.random()*b);
            if(!s[h][B].getMine()){
                s[h][B].setMine();
                counter++;
            }
            if(counter == am){
                anzahlMine = false;
            }
        }
    }
 
 
    public void setanzahl(){
        for(int x = 0; x<s.length;x++){
            for(int y=0;y<s[0].length;y++){
                if(!s[x][y].getMine()){
                    int nachbar = 0;
                    if(x<s.length-1 && y>0 && s[x-1][y].getMine()){ // rechts
                        nachbar++;
                    }
                    if(x>0 && s[x-1][y].getMine()){// links
                        nachbar++;
                    }
                    if(x<s.length-1 && y>0 && s[x+1][y-1].getMine()){//hoch rechts
                        nachbar++;
                    
                    }
                    if(x>0 && y>0 && s[x-1][y-1].getMine()){ //hoch links
                        nachbar++;
                    }
                    if(y>0 && s[x][y-1].getMine()){ //hoch
                        nachbar++;
                    }
                
                    if(y<s[0].length-1 && s[x][y+1].getMine()){// unten
                        nachbar++;
                    }
                    if(x<s.length-1 && y<s[0].length-1 && s[x+1][y+1].getMine()){ // unten rechts
                        nachbar++;
                    }
                    if(x>0 && y<s[0].length-1 && s[x+1][y+1].getMine()){ // unten links
                        nachbar++;
                    }
                
                
                
                    s[x][y].setanzahl(nachbar);
                }
            }
        }
    }
    public void print(){
        for(int i=0; i<h; i++){
            System.out.print(" ");
            for(int j=0; j<b; j++){
                if(s[I][j].getMine()){
                    System.out.print(" * ");
                }else{
                    System.out.print(" "+s[I][j].getanzahl()+" ");
                }
            }
        }
    }
}


class Main{

    public static void main(String[] args) {
        Spielfeld a = new Spielfeld(5,5,10);//konstruktur
        a.print();
    
    }
}
 
Zuletzt bearbeitet:

alapychak07

Mitglied
Java:
 public void linksKlick(int x, int y){

         

            if(x>=0 && y>=0 && x< breite && y<hohe){

                if(s[x][y].offen == false) {

                    s[x][y].offen = true;

             

                    if(s[x][y].getMine()){

                     

                        System.out.println("Verloren");

                    }

             

                else{

                    if(s[x][y].anzahl == 0){

                        linksKlick(x +1, y);

                        linksKlick(x +1, y +1);

                        linksKlick(x , y +1);

                        linksKlick(x -1, y +1);

                        linksKlick(x -1, y +1);

                        linksKlick(x -1, y -1);

                        linksKlick(x , y -1);

                        linksKlick(x +1, y -1);

                    }

                }
}
}
}
 

Javinner

Top Contributor
Java:
class Spielfeld{
    int h;
    int b;
    int am;
    Feld[][]s;
    ...
Wenn man den Code leserlich gestaltet, kann man es wesentlich besser durchgehen und auf Richtigkeit überprüfen.
Java:
if(x<s.length-1 && y>0 && s[x-1][y].getMine()){ // rechts
                        nachbar++;
                    }
                    if(x>0 && s[x-1][y].getMine()){// links
                        nachbar++;
                    }
                    if(x<s.length-1 && y>0 && s[x+1][y-1].getMine()){//hoch rechts
                        nachbar++;
                   
                    }
                    if(x>0 && y>0 && s[x-1][y-1].getMine()){ //hoch links
                        nachbar++;
                    }
                    if(y>0 && s[x][y-1].getMine()){ //hoch
                        nachbar++;
                    }
               
                    if(y<s[0].length-1 && s[x][y+1].getMine()){// unten
                        nachbar++;
                    }
                    if(x<s.length-1 && y<s[0].length-1 && s[x+1][y+1].getMine()){ // unten rechts
                        nachbar++;
                    }
                    if(x>0 && y<s[0].length-1 && s[x+1][y+1].getMine()){ // unten links
                        nachbar++;
                    }
Ehrlich, ist das für ein anderen leicht leserlich und verständlich?
 

alapychak07

Mitglied
Java:
class Spielfeld{
    int h;
    int b;
    int am;
    Feld[][]s;
    ...
Wenn man den Code leserlich gestaltet, kann man es wesentlich besser durchgehen und auf Richtigkeit überprüfen.
Java:
if(x<s.length-1 && y>0 && s[x-1][y].getMine()){ // rechts
                        nachbar++;
                    }
                    if(x>0 && s[x-1][y].getMine()){// links
                        nachbar++;
                    }
                    if(x<s.length-1 && y>0 && s[x+1][y-1].getMine()){//hoch rechts
                        nachbar++;
                  
                    }
                    if(x>0 && y>0 && s[x-1][y-1].getMine()){ //hoch links
                        nachbar++;
                    }
                    if(y>0 && s[x][y-1].getMine()){ //hoch
                        nachbar++;
                    }
              
                    if(y<s[0].length-1 && s[x][y+1].getMine()){// unten
                        nachbar++;
                    }
                    if(x<s.length-1 && y<s[0].length-1 && s[x+1][y+1].getMine()){ // unten rechts
                        nachbar++;
                    }
                    if(x>0 && y<s[0].length-1 && s[x+1][y+1].getMine()){ // unten links
                        nachbar++;
                    }
Ehrlich, ist das für ein anderen leicht leserlich und verständlich?

Code:
class Feld{
       
    boolean istMine;//Eigenschaft
    boolean istgeoeffnet;
    int anzahlMine;
   
    Feld(){
        istMine = false; //konstruktur
        istgeoeffnet = false;
        anzahlMine = 0;
    }
   
    void setMine(){
        istMine= true; //Methode
    }
   
    boolean getMine(){
        return istMine;
    }
   
    void setgeoeffnet(){
        istgeoeffnet = true;
    }
    boolean getgeoeffnet(){
        return istgeoeffnet;
    }
   
    void setanzahl(int a){
        anzahlMine = a;
    }
   
    int getanzahl(){
        return anzahlMine;
    }
           
}





/*
class Spielfeld{
    int h;
    int b;
    int am;
    Feld[][]s;
   
    Spielfeld(int h, int b, int am){
        this.h = h;
        this.b = b;
        this.am = am;
       
        s = new Feld[h][b];
       
        for(int i=0; i<h;i++){
            for(int j=0; j<b;j++){
                s[i][j] = new Feld();
            }
        }
        setMine();
        setanzahl();
    }
    public void setMine(){
        boolean anzahlMine = true;
        int counter = 0;
        if(am<=0){
            anzahlMine = false;
        }
        while(anzahlMine){
            int h = (int)(Math.random()*this.h);
            int b = (int)(Math.random()*this.b);   
            if(!s[h][b].getMine()){
                s[h][b].setMine();
                counter++;
            }
            if(counter == am){
                anzahlMine = false;
            }
        }
    }
   
   
    public void setanzahl(){
        for(int x = 0; x<s.length;x++){
            for(int y=0;y<s[0].length;y++){
                if(!s[x][y].getMine()){
                    int nachbar = 0;
                    if(x>0 && y>0 && s[x-1][y-1].getMine()){ //hoch links
                        nachbar++;
                    }
                    if(x>0 && y<s[0].length-1 && s[x-1][y+1].getMine()){ // unten links
                        nachbar++;
                    }
                    if(x>0 && s[x-1][y].getMine()){// links
                        nachbar++;
                    }
                    if(x<s.length-1 && y>0 && s[x+1][y-1].getMine()){//hoch rechts
                        nachbar++;
                       
                    }
                    if(x<s.length-1 && y<s[0].length-1 && s[x+1][y+1].getMine()){ // unten rechts
                        nachbar++;
                    }
                    if(x<s.length-1 && s[x+1][y].getMine()){ // rechts
                        nachbar++;
                    }
                   
                    if(y>0 && s[x][y-1].getMine()){ //hoch
                        nachbar++;
                    }
                   
                    if(y<s[0].length-1 && s[x][y+1].getMine()){// unten
                        nachbar++;
                    }
                   
                   
                   
                   
                    s[x][y].setanzahl(nachbar);
                }
            }
        }
    }
    public void print(){
        for(int i=0; i<h; i++){
            System.out.print(" ");
            for(int j=0; j<b; j++){
                if(s[i][j].getMine()){
                    System.out.print(" * ");
                }else{
                    System.out.print(" "+s[i][j].getanzahl()+" ");
                }
            }
        }
    }
}
*/
/*
class Main{

    public static void main(String[] args) { 
        Spielfeld a = new Spielfeld(5,5,10);//konstruktur 
        a.print();
       
    }
}
*/
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Minesweeper - Daten Java Basics - Anfänger-Themen 46
T Minesweeper Test Java Basics - Anfänger-Themen 2
E Minesweeper-Problem Java Basics - Anfänger-Themen 13
J Minesweeper Hilfe Java Basics - Anfänger-Themen 26
C Klassen Minesweeper Problem. int needs to be final (inner class problem) Java Basics - Anfänger-Themen 3
W Problem bei MineSweeper Programmierung Java Basics - Anfänger-Themen 10
C Minesweeper mit Arrays über Konsole Java Basics - Anfänger-Themen 4
0 Minesweeper Java Basics - Anfänger-Themen 16
J minesweeper Java Basics - Anfänger-Themen 2
I Minesweeper Java Basics - Anfänger-Themen 2
I Warum kommt der Fehler? Minesweeper programmieren Java Basics - Anfänger-Themen 7
T Minesweeper in Java Java Basics - Anfänger-Themen 6
G Minesweeper Java Basics - Anfänger-Themen 4
G ZUFALLSFUNKTION in Minesweeper (6x6)? Java Basics - Anfänger-Themen 17
S Fehler nach dynamischer Anpassung - Minesweeper Java Basics - Anfänger-Themen 6
H Tic Tac Toe Logik kürzer fassen Java Basics - Anfänger-Themen 8
I Logik Zahlungsprozess - Wann Bestellobjekt anlegen? Java Basics - Anfänger-Themen 2
H Logik Fehler erkennen Java Basics - Anfänger-Themen 21
M Kann mir jemand hier die Logik vermitteln? Java Basics - Anfänger-Themen 3
M Kann mir jemand die Logik erklären? Java Basics - Anfänger-Themen 1
Hias12345 Schach(Springer Logik) Java Basics - Anfänger-Themen 27
C Array-Werte werden gemischt, ohne Logik Java Basics - Anfänger-Themen 2
R Best Practice Logik in der Datenbank oder in Java? Java Basics - Anfänger-Themen 3
B Logik Upgrade / Downgrade Java Basics - Anfänger-Themen 13
I Hilfe bei der Logik Java Basics - Anfänger-Themen 9
D Logik von GUI trennen Java Basics - Anfänger-Themen 3
Meeresgott OOP Gui, Logik und Datenbank richtig aufbauen Java Basics - Anfänger-Themen 43
V Memory Logik Problem/Denkblockade, bitte helft Java Basics - Anfänger-Themen 1
Z Jump and Run - Grafik,Logik und GUI trennen Java Basics - Anfänger-Themen 4
P fibonacci - do while Statement Logik Fehler Java Basics - Anfänger-Themen 5
Z GUI und Logik - Trennung Java Basics - Anfänger-Themen 2
H Logik Frage Java Basics - Anfänger-Themen 3
X Methoden Logik-Problem mit Schleifen. Java Basics - Anfänger-Themen 7
kaoZ Logik und Gui trennen Java Basics - Anfänger-Themen 3
S Logik knobeln... Java Basics - Anfänger-Themen 4
G Klassen Von Logik auf TextField in der GUI zugreifen Java Basics - Anfänger-Themen 14
V Verstehe die Logik nicht ... Java Basics - Anfänger-Themen 30
S OOP Trennung der GUI von der Logik Java Basics - Anfänger-Themen 11
F While Schleife - Logik ? Java Basics - Anfänger-Themen 5
B Logik von verschachtelten For Schleifen Java Basics - Anfänger-Themen 6
Luk10 Logik/Mathe Problem Java Basics - Anfänger-Themen 6
M Logik in Java Java Basics - Anfänger-Themen 4
K java.util.ConcurrentModificationException problem in der Logik? Quaxli-Tutorial Java Basics - Anfänger-Themen 9
S Frage zu Verständnis und Logik Java Basics - Anfänger-Themen 5
K Logik in if-Bedingung Java Basics - Anfänger-Themen 2
L Wie Trennung von Logik und Ausgabe? Java Basics - Anfänger-Themen 6
T Hilfe - Ein Logik Problem Java Basics - Anfänger-Themen 17
sliwalker Wie löse ich eine "DfB-Pokalauslosung"?Logik fehlt Java Basics - Anfänger-Themen 5
T Problem mit der Logik von Switch und do-while Java Basics - Anfänger-Themen 3
G die Logik für eine Buchung! Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben