Minesweeper programmieren mit c# in Visual Studio?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Okay, gehen wir mal davon aus, dass du die Oberfläche (das Ding mit den Knöpfen und so) auf die Reihe kriegst.

Dann bleibt nur noch eine "Kleinigkeit" übrig:

  1. Nimm ein 2-Dimensionales int-Array (int[,] field = new int[width,height])
  2. Verteile die Minen (z.B. als -1) mithilfe eines System.Random Objektes über das Array.
  3. Gehe das Feld Zelle für Zelle durch und überprüfe, wie viele Minen horizontal und vertikal an die jeweilige Zelle angrenzen; erhöhe den Wert im Array um 1. (Ausser, wenn der Wert der betrachteten Zelle -1 ist, in dem Fall gehts direkt mit der nächsten weiter.)
  4. Jetzt haben wir das Feld soweit fertig, fehlt noch der Klick auf eine Zelle.
  5. Wenn der Wert der geklickten Zelle -1 ist: BOOM! ;)
  6. Wenn der Wert der geklickten Zelle >0 ist: Die Zelle aufdecken.
  7. Wenn der Wert der Zelle exakt 0 ist: "Flood-Fill"-mäßig die komplette 0-Fläche aufdecken (und natürlich die !=0 Zellen der Kontur.)

Beispiel für den ersten Teil:

int width=20, height=10;
int mines = 15;
int[,] field = new int[width,height];
Random rng = new Random();
while(mines>0){
    int x = rng.Next(width);
    int y = rng.Next(height);
    if(field[x,y]==0){
        field[x,y]=-1;
        --mines;
    }
}
for(int y=0;y<height;++y){
    for(x=0;x<width;++x){
        if(y>0){
            if(field[x,y-1]==-1) ++field[x,y];
        }
        if(x>0){
            if(field[x-1,y]==-1) ++field[x,y];
        }
        if(y<height-1){
            if(field[x,y+1]==-1) ++field[x,y];
        }
        if(x<width-1){
            if(field[x+1,y]==-1) ++field[x,y];
        }
    }
}

P.S.: Wenns echt für die Schule ist, dann solltest du ab hier erstmal klarkommen. Wenn nicht, "gib laut". ;)