Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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();
        }
Beispiel #3
0
        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);
            }
        }
Beispiel #4
0
        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;
            }
        }
Beispiel #5
0
        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);
            }
        }
Beispiel #6
0
        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;
            }
        }
Beispiel #7
0
        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();
        }
Beispiel #8
0
        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);
            }
        }