private void ObradaRedaZaCekanje() { RedPoljaZaIspitivanje.Enqueue(PocetnoPolje); while (RedPoljaZaIspitivanje.Count > 0) { Polje P = RedPoljaZaIspitivanje.Dequeue(); Int32 redPomocni, kolonaPomocna; redPomocni = P.Red - 1; kolonaPomocna = P.Kolona; ObradaPoljaReda(redPomocni, kolonaPomocna, P.Udaljenost + 1); redPomocni = P.Red; kolonaPomocna = P.Kolona - 1; ObradaPoljaReda(redPomocni, kolonaPomocna, P.Udaljenost + 1); redPomocni = P.Red; kolonaPomocna = P.Kolona + 1; ObradaPoljaReda(redPomocni, kolonaPomocna, P.Udaljenost + 1); redPomocni = P.Red + 1; kolonaPomocna = P.Kolona; ObradaPoljaReda(redPomocni, kolonaPomocna, P.Udaljenost + 1); } }
public void ZapocinjanjePretrage(Int32 Indeks) { Polje P = TabelaPolja[Indeks]; if (!UcitanoPocetnoPolje) { PocetnoPolje = P; PocetnoPolje.Dugme.Enabled = false; UcitanoPocetnoPolje = true; PocetnoPolje.Udaljenost = 0; PocetnoPolje.Dugme.BackColor = Color.FromArgb(60, 220, 60); PocetnoPolje.Dugme.Text = "0"; return; } if (UcitanoKrajnjePolje) { return; } KrajnjePolje = P; KrajnjePolje.Dugme.Enabled = false; KrajnjePolje.Dugme.BackColor = Color.Orange; UcitanoKrajnjePolje = true; PronalazenjePuta(); }
private void PopunjavanjeTabelePolja() { Polje P = new Polje(0, BrojRedova, BrojKolona, new Button()); TabelaPolja.Add(P); for (Int32 i = 1; i <= BrojPolja; i++) { String ime = "button" + i.ToString(); Button Dugme = (Button)Forma.Controls[ime]; P = new Polje(i, BrojRedova, BrojKolona, Dugme); TabelaPolja.Add(P); } }
private void GenerisanjeLavirinta() { Random gsb = new Random(); Int32 i, brojKutija = gsb.Next(MinBrojSanduka, MaksBrojSanduka); for (i = 1; i <= brojKutija; i++) { Int32 indeks = gsb.Next(1, BrojPolja + 1); Polje P = TabelaPolja[indeks]; P.Sanduk = true; Sanduci.Add(P); P.Dugme.BackColor = Color.DarkGray; P.Dugme.Enabled = false; } }
private void ObradaPoljaReda(Int32 Red, Int32 Kolona, Int32 VrednostZaUpis) { if (Red >= 1 && Red <= BrojRedova && Kolona >= 1 && Kolona <= BrojKolona) { Int32 IndeksPolja = (Red - 1) * BrojKolona + Kolona; Polje P = TabelaPolja[IndeksPolja]; if (P.Sanduk || P.Udaljenost > -1) { return; } P.Udaljenost = VrednostZaUpis; P.Dugme.Text = P.Udaljenost.ToString(); RedPoljaZaIspitivanje.Enqueue(P); } }
public void ResetTabele() { PocetnoPolje = KrajnjePolje = null; UcitanoPocetnoPolje = UcitanoKrajnjePolje = TabelaGenerisana = PutanjaPronadjena = PutanjeUpisane = false; DuzinaPutanje = 0; Putanje.Clear(); Sanduci.Clear(); for (Int32 i = 1; i <= BrojPolja; i++) { Polje P = TabelaPolja[i]; P.Udaljenost = -1; P.Dugme.BackColor = Color.FromArgb(225, 225, 225); P.Dugme.Text = ""; P.Dugme.Enabled = true; P.Sanduk = false; } }
private void ObradaPoljaSteka(Int32 Red, Int32 Kolona, Int32 PrethodnaVrednost) { Boolean uslov = Red >= 1 && Red <= BrojRedova && Kolona >= 1 && Kolona <= BrojKolona; if (!uslov) { return; } Int32 indeksPolja = (Red - 1) * BrojKolona + Kolona; Polje P = TabelaPolja[indeksPolja]; uslov = P.Sanduk || P.Udaljenost != PrethodnaVrednost + 1 || P.Udaljenost > DuzinaPutanje; if (uslov) { return; } StekPoljaZaIspitivanje.Push(P); if (P == KrajnjePolje) { UpisivanjeStekaUListuPutanja(); StekPoljaZaIspitivanje.Pop(); return; } Int32 redPomocni, kolonaPomocna; redPomocni = Red - 1; kolonaPomocna = Kolona; ObradaPoljaSteka(redPomocni, kolonaPomocna, P.Udaljenost); redPomocni = Red; kolonaPomocna = Kolona - 1; ObradaPoljaSteka(redPomocni, kolonaPomocna, P.Udaljenost); redPomocni = Red; kolonaPomocna = Kolona + 1; ObradaPoljaSteka(redPomocni, kolonaPomocna, P.Udaljenost); redPomocni = Red + 1; kolonaPomocna = Kolona; ObradaPoljaSteka(redPomocni, kolonaPomocna, P.Udaljenost); StekPoljaZaIspitivanje.Pop(); }
private void Bojenje(object sender, MouseEventArgs e) { if (TablaSaPoljima.UcitanoPocetnoPolje) { return; } if (e.Button == MouseButtons.Right) { Button Dugme = (Button)sender; Int32 Indeks = Convert.ToInt32(Dugme.Name.Substring(6)); Polje P = TablaSaPoljima.TabelaPolja[Indeks]; P.Sanduk = true; P.Udaljenost = -2; P.Dugme.BackColor = Color.DarkGray; P.Dugme.Enabled = false; TablaSaPoljima.Sanduci.Add(P); } }