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); }
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); }
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; } }
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"); } }
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]); } } }
public Potez(Coveculjak kk, Polje oo, Polje gg, Polje gdeg = null) { Ko = kk; Odakle = oo; Gde = gg; GdeGradi = gdeg; }
public Potez() { ko = null; odakle = gde = gdeGradi = null; }
public void postaviGa(int x, int y, Coveculjak kosePostavlja) { Matrica[x][y].StackObjekata.Push(kosePostavlja); kosePostavlja.X = x; kosePostavlja.Y = y; }
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); }
public Coveculjak(Coveculjak c) : base(c.X, c.Y, ObjectType.COVECULJAK) { }