Beispiel #1
0
        public bool mozeDaGradi(int x, int y, Coveculjak koGradi)
        {
            if (x < 0 || x > 4 || y < 0 || y > 4)
            {
                return(false);
            }
            int visina = Matrica[x][y].StackObjekata.Count;

            if (visina == 4)
            {
                return(false);
            }
            if (Matrica[x][y].StackObjekata.Count != 0)
            {
                if (Matrica[x][y].StackObjekata.First().TipObjekta == ObjectType.COVECULJAK)
                {
                    return(false);
                }
            }
            bool tuJePored = false;

            for (int i = -1; i < 2; i++)
            {
                for (int j = -1; j < 2; j++)
                {
                    if (x == koGradi.X + i && y == koGradi.Y + j)
                    {
                        tuJePored = true;
                    }
                }
            }
            return(tuJePored);
        }
        public static float statickaProcena(bool koIgra, Potez potez, Tabla node)
        {
            float vrednost = 0; Coveculjak moj1 = null, moj2 = null, neprijatelj1 = null, neprijatelj2 = null;

            if (koIgra == true)
            {
                moj1         = node.Beli1;
                moj2         = node.Beli2;
                neprijatelj1 = node.Crni1;
                neprijatelj2 = node.Crni2;
            }
            else
            {
                moj1         = node.Crni1;
                moj2         = node.Crni2;
                neprijatelj1 = node.Beli1;
                neprijatelj2 = node.Beli2;
            }
            vrednost += potez.Gde.StackObjekata.Count;
            float rastojanje11 = (float)Math.Sqrt(Math.Pow(moj1.X - potez.GdeGradi.X, 2) + Math.Pow(moj1.Y - potez.GdeGradi.Y, 2));
            float rastojanje12 = (float)Math.Sqrt(Math.Pow(moj2.X - potez.GdeGradi.X, 2) + Math.Pow(moj2.Y - potez.GdeGradi.Y, 2));
            float rastojanje21 = (float)Math.Sqrt(Math.Pow(neprijatelj1.X - potez.GdeGradi.X, 2) + Math.Pow(neprijatelj1.Y - potez.GdeGradi.Y, 2));
            float rastojanje22 = (float)Math.Sqrt(Math.Pow(neprijatelj2.X - potez.GdeGradi.X, 2) + Math.Pow(neprijatelj2.Y - potez.GdeGradi.Y, 2));
            float pomVrednost  = potez.GdeGradi.StackObjekata.Count * (rastojanje11 + rastojanje12 - rastojanje21 - rastojanje22);

            vrednost += pomVrednost;
            return(vrednost);
        }
Beispiel #3
0
        public List <Potez> generisiPoteze(bool koIgra)
        {
            List <Potez> lista = new List <Potez>();
            List <Potez> lista2 = new List <Potez>();
            Coveculjak   covec1 = null, covec2 = null;

            if (koIgra == true)
            {
                covec1 = beli1; covec2 = beli2;
            }
            else
            {
                covec1 = crni1; covec2 = crni2;
            }

            for (int i = -1; i < 2; i++)
            {
                for (int j = -1; j < 2; j++)
                {
                    if (i == 0 && j == 0)
                    {
                        continue;
                    }
                    if (mozeDaPomeri(i + covec1.X, j + covec1.Y, covec1)) // Za figuricu proveravam na koja sve polja u krug moze da stane i pravim listu svih tih poteza
                    {
                        lista.Add(new Potez(covec1, matrica[covec1.X][covec1.Y], matrica[i + covec1.X][j + covec1.Y]));
                    }
                    if (mozeDaPomeri(i + covec2.X, j + covec2.Y, covec2))
                    {
                        lista.Add(new Potez(covec2, matrica[covec2.X][covec2.Y], matrica[i + covec2.X][j + covec2.Y]));
                    }
                }
            }
            foreach (Potez pom in lista)
            {
                int x = pom.Gde.X; int y = pom.Gde.Y;
                for (int i = -1; i < 2; i++)
                {
                    for (int j = -1; j < 2; j++)
                    {
                        if (i == 0 && j == 0)
                        {
                            continue;
                        }
                        matrica[pom.Ko.X][pom.Ko.Y].StackObjekata.Pop(); // Kad proverava da l moze da gradi moram da ga izvadim da bi video da moze da gradi na mestu na kom bio jer nije fizicki izvadjen stvarno s tog mesta
                        if (mozeDaGradi(i + x, j + y, pom.Ko))
                        {
                            Potez pomocniPotez = new Potez(pom.Ko, pom.Odakle, pom.Gde, matrica[i + x][j + y]);
                            lista2.Add(pomocniPotez);
                        }
                        matrica[pom.Ko.X][pom.Ko.Y].StackObjekata.Push(pom.Ko); // Tu ga vratim
                    }
                }
            }
            return(lista2);
        }
