Esempio n. 1
0
        private void new_game()
        {
            // Knoepfe erstellen
            buttons = new Minesweeper_Button[x_size, y_size];
            for (int x = 0; x < x_size; x++)
            {
                for (int y = 0; y < y_size; y++)
                {
                    buttons[x, y] = new Minesweeper_Button(x, y);
                }
            }

            // Initalize Funktion der Oberflaeche aufrufen, damit Knoepfe auf Oberflaeche angezeigt werden koennen
            gui.initialize_form(buttons, x_size, y_size, button_size);

            // Klicks zuruecksetzen
            num_clicks = 0;
            gui.set_click_counter(num_clicks);

            // Bomben setzen
            set_bombs(num_bombs);
            gui.set_bomb_counter(num_bombs - count_marked());

            // Tipps Zaehler zuruecksetzten
            num_hints = 0;

            // Zeit neu starten
            sw.Restart();
        }
Esempio n. 2
0
 public void button_pressed(Minesweeper_Button button)
 {
     if (button.get_is_marked() == false)
     {
         // Klick hochzaehlen und Anzeige aktualisieren
         num_clicks++;
         gui.set_click_counter(num_clicks);
         // wenn Bombe aufgedeckt Spiel zuende
         if (button.get_is_bomb())
         {
             end_game(false);
         }
         else
         {
             // ansonsten aufdecken und Nachbarn oeffnen
             aufdecken_und_nachbarn_oeffnen(button);
             // Die Computerloesung mit eventuell neu gefundenen Informationen aktualisieren
             do_computer_solve();
             if (check_alles_aufgedeckt())
             {
                 // Spiel gewonnen, wenn alles aufgedeckt
                 end_game(true);
             }
         }
     }
 }
Esempio n. 3
0
 private void set_computer_solved_around_button(Minesweeper_Button button)
 {
     // Alle Knoepfe um den Knopf herum als fuer den Computer geloest setzten
     foreach (Minesweeper_Button btn in get_buttons_around_button(button))
     {
         btn.set_computer_solved();
     }
 }
Esempio n. 4
0
 public void button_right_pressed(Minesweeper_Button button)
 {
     // Bei rechts Klick Knopf markieren und Bombencounter aktualisieren
     // Knopfzustand wechseln, falls noch nicht geoeffnet: markieren, nicht markieren oder vielleicht markieren
     // Text und Bild werden passend gesetzt
     button.mark();
     gui.show_flag(button.get_pos().x, button.get_pos().y, button.get_state());
     gui.set_bomb_counter(num_bombs - count_marked());
 }
Esempio n. 5
0
        private int get_computer_solved_bomb_fields_around_button(Minesweeper_Button button)
        {
            // Anzahl der vom Computer als Bombe geloesten Felder zurueckgeben
            int anzahl = 0;

            foreach (Minesweeper_Button btn in get_buttons_around_button(button))
            {
                if ((btn.get_is_opened() || btn.get_is_computer_solved()) && btn.get_is_bomb() == true)
                {
                    anzahl += 1;
                }
            }
            return(anzahl);
        }
Esempio n. 6
0
        private int get_bombs_around_button(Minesweeper_Button button)
        {
            // Anzahl der Bomben in den Nachbarfeldern zurueckgeben
            int anzahl = 0;

            foreach (Minesweeper_Button btn in get_buttons_around_button(button))
            {
                if (btn.get_is_bomb())
                {
                    anzahl += 1;
                }
            }
            return(anzahl);
        }
Esempio n. 7
0
        // Knopfdruck Methode
        private void button_pressed(Minesweeper_Button button, MouseEventArgs e)
        {
            // Wenn Maus noch auf dem Knopf ist, Links- oder Rechtsklick an Steuerung weitergeben
            if (e.X >= 0 && e.X < button_size && e.Y >= 0 && e.Y < button_size)
            {
                switch (e.Button)
                {
                case MouseButtons.Left:
                    steuerung.button_pressed(button);
                    break;

                case MouseButtons.Right:
                    steuerung.button_right_pressed(button);
                    break;

                default:
                    break;
                }
            }
        }
Esempio n. 8
0
 // Rekursives aufdecken
 private void aufdecken_und_nachbarn_oeffnen(Minesweeper_Button button)
 {
     // Feld aufdecken und eventuell rekursiv Nachbarn auch noch aufdecken
     if (button.get_is_bomb() == false && button.get_is_opened() == false)
     {
         // Wenn Feld keine Bombe ist, Anzahl der Bomben im Umkreis auf Feld schreiben ...
         Pos pos = button.get_pos();
         int num_bombs_around = get_bombs_around_button(button);
         button.open();
         gui.aufdecken(pos.x, pos.y, button.get_is_bomb(), num_bombs_around);
         if (num_bombs_around == 0)
         {
             // rekursiv die direkten und diagonalen Nachbarn aufdecken
             foreach (Minesweeper_Button btn in get_buttons_around_button(button))
             {
                 aufdecken_und_nachbarn_oeffnen(btn);
             }
         }
     }
 }
Esempio n. 9
0
        private List <Minesweeper_Button> get_buttons_around_button(Minesweeper_Button button)
        {
            // Gibt eine Liste mit den um einen Knopf herumliegenden Knoepfe zurueck
            List <Minesweeper_Button> surrounding_buttons = new List <Minesweeper_Button>();
            Pos pos = button.get_pos();

            for (int x = pos.x - 1; x <= pos.x + 1; x++)
            {
                if (0 <= x && x < x_size)
                {
                    for (int y = pos.y - 1; y <= pos.y + 1; y++)
                    {
                        if (0 <= y && y < y_size && (x != pos.x || y != pos.y))
                        {
                            surrounding_buttons.Add(buttons[x, y]);
                        }
                    }
                }
            }
            return(surrounding_buttons);
        }
Esempio n. 10
0
 private void InitializeButtons(Minesweeper_Button[,] buttons, int x_size, int y_size, Action <Minesweeper_Button, MouseEventArgs> click_method)
 {
     // Erstellt die Windows.Forms.Button Objekte und zeigt diese an
     this.buttons = new Button[x_size, y_size];
     for (int x = 0; x < x_size; x++)
     {
         for (int y = 0; y < y_size; y++)
         {
             Minesweeper_Button ms_button = buttons[x, y];
             // Button erzeugen
             Button btn = new Button();
             // Einstellungen fuer Button
             btn.Location       = new Point(5 + x * button_size, 42 + y * button_size);
             btn.Name           = "button_" + x + "_" + y;
             btn.Size           = new Size(button_size, button_size);
             btn.Font           = button_font;
             btn.TabStop        = false;
             btn.ImageAlign     = ContentAlignment.MiddleCenter;
             btn.MouseUp       += (sender, MouseEventArgs) => { click_method(ms_button, MouseEventArgs); };
             this.buttons[x, y] = btn;
             this.Controls.Add(btn);
         }
     }
 }