コード例 #1
0
        public void inicijalizujAstar()
        {
            AStarSearch astar = new AStarSearch();

            /*Inicijalizujem pocetno stanje tako da prima
             * koordinate kompa koje on ima na pocetku partije (9,9)
             * */
            pocetnoStanje       = new State();
            pocetnoStanje.markI = DisplayPanel.INSTANCE.computer.POZICIJA.X;
            pocetnoStanje.markJ = DisplayPanel.INSTANCE.computer.POZICIJA.Y;

            krajnjeStanje = new State();

            State sp = pocetnoStanje;
            State ss = astar.search(pocetnoStanje);

            /* Nakon sto se zavrsi pretraga, krajnjeStanje
             * dobija koordinate sela koje je najbolje napasti
             * po heuristickoj funkciji
             * */

            krajnjeStanje.markI = astar.getPoint().X;
            krajnjeStanje.markJ = astar.getPoint().Y;

            State solution = krajnjeStanje;

            inicijalizacijaPretrage(astar);

            displayPanel1.Refresh();
        }
コード例 #2
0
        private void inicijalizacijaPretrage(AStarSearch astar)
        {
            /*iniccijalizacija pocetnog stanja koje je u svakom potezu trenutna pozicija protivnika*/
            pocetnoStanje = new State();
            //dajem mu poziciju gde se nalazi computer kad je na potezu
            pocetnoStanje.markI = DisplayPanel.INSTANCE.computer.POZICIJA.X;
            pocetnoStanje.markJ = DisplayPanel.INSTANCE.computer.POZICIJA.Y;

            krajnjeStanje = new State();

            astar.search(pocetnoStanje);

            krajnjeStanje.markI = astar.getPoint().X;
            krajnjeStanje.markJ = astar.getPoint().Y;
        }
コード例 #3
0
        //pomeranje heroja
        public void moveIcon(int dI, int dJ)
        {
            popuniHeroja();
            popuniMasinu();
            if (me.NAPOTEZU)
            {
                int staraPozicijaX = me.POZICIJA.X;
                int staraPozicijaY = me.POZICIJA.Y;

                me.pomeri(new Pozicija(dI, dJ));
                me.NAPOTEZU       = false;
                computer.NAPOTEZU = true;

                InvalidateAdv(me.POZICIJA.X, me.POZICIJA.Y);
                InvalidateAdv(staraPozicijaX, staraPozicijaY);
            }
            if (computer.NAPOTEZU)
            {
                int staraPozicijaX = computer.POZICIJA.X;
                int staraPozicijaY = computer.POZICIJA.Y;

                /*svaki put kad je komp na potezu radi se pretraga
                 * da se utvrdi koje selo je najbolje napasti
                 * */
                AStarSearch pretraga = new AStarSearch();

                /*pocetnoStanje dobija koordinate trenutne pozicije
                 * komp-a
                 * */
                pocetnoStanje       = new State();
                pocetnoStanje.markI = computer.POZICIJA.X;
                pocetnoStanje.markJ = computer.POZICIJA.Y;

                /*Prosledjuje se pocetno stanje, da bi se
                 * odredilo koje je najbolje sledece stanje
                 * */
                State najbolje = pretraga.search(pocetnoStanje);

                /* Nakon sto se zavrsi pretraga, krajnjeStanje
                 * dobija koordinate sela koje je najbolje napasti
                 * po heuristickoj funkciji
                 * */
                State krajnjeStanje = new State();
                krajnjeStanje.markI = pretraga.getPoint().X;
                krajnjeStanje.markJ = pretraga.getPoint().Y;

                if (krajnjeStanje.markI == computer.POZICIJA.X && krajnjeStanje.markJ == computer.POZICIJA.Y)
                {
                    /*ova metoda vrsi borbu kompjutera kada dodje do ciljnog sela*/
                    Selo temp = nadjiSelo(new Pozicija(krajnjeStanje.markI, krajnjeStanje.markJ));

                    if (temp != null)
                    {
                        if (temp.OSVOJIO != null && temp.OSVOJIO.Equals(me))
                        {
                            Form1 fm1 = new Form1(computer, temp);
                            fm1.ShowDialog();
                        }
                        else
                        {
                            borba2(ref computer, ref temp);
                        }
                    }
                }

                /*Komp se pomera u pravcu sela
                 * */
                computer.pomeri(new Pozicija(krajnjeStanje.markI, krajnjeStanje.markJ));

                /*Nakon sto se pomeri za odredjen broj mesta,
                 * komp nije vise na potezu
                 * */
                computer.NAPOTEZU = false;
                me.NAPOTEZU       = true;

                /*Brise se ikonica na staroj poziciji i iscrtava na novoj
                 * */
                InvalidateAdv(computer.POZICIJA.X, computer.POZICIJA.Y);
                InvalidateAdv(staraPozicijaX, staraPozicijaY);
            }
        }