//otvara sva prazna polja oko praznog polja na koji si kliknuo private void otvori_prazna_polja_okolo(Button dugme) { List <Button> prazna_polja; prazna_polja = new List <Button>(); prazna_polja.Add(dugme); while (prazna_polja.Count > 0) { Polje polje = (Polje)prazna_polja[0].Tag; int i = polje.Red; int j = polje.Kolona; if (proveriPolje(i - 1, j - 1)) { prazna_polja.Add(dugmici[i - 1, j - 1]); } if (proveriPolje(i - 1, j)) { prazna_polja.Add(dugmici[i - 1, j]); } if (proveriPolje(i - 1, j + 1)) { prazna_polja.Add(dugmici[i - 1, j + 1]); } if (proveriPolje(i, j - 1)) { prazna_polja.Add(dugmici[i, j - 1]); } if (proveriPolje(i, j + 1)) { prazna_polja.Add(dugmici[i, j + 1]); } if (proveriPolje(i + 1, j - 1)) { prazna_polja.Add(dugmici[i + 1, j - 1]); } if (proveriPolje(i + 1, j)) { prazna_polja.Add(dugmici[i + 1, j]); } if (proveriPolje(i + 1, j + 1)) { prazna_polja.Add(dugmici[i + 1, j + 1]); } //brise prvi element prazna_polja.RemoveAt(0); } }
//otvara sva polja public void otvoriSvaPolja() { for (int i = 0; i < velicina_matrice; i++) { for (int j = 0; j < velicina_matrice; j++) { Polje polje = dugmici[i, j].Tag as Polje; if (!polje.Zastavica) { if (polje.Vrednost == Vrednost_polja.PRAZNO_POLJE) { dugmici[i, j].IsEnabled = false; dugmici[i, j].Style = this.FindResource("dugmici_pritisnuto") as Style; } else if (polje.Vrednost == Vrednost_polja.BROJ) { Image img = new Image(); img.Source = Funkcionalnost.obojiBroj(this, polje.Broj_bombi_okolo).Source; dugmici[i, j].Content = img; dugmici[i, j].IsEnabled = false; dugmici[i, j].Style = this.FindResource("dugmici_pritisnuto") as Style; } else if (polje.Vrednost == Vrednost_polja.BOMBA) { Image img = new Image(); img.Source = (this.FindResource("bomb") as Image).Source; dugmici[i, j].Style = this.FindResource("dugmici_pritisnuto") as Style; dugmici[i, j].Content = img; dugmici[i, j].IsEnabled = false; } } else { if (polje.Vrednost == Vrednost_polja.BOMBA) { dugmici[i, j].MouseRightButtonDown -= desniKlik; } else if (polje.Vrednost != Vrednost_polja.BOMBA) { Image img = new Image(); img.Source = (this.FindResource("Xflag") as Image).Source; dugmici[i, j].Content = img; dugmici[i, j].MouseRightButtonDown -= desniKlik; } } } } }
//metoda koja dodaje bombe u matricu na slucajnim pozicijama public static void dodavanjeBombi(Button[,] dugmici, int brojBombi, int velicina_matrice) { int brojac = 0; while (brojac < brojBombi) { int i = random.Next(0, velicina_matrice); int j = random.Next(0, velicina_matrice); Polje polje = (Polje)dugmici[i, j].Tag; if (!polje.Vrednost.Equals(Vrednost_polja.BOMBA)) { dugmici[i, j].Tag = new Polje(false, Vrednost_polja.BOMBA, i, j); brojac++; } } }
//Postavljanje i skidanje zastavica private void desniKlik(object sender, MouseEventArgs e) { if (e.RightButton == MouseButtonState.Pressed) { Button dugme = (Button)sender; if (!((Polje)dugme.Tag).Zastavica && broj_zastavica < broj_bombi) { Image img = new Image(); img.Source = (this.FindResource("flag") as Image).Source; dugme.Content = img; ((Polje)dugme.Tag).Zastavica = true; broj_zastavica++; } else if (((Polje)dugme.Tag).Zastavica) { dugme.Content = ""; ((Polje)dugme.Tag).Zastavica = false; broj_zastavica--; } tbBombe.Text = (broj_bombi - broj_zastavica) + ""; //ako su postavljene sve zastavice ispituje da li je kraj igre if (broj_bombi == broj_zastavica) { int br = 0; for (int i = 0; i < velicina_matrice; i++) { for (int j = 0; j < velicina_matrice; j++) { Polje polje = dugmici[i, j].Tag as Polje; if (polje.Zastavica && polje.Vrednost == Vrednost_polja.BOMBA) { br++; } } } if (br == broj_bombi) { otvoriSvaPolja(); tajmer.Stop(); Storyboard sb = this.FindResource("animacija") as Storyboard; btnRestart.BeginStoryboard(sb); trenutni_igrac.Broj_bodova = 1000 - brojac_vremena; if (TopLista.dodajIgracaZaKategoriju(velicina_matrice, trenutni_igrac)) { MessageBox.Show("Osvojili ste " + trenutni_igrac.Broj_bodova + " boda i nalazite se medju 10 najboljih igrača "); } else { MessageBox.Show("Osvojili ste " + trenutni_igrac.Broj_bodova + " boda ali niste uspeli da se plasirate medju 10 najboljih igrača "); } } } } }
private void pritisnutoDugme(object sender, EventArgs e) { if (broj_pritisnutih_dugmica == 0) { tajmer.Start(); } Button dugme = (Button)sender; Polje polje_dugmeta = (Polje)dugme.Tag; if (dugme.IsEnabled && !polje_dugmeta.Zastavica) { if (polje_dugmeta.Vrednost.Equals(Vrednost_polja.BOMBA)) { btnRestart.Content = (this.FindResource("sad") as Image); otvoriSvaPolja(); dugme.Content = (this.FindResource("bomb_red") as Image); tajmer.Stop(); return; } else if (polje_dugmeta.Vrednost.Equals(Vrednost_polja.BROJ)) { Image slika_broj = new Image(); slika_broj.Source = Funkcionalnost.obojiBroj(this, polje_dugmeta.Broj_bombi_okolo).Source; dugme.Content = slika_broj; dugme.IsEnabled = false; } else { dugme.IsEnabled = false; otvori_prazna_polja_okolo(dugme); } broj_pritisnutih_dugmica = 0; //broji pritisnute dugmice for (int i = 0; i < velicina_matrice; i++) { for (int j = 0; j < velicina_matrice; j++) { if (!dugmici[i, j].IsEnabled) { dugmici[i, j].Style = this.FindResource("dugmici_pritisnuto") as Style; broj_pritisnutih_dugmica++; } } } //ako su ostale samo bombe if ((velicina_matrice * velicina_matrice - broj_bombi) == broj_pritisnutih_dugmica) { //Pokretanje animacije btnRestart.BeginStoryboard(this.FindResource("animacija") as Storyboard); tajmer.Stop(); trenutni_igrac.Broj_bodova = 1000 - brojac_vremena; if (TopLista.dodajIgracaZaKategoriju(velicina_matrice, trenutni_igrac)) { MessageBox.Show("Osvojili ste " + trenutni_igrac.Broj_bodova + " boda i nalazite se medju 10 najboljih igrača "); } else { MessageBox.Show("Osvojili ste " + trenutni_igrac.Broj_bodova + " boda ali niste uspeli da se plasirate medju 10 najboljih igrača "); } //postavlja zastavice na mestima gde se nalaze bombe kada su ostale samo bombe for (int i = 0; i < velicina_matrice; i++) { for (int j = 0; j < velicina_matrice; j++) { if (((Polje)dugmici[i, j].Tag).Vrednost == Vrednost_polja.BOMBA) { ((Polje)dugmici[i, j].Tag).Zastavica = true; dugmici[i, j].MouseRightButtonDown -= desniKlik; Image img = new Image(); img.Source = (this.FindResource("flag") as Image).Source; dugmici[i, j].Content = img; } } } } } }
//metoda koja racuna koliko bombi ima oko polja u matrici public static void ispisBrojeva(Button[,] dugmici, int velicina_matrice) { for (int i = 0; i < velicina_matrice; i++) { for (int j = 0; j < velicina_matrice; j++) { int brojac = 0; Polje polje = (Polje)dugmici[i, j].Tag; if (!polje.Vrednost.Equals(Vrednost_polja.BOMBA)) { if ((i - 1 >= 0) && (i - 1 < velicina_matrice) && (j - 1 >= 0) && (j - 1 < velicina_matrice)) { if (((Polje)dugmici[i - 1, j - 1].Tag).Vrednost.Equals(Vrednost_polja.BOMBA)) { brojac++; } } if ((i - 1 >= 0) && (i - 1 < velicina_matrice) && (j >= 0) && (j < velicina_matrice)) { if (((Polje)dugmici[i - 1, j].Tag).Vrednost.Equals(Vrednost_polja.BOMBA)) { brojac++; } } if ((i - 1 >= 0) && (i - 1 < velicina_matrice) && (j + 1 >= 0) && (j + 1 < velicina_matrice)) { if (((Polje)dugmici[i - 1, j + 1].Tag).Vrednost.Equals(Vrednost_polja.BOMBA)) { brojac++; } } if ((i >= 0) && (i < velicina_matrice) && (j - 1 >= 0) && (j - 1 < velicina_matrice)) { if (((Polje)dugmici[i, j - 1].Tag).Vrednost.Equals(Vrednost_polja.BOMBA)) { brojac++; } } if ((i >= 0) && (i < velicina_matrice) && (j + 1 >= 0) && (j + 1 < velicina_matrice)) { if (((Polje)dugmici[i, j + 1].Tag).Vrednost.Equals(Vrednost_polja.BOMBA)) { brojac++; } } if ((i + 1 >= 0) && (i + 1 < velicina_matrice) && (j - 1 >= 0) && (j - 1 < velicina_matrice)) { if (((Polje)dugmici[i + 1, j - 1].Tag).Vrednost.Equals(Vrednost_polja.BOMBA)) { brojac++; } } if ((i + 1 >= 0) && (i + 1 < velicina_matrice) && (j >= 0) && (j < velicina_matrice)) { if (((Polje)dugmici[i + 1, j].Tag).Vrednost.Equals(Vrednost_polja.BOMBA)) { brojac++; } } if ((i + 1 >= 0) && (i + 1 < velicina_matrice) && (j + 1 >= 0) && (j + 1 < velicina_matrice)) { if (((Polje)dugmici[i + 1, j + 1].Tag).Vrednost.Equals(Vrednost_polja.BOMBA)) { brojac++; } } if (brojac > 0) { polje.Broj_bombi_okolo = brojac; polje.Vrednost = Vrednost_polja.BROJ; dugmici[i, j].Tag = polje; } else { dugmici[i, j].Content = ""; } } } } }