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(); }
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); } } } }
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(); } }
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()); }
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); }
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); }
// 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; } } }
// 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); } } } }
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); }
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); } } }