Beispiel #4
0
 public void pomeri(int x, int y, Coveculjak koSePomera)
 {
     if (mozeDaPomeri(x, y, koSePomera))
     {
         Matrica[koSePomera.X][koSePomera.Y].StackObjekata.Pop();
         Matrica[x][y].StackObjekata.Push(koSePomera);
         koSePomera.X = x;
         koSePomera.Y = y;
     }
 }
Beispiel #5
0
 public void gradi(int x, int y, Coveculjak koGr)
 {
     if (mozeDaGradi(x, y, koGr))
     {
         Gradjevina nova = new Gradjevina(x, y);
         Matrica[x][y].StackObjekata.Push(nova);
     }
     else
     {
         Console.WriteLine("Ne moze tu da gradis");
     }
 }
Beispiel #6
0
        public Tabla(Tabla t)
        {
            Beli1   = new Coveculjak(t.Beli1);
            Beli2   = new Coveculjak(t.Beli2);
            Crni1   = new Coveculjak(t.Crni1);
            Crni2   = new Coveculjak(t.Crni2);
            Matrica = new Polje[5][];
            for (int i = 0; i < 5; i++)
            {
                Matrica[i] = new Polje[5];
            }

            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < 5; j++)
                {
                    Matrica[i][j] = new Polje(t.Matrica[i][j]);
                }
            }
        }
Beispiel #7
0
 public Potez(Coveculjak kk, Polje oo, Polje gg, Polje gdeg = null)
 {
     Ko = kk; Odakle = oo; Gde = gg; GdeGradi = gdeg;
 }
Beispiel #8
0
 public Potez()
 {
     ko = null; odakle = gde = gdeGradi = null;
 }
Beispiel #9
0
 public void postaviGa(int x, int y, Coveculjak kosePostavlja)
 {
     Matrica[x][y].StackObjekata.Push(kosePostavlja);
     kosePostavlja.X = x;
     kosePostavlja.Y = y;
 }
Beispiel #10
0
        public static float statickaProcena(bool koIgra, Tabla node)
        {
            float vrednost = 0; Coveculjak moj1 = null, moj2 = null, neprijatelj1 = null, neprijatelj2 = null;

            if (koIgra == true)
            {
                moj1         = node.Beli1;
                moj2         = node.Beli2;
                neprijatelj1 = node.Crni1;
                neprijatelj2 = node.Crni2;
            }
            else
            {
                moj1         = node.Crni1;
                moj2         = node.Crni2;
                neprijatelj1 = node.Beli1;
                neprijatelj2 = node.Beli2;
            }

            vrednost += (float)Math.Pow(100, node.Matrica[moj1.X][moj1.Y].StackObjekata.Count);
            vrednost += (float)Math.Pow(100, node.Matrica[moj2.X][moj2.Y].StackObjekata.Count);
            vrednost -= (float)Math.Pow(25, node.Matrica[neprijatelj1.X][neprijatelj1.Y].StackObjekata.Count);
            vrednost -= (float)Math.Pow(25, node.Matrica[neprijatelj2.X][neprijatelj2.Y].StackObjekata.Count);
            if (node.Matrica[moj1.X][moj1.Y].StackObjekata.Count == 4 && node.Matrica[moj1.X][moj1.Y].StackObjekata.First().TipObjekta == ObjectType.COVECULJAK)
            {
                return(float.MaxValue);
            }
            if (node.Matrica[moj2.X][moj2.Y].StackObjekata.Count == 4 && node.Matrica[moj2.X][moj2.Y].StackObjekata.First().TipObjekta == ObjectType.COVECULJAK)
            {
                return(float.MaxValue);
            }
            if (node.Matrica[neprijatelj1.X][neprijatelj1.Y].StackObjekata.Count == 4 && node.Matrica[neprijatelj1.X][neprijatelj1.Y].StackObjekata.First().TipObjekta == ObjectType.COVECULJAK)
            {
                return(float.MinValue);
            }
            if (node.Matrica[neprijatelj2.X][neprijatelj2.Y].StackObjekata.Count == 4 && node.Matrica[neprijatelj2.X][neprijatelj2.Y].StackObjekata.First().TipObjekta == ObjectType.COVECULJAK)
            {
                return(float.MinValue);
            }

            /*for (int i=-1; i<2; i++) {
             *  for (int j = -1; j < 2; j++) {
             *      int visinaOkoMog = 0;
             *      if (dobreKoord(moj1.X + i, moj1.Y + j) && (node.Matrica[moj1.X + i][moj1.Y + j].StackObjekata.Count != 0)) {
             *          if (node.Matrica[moj1.X + i][moj1.Y + j].StackObjekata.First().TipObjekta == ObjectType.COVECULJAK)
             *              visinaOkoMog = node.Matrica[moj1.X][moj1.Y].StackObjekata.Count - 1;
             *          else
             *              visinaOkoMog = node.Matrica[moj1.X][moj1.Y].StackObjekata.Count;
             *          vrednost += (float)Math.Pow(1, visinaOkoMog);
             *          // Provereno to polje za oko prvog igraca koje je visine
             *      }
             *      else
             *          vrednost += (float)Math.Pow(1, 0);
             *      if (dobreKoord(moj2.X + i, moj2.Y + j) && (node.Matrica[moj2.X + i][moj2.Y + j].StackObjekata.Count != 0)) {
             *          if (node.Matrica[moj2.X + i][moj2.Y + j].StackObjekata.First().TipObjekta == ObjectType.COVECULJAK)
             *              visinaOkoMog = node.Matrica[moj2.X][moj2.Y].StackObjekata.Count - 1;
             *          else
             *              visinaOkoMog = node.Matrica[moj2.X][moj2.Y].StackObjekata.Count;
             *          vrednost += (float)Math.Pow(1, visinaOkoMog);
             *          // Provereno to polje za oko drugog igraca koje je visine
             *      }
             *      else
             *          vrednost += (float)Math.Pow(1, 0);
             *      /*if (dobreKoord(neprijatelj1.X + i, neprijatelj1.Y + j) && (Game.Tablica.Matrica[neprijatelj1.X + i][neprijatelj1.Y + j].StackObjekata.Count != 0)) {
             *          if (Game.Tablica.Matrica[neprijatelj1.X + i][neprijatelj1.Y + j].StackObjekata.First().TipObjekta == ObjectType.COVECULJAK)
             *              visinaOkoMog = Game.Tablica.Matrica[neprijatelj1.X][neprijatelj1.Y].StackObjekata.Count - 1;
             *          else
             *              visinaOkoMog = Game.Tablica.Matrica[neprijatelj1.X][neprijatelj1.Y].StackObjekata.Count;
             *          vrednost -= (float)Math.Pow(9, visinaOkoMog);
             *          // Provereno to polje za oko prvog neprijatlejskog igraca koje je visine
             *      }
             *      if (dobreKoord(neprijatelj2.X + i, neprijatelj2.Y + j) && (Game.Tablica.Matrica[neprijatelj2.X + i][neprijatelj2.Y + j].StackObjekata.Count!=0)) {
             *          if (Game.Tablica.Matrica[neprijatelj2.X + i][neprijatelj2.Y + j].StackObjekata.First().TipObjekta == ObjectType.COVECULJAK)
             *              visinaOkoMog = Game.Tablica.Matrica[neprijatelj2.X][neprijatelj2.Y].StackObjekata.Count - 1;
             *          else
             *              visinaOkoMog = Game.Tablica.Matrica[neprijatelj2.X][neprijatelj2.Y].StackObjekata.Count;
             *          vrednost -= (float)Math.Pow(9, visinaOkoMog);
             *          // Provereno to polje za oko prvog neprijatlejskog igraca koje je visine
             *      }
             *
             *      //if (Game.Tablica.Matrica[neprijatelj1.X][neprijatelj1.Y].StackObjekata.Count == 3 && (Game.Tablica.Matrica[neprijatelj1.X + i][neprijatelj1.Y + j].StackObjekata.Count == 3 && Game.Tablica.Matrica[neprijatelj1.X + i][neprijatelj1.Y+j].StackObjekata.First().TipObjekta != ObjectType.COVECULJAK) && ()
             *  }
             * }*/

            return(vrednost);
        }
Beispiel #11
0
 public Coveculjak(Coveculjak c) : base(c.X, c.Y, ObjectType.COVECULJAK)
 {
 }