Anzahl der benachbarten Minen berechnen und setzen

LucaToni

Aktives Mitglied
Hab eine Methode, welche die Anzahl der benachbarten Minen berechnet und dann mit einer anderen Setter Methode setzt.

Ich bin grad etwas hilflos.
Würde mich über Ideen und Hilfen freuen.

Java:
/**Methode die ich versuche zu implementieren
*/
private void berechneAnzahl(final IKoordinate Koordinate) {
      
  }
 
Naja sollen nur der exakten Nachbarn gezählt werden oder möchtest du einen gewissen Radius abdecken?
eigentlich nur die direkten Nachbar... beispielweise...wenn ich bei x=4; y=2....3 Minen als nachbar habe dann will ich da die 3 herausbekommen und mit hilfe meiner Settermethode die 3 setzen...
Ich dachte an eine doppelte for-Schleife... aber ich weiß nicht wie ich das hier implementieren soll, da ich in dieser Klasse keine Koordinaten habe... und nicht weiß wie ich die übergebenen Parameter dafür benutzen kann.

Vorher habe ich halt Minen gesetzt mit der Methode:

Code:
private void setzeMinen() {
   Random zufallszahl=new Random();
        int zufallsx=zufallszahl.nextInt(breite);
        int zufallsy=zufallszahl.nextInt(hoehe);
        board[zufallsy][zufallsy].vermint();
    }
 
Also eigentlich brauchst du dafür keine For-Schleife 😉 Du musst nur nach oben, unten, links und rechts schauen und als Ausgangspunkt verwendest du dein Koordinaten Kontainer 😉
Schick mal deine Klasse IKoordinate
 
Also eigentlich brauchst du dafür keine For-Schleife 😉 Du musst nur nach oben, unten, links und rechts schauen und als Ausgangspunkt verwendest du dein Koordinaten Kontainer 😉
Schick mal deine Klasse IKoordinate

Meinst du 4 if abfragen? oder sogar 8 .... da die nachbarn diagonal zur position auch direkte nachbarn sind...

IKoordinate ist nur ein Interface...
Code:
public interface IKoordinate {

  /**
   * Gibt den x Wert zurueck.
   *
   * @return X Wert.
   */
  public int getX();

  /**
   * Setzt eine neue x Position.
   *
   * @param x Neuer x Wert.
   */
  public void setX(final int x);

  /**
   * Gibt den y Wert zurueck.
   *
   * @return Y Wert.
   */
  public int getY();

  /**
   * Setzt eine neue y Position.
   *
   * @param y Neuer y Wert.
   */
  public void setY(final int y);
}
 
8 if abfragen? meinst du das geht nicht besser mit schleifen ? also einfacher und eleganter

Loop halt von der ersten Nachbarszelle oben links bis rechts, und das 3 mal wobei du die mittlere Zelle weglässt.

Was du untersuchen möchtest ist eine 3x3 Zelle (wobei die mittlere Zelle weggelassen wird). Das ist für mich schöner als 8 Koordinaten zu untersuchen.

Wenn du nicht weiterkommst, schau hier

 
wie kann ich denn in eine for schleife eine Anweisung einbauen? nur am Ende der verschachtelten For-Schleife?
@lennero hat Dir ja bereits einen Link geschickt, in dem eine mögliche Lösung zu sehen ist. Ich würde die aber etwas anders gestalten:
Java:
for (int row = 0; row < 3; row++) {
    for (int col = 0; col < 3; col++) {
        // Das Feld, auf dem man steht, ist nicht vermint, daher
        // muss man das mittlere Feld nicht unbedingt auslassen.
        // Wenn man will, kann man das natürlich machen, einfach
        // zusätzlich prüfen, ob col != row gilt:
        // if (col != row && istVermint(col + x - 1, row + y - 1)) {
        if (istVermint(col + x - 1, row + y - 1)) {
            count++;
        }
    }
}
mit
Java:
boolean istVermint(int x, int y) {
    if (y < 0 || y >= board.length || x < 0 || x >= board[0].length) {
        return false; // ausserhalb des Spielfelds ist garantiert nichts vermint
    }
    return board[x][y].istVermint();
}
Der Vorteil ist, dass in den Schleifen nicht überprüft werden muss, ob sich das Koordinatenpaar auf dem Brett findet.
 
@lennero hat Dir ja bereits einen Link geschickt, in dem eine mögliche Lösung zu sehen ist. Ich würde die aber etwas anders gestalten:
Java:
for (int row = 0; row < 3; row++) {
    for (int col = 0; col < 3; col++) {
        // Das Feld, auf dem man steht, ist nicht vermint, daher
        // muss man das mittlere Feld nicht unbedingt auslassen.
        // Wenn man will, kann man das natürlich machen, einfach
        // zusätzlich prüfen, ob col != row gilt:
        // if (col != row && istVermint(col + x - 1, row + y - 1)) {
        if (istVermint(col + x - 1, row + y - 1)) {
            count++;
        }
    }
}
mit
Java:
boolean istVermint(int x, int y) {
    if (y < 0 || y >= board.length || x < 0 || x >= board[0].length) {
        return false; // ausserhalb des Spielfelds ist garantiert nichts vermint
    }
    return board[x][y].istVermint();
}
Der Vorteil ist, dass in den Schleifen nicht überprüft werden muss, ob sich das Koordinatenpaar auf dem Brett findet.
Aber was passiert mit den übergebenen Parametern...die muss ich ja benutzen um die aktuelle Koordinate zu ermitteln.
 

Neue Themen


Zurück
Oben