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