private void KonsolidacijaKolone(Int32 Kolona) { Int32 i, g; Stack <Polje> stekPolja = new Stack <Polje>(); for (i = 1; i <= BrojRedova; i++) { Polje P = Polja[(i - 1) * BrojKolona + Kolona]; if (!P.Reseno) { stekPolja.Push(P); } } g = BrojRedova - stekPolja.Count; for (i = BrojRedova; i > g; i--) { Polje P1 = stekPolja.Pop(); Polje P2 = Polja[(i - 1) * BrojKolona + Kolona]; DelimicnaZamenaDvaPolja(P1, P2); } ///* for (i = 1; i <= g; i++) { Polje P = Polja[(i - 1) * BrojKolona + Kolona]; P.Reseno = true; P.Dugme.Visible = P.Dugme.Enabled = false; } //*/ }
private Boolean KolonaPrazna(Int32 Kolona) { Int32 indeksPolja = (BrojRedova - 1) * BrojKolona + Kolona; Polje P = Polja[indeksPolja]; return(P.Reseno); }
private void BrisanjeDobrihSuseda(Int32 Indeks) { Polje Pom = Polja[Indeks]; RedZaBrisanje.Enqueue(Pom); LevaGranicaProvere = DesnaGranicaProvere = Pom.Kolona; while (RedZaBrisanje.Count > 0) { Polje P = RedZaBrisanje.Dequeue(); Int32 red = P.Red, kol = P.Kolona, red_pom, kol_pom; red_pom = red - 1; kol_pom = kol; ObradaSusednogPolja(red_pom, kol_pom, P.Boja); red_pom = red; kol_pom = kol - 1; ObradaSusednogPolja(red_pom, kol_pom, P.Boja); red_pom = red; kol_pom = kol + 1; ObradaSusednogPolja(red_pom, kol_pom, P.Boja); red_pom = red + 1; kol_pom = kol; ObradaSusednogPolja(red_pom, kol_pom, P.Boja); } }
private void ObradaSusednogPolja(Int32 Red, Int32 Kolona, Int32 PrethodnaBoja) { if (Red >= 1 && Red <= BrojRedova && Kolona >= 1 && Kolona <= BrojKolona) { Int32 Indeks = (Red - 1) * BrojKolona + Kolona; Polje P = Polja[Indeks]; if (P.Boja == PrethodnaBoja && !P.Reseno) { P.Reseno = true; P.Dugme.Visible = false; P.Dugme.Enabled = false; if (P.Kolona < LevaGranicaProvere) { LevaGranicaProvere = P.Kolona; } if (P.Kolona > DesnaGranicaProvere) { DesnaGranicaProvere = P.Kolona; } RedZaBrisanje.Enqueue(P); BrojPreostalih--; NosecaForma.Text = "KlikMatrica (" + BrojRedova.ToString() + " x " + BrojKolona.ToString() + ") - " + BrojPreostalih.ToString(); } } }
private void DelimicnaZamenaDveKolone(Int32 LevaKolona, Int32 DesnaKolona) { for (Int32 i = BrojRedova; i >= 1; i--) { Polje PL = Polja[(i - 1) * BrojKolona + LevaKolona]; Polje PD = Polja[(i - 1) * BrojKolona + DesnaKolona]; DelimicnaZamenaDvaPolja(PL, PD); } }
private Boolean ImaLiDobrihSuseda(Polje P1) { Polje P2; Int32 red_p, kol_p, ind_p; if (P1.Reseno) { return(false); } red_p = P1.Red - 1; kol_p = P1.Kolona; ind_p = (red_p - 1) * BrojKolona + kol_p; if (red_p >= 1 && red_p <= BrojRedova && kol_p >= 1 && kol_p <= BrojKolona) { P2 = Polja[ind_p]; if (P1.Boja == P2.Boja && !P2.Reseno) { return(true); } } red_p = P1.Red; kol_p = P1.Kolona - 1; ind_p = (red_p - 1) * BrojKolona + kol_p; if (red_p >= 1 && red_p <= BrojRedova && kol_p >= 1 && kol_p <= BrojKolona) { P2 = Polja[ind_p]; if (P1.Boja == P2.Boja && !P2.Reseno) { return(true); } } red_p = P1.Red; kol_p = P1.Kolona + 1; ind_p = (red_p - 1) * BrojKolona + kol_p; if (red_p >= 1 && red_p <= BrojRedova && kol_p >= 1 && kol_p <= BrojKolona) { P2 = Polja[ind_p]; if (P1.Boja == P2.Boja && !P2.Reseno) { return(true); } } red_p = P1.Red + 1; kol_p = P1.Kolona; ind_p = (red_p - 1) * BrojKolona + kol_p; if (red_p >= 1 && red_p <= BrojRedova && kol_p >= 1 && kol_p <= BrojKolona) { P2 = Polja[ind_p]; if (P1.Boja == P2.Boja && !P2.Reseno) { return(true); } } return(false); }
private void DelimicnaZamenaDvaPolja(Polje P1, Polje P2) { PomocnoPolje.Boja = P1.Boja; PomocnoPolje.Dugme.Visible = P1.Dugme.Visible; PomocnoPolje.Dugme.Enabled = P1.Dugme.Enabled; PomocnoPolje.Reseno = P1.Reseno; P1.Boja = P2.Boja; P1.Dugme.Visible = P2.Dugme.Visible; P1.Dugme.Enabled = P2.Dugme.Enabled; P1.Reseno = P2.Reseno; P2.Boja = PomocnoPolje.Boja; P2.Dugme.Visible = PomocnoPolje.Dugme.Visible; P2.Dugme.Enabled = PomocnoPolje.Dugme.Enabled; P2.Reseno = PomocnoPolje.Reseno; P1.BojenjeDugmeta(); P2.BojenjeDugmeta(); }
public void NovaMatrica() { Int32 i, j, indeks; for (i = 1; i <= BrojRedova; i++) { for (j = 1; j <= BrojKolona; j++) { indeks = (i - 1) * BrojKolona + j; Polje P = Polja[indeks]; P.Reset(); } } IgraUToku = false; BrojPreostalih = BrojRedova * BrojKolona; NosecaForma.Text = "KlikMatrica (" + BrojRedova.ToString() + " x " + BrojKolona.ToString() + ") - " + BrojPreostalih.ToString(); }
public void InicijalizacijaMatricePolja() { Int32 i, j, X, Y, indeks; String ime = ""; NosecaForma.Controls.Clear(); Dugmad.Clear(); Polja.Clear(); Panel D = new Panel(); PomocnoPolje = new Polje(0, 0, D, GeneratorSlucajnihBrojeva); Dugmad.Add(D); Polja.Add(PomocnoPolje); for (i = 1; i <= BrojRedova; i++) { for (j = 1; j <= BrojKolona; j++) { indeks = (i - 1) * BrojKolona + j; ime = "dugme" + indeks.ToString(); X = GornjiCosakX + (j - 1) * SirinaDugmeta + (j - 2) * HorizontalniRazmak; Y = GornjiCosakY + (i - 1) * VisinaDugmeta + (i - 2) * VertikalniRazmak; NapraviDugme(ime, X, Y, SirinaDugmeta, VisinaDugmeta); Polje P = new Polje(i, j, Dugmad[indeks], GeneratorSlucajnihBrojeva); Polja.Add(P); } } NosecaForma.Width = 4 + BrojKolona * SirinaDugmeta + (BrojKolona - 1) * HorizontalniRazmak + 18; NosecaForma.Height = 4 + BrojRedova * VisinaDugmeta + (BrojRedova - 1) * VertikalniRazmak + 40; NosecaForma.MinimumSize = new Size(NosecaForma.Width, NosecaForma.Height); NosecaForma.MaximumSize = new Size(NosecaForma.Width, NosecaForma.Height); NosecaForma.MaximizeBox = false; NosecaForma.Text = "KlikMatrica (" + BrojRedova.ToString() + " x " + BrojKolona.ToString() + ") - " + BrojPreostalih.ToString(); }