private void ruchKomputera2() { if (aktualna_liczba_owieczek < 6) { drzewo.ilePoziomow = 4; } else if (aktualna_liczba_owieczek >= 6 && aktualna_liczba_owieczek < 12) { drzewo.ilePoziomow = 5; } else if (aktualna_liczba_owieczek >= 12 && aktualna_liczba_owieczek <= 18) { drzewo.ilePoziomow = 6; } // plansza.pokazStanPlanszy(); drzewo.plansza_poczatkowa.uaktualnijStanPlanszy(plansza.stan); drzewo.utworzDrzewoPo18(); int wartoscAlfaBeta = drzewo.alfaBeta(drzewo.root, 10, -10); Ruch r = drzewo.zwrocRuchKomputera(wartoscAlfaBeta); if (r.bicie == true) { aktualna_liczba_owieczek--; } operacje.wykonajRuchIZmienStanPlanszy(1, r, plansza.stan); uaktualnijWizualizacjePlanszyTygrysow(r); //Console.WriteLine("//////////////////////////"); //plansza.pokazStanPlanszy(); tura_gracza = true; }
private void uaktualnijWizualizacjePlanszyOwiec(Ruch ruch) { Button szukany = (Button)FindName("btn" + ruch.skad.x + ruch.skad.y); szukany.Style = FindResource("emptyField") as Style; szukany = (Button)FindName("btn" + ruch.dokad.x + ruch.dokad.y); szukany.Style = FindResource("sheep") as Style; }
private void ruchGracza(Button piece) { //debugBox.Text = "zacznij"; if (pierwszyKlik == false) { //debugBox.Text = "zacznij1"; a = Convert.ToInt32(Char.GetNumericValue(piece.Name[3])); b = Convert.ToInt32(Char.GetNumericValue(piece.Name[4])); if (plansza.stan[a, b] == 2) { pierwszyKlik = true; //zakreslona owieczka grafika //piece.Style = FindResource("sheepPointed") as Style; } return; } if (pierwszyKlik == true) { plansza.uaktualnijTempPlanszy(plansza.stan); operacje.generujMozliweRuchyOwiec(2, this.plansza); // debugBox.Text = "zacznij2"; int x1 = Convert.ToInt32(Char.GetNumericValue(piece.Name[3])); int y1 = Convert.ToInt32(Char.GetNumericValue(piece.Name[4])); if (a != x1 || b != y1) { Ruch r = new Ruch(); r.skad.x = a; r.skad.y = b; r.dokad.x = x1; r.dokad.y = y1; if (ruchJestMozliwy(r)) { uaktualnijWizualizacjePlanszyOwiec(r); plansza.stan[a, b] = 0; plansza.stan[x1, y1] = 2; //plansza.pokazStanPlanszy(); pierwszyKlik = false; tura_gracza = false; ruchKomputera2(); } else { //debugBox.Text = "zly ruch!"; pierwszyKlik = false; } } else { //normalna owieczka grafika piece.Style = FindResource("sheep") as Style; //debugBox.Text = "wybierz pionek"; pierwszyKlik = false; } } sprawdzWygrana(); }
public void wykonajRuchIZmienStanPlanszy(int zawodnik, Ruch ruch, int[,] plansza) { if (ruch.bicie)// jeżeli jest to bicie to w miejscu zbijanego pionka wpisujemy 0 { plansza[ruch.bityPionek.x, ruch.bityPionek.y] = 0; } plansza[ruch.skad.x, ruch.skad.y] = 0; plansza[ruch.dokad.x, ruch.dokad.y] = zawodnik; }
public Wezel(Plansza pl, Operacje operacje, Ruch r) { refkaParenta = new Wezel(); ruch = new Ruch(); ruch = r; plansza = new Plansza(); lista_potomkow = new List <Wezel>(); //ocena = suma; plansza.uaktualnijStanPlanszy(pl.stan); }
private bool ruchJestMozliwy(Ruch ruch) { foreach (Ruch r in operacje.ListaRuchow) { if (r.skad.x == ruch.skad.x && r.skad.y == ruch.skad.y && r.dokad.x == ruch.dokad.x && r.dokad.y == ruch.dokad.y) { return(true); } } return(false); }
public void dodajWezel(Ruch ruch, bool Min, bool Max, int zawodnik, Operacje operacje, Wezel parent) { min = Min; max = Max; Plansza temp = new Plansza(); temp.uaktualnijStanPlanszy(plansza.stan); operacje.wykonajRuchIZmienStanPlanszy(zawodnik, ruch, temp.stan); //int nowaOcena = this.ocena + wartosc; refkaParenta = parent; lista_potomkow.Add(new Wezel(temp, operacje, 0, ruch, parent)); }
private void ruchKomputera() { if (aktualna_liczba_owieczek < 6) { drzewo.ilePoziomow = 4; } else if (aktualna_liczba_owieczek >= 6 && aktualna_liczba_owieczek < 12) { drzewo.ilePoziomow = 8; } else if (aktualna_liczba_owieczek >= 12 && aktualna_liczba_owieczek <= 18) { drzewo.ilePoziomow = 10; } //plansza.pokazStanPlanszy(); drzewo.plansza_poczatkowa.uaktualnijStanPlanszy(plansza.stan); drzewo.utworzDrzewo(); int wartoscAlfaBeta = drzewo.alfaBeta(drzewo.root, 10, -10); Ruch r = drzewo.zwrocRuchKomputera(wartoscAlfaBeta); if (r != null) { if (r.bicie == true) { InsultBox.Source = new BitmapImage(new Uri("pack://application:,,,/resources/insult (" + rand.Next(1, 8) + ").jpg")); //debugBox.Text = insults[rand.Next(1, 10)]; aktualna_liczba_owieczek--; } else { InsultBox.Source = new BitmapImage(new Uri("pack://application:,,,/resources/hmm.jpg")); //debugBox.Text = remarks[rand.Next(1, 10)]; } operacje.wykonajRuchIZmienStanPlanszy(1, r, plansza.stan); uaktualnijWizualizacjePlanszyTygrysow(r); //Console.WriteLine("//////////////////////////"); //plansza.pokazStanPlanszy(); tura_gracza = true; } else { sprawdzWygrana(); } }
private void uaktualnijWizualizacjePlanszyTygrysow(Ruch ruch) { Button szukany = (Button)FindName("btn" + ruch.skad.x + ruch.skad.y); szukany.Style = FindResource("emptyField") as Style; if (ruch.bicie == false) { szukany = (Button)FindName("btn" + ruch.dokad.x + ruch.dokad.y); szukany.Style = FindResource("tiger") as Style; } else { szukany = (Button)FindName("btn" + ruch.bityPionek.x + ruch.bityPionek.y); szukany.Style = FindResource("emptyField") as Style; szukany = (Button)FindName("btn" + ruch.dokad.x + ruch.dokad.y); szukany.Style = FindResource("tiger") as Style; } }
public void generujBiciaWilkow(int Zawodnik, Plansza pl) { for (int i = 0; i < 9; i = i + 2) { for (int j = 0; j < 9; j = j + 2) { if (pl.temp[i, j] == 0) { if (i + 4 <= 8) { if (pl.temp[i + 4, j] == Zawodnik && pl.temp[i + 2, j] != Zawodnik && pl.temp[i + 2, j] != 0 && pl.temp[i + 3, j] == 4 && pl.temp[i + 1, j] == 4) { Ruch ri = new Ruch(); ri.bicie = true; ri.bityPionek.x = i + 2; ri.bityPionek.y = j; ri.skad.x = i + 4; ri.skad.y = j; ri.dokad.x = i; ri.dokad.y = j; ListaBic.Add(ri); //PrzypiszRuch_ZmienStanPlanszy(Zawodnik, i, j, pl, 4, 0); } } if (i + 4 <= 8 && j + 4 <= 8) { if (pl.temp[i + 4, j + 4] == Zawodnik && pl.temp[i + 2, j + 2] != Zawodnik && pl.temp[i + 2, j + 2] != 0 && pl.temp[i + 3, j + 3] == 6 && pl.temp[i + 1, j + 1] == 6) { Ruch ri = new Ruch(); ri.bicie = true; ri.bityPionek.x = i + 2; ri.bityPionek.y = j + 2; ri.skad.x = i + 4; ri.skad.y = j + 4; ri.dokad.x = i; ri.dokad.y = j; ListaBic.Add(ri); } } if (j + 4 <= 8) { if (pl.temp[i, j + 4] == Zawodnik && pl.temp[i, j + 2] != Zawodnik && pl.temp[i, j + 2] != 0 && pl.temp[i, j + 3] == 3 && pl.temp[i, j + 1] == 3) { Ruch ri = new Ruch(); ri.bicie = true; ri.bityPionek.x = i; ri.bityPionek.y = j + 2; ri.skad.x = i; ri.skad.y = j + 4; ri.dokad.x = i; ri.dokad.y = j; ListaBic.Add(ri); } } if (i - 4 >= 0 && j + 4 <= 8) { if (pl.temp[i - 4, j + 4] == Zawodnik && pl.temp[i - 2, j + 2] != Zawodnik && pl.temp[i - 2, j + 2] != 0 && pl.temp[i - 3, j + 3] == 5 && pl.temp[i - 1, j + 1] == 5) { Ruch ri = new Ruch(); ri.bicie = true; ri.bityPionek.x = i - 2; ri.bityPionek.y = j + 2; ri.skad.x = i - 4; ri.skad.y = j + 4; ri.dokad.x = i; ri.dokad.y = j; ListaBic.Add(ri); } } if (i - 4 >= 0) { if (pl.temp[i - 4, j] == Zawodnik && pl.temp[i - 2, j] != Zawodnik && pl.temp[i - 2, j] != 0 && pl.temp[i - 3, j] == 4 && pl.temp[i - 1, j] == 4) { Ruch ri = new Ruch(); ri.bicie = true; ri.bityPionek.x = i - 2; ri.bityPionek.y = j; ri.skad.x = i - 4; ri.skad.y = j; ri.dokad.x = i; ri.dokad.y = j; ListaBic.Add(ri); } } if (i - 4 >= 0 && j - 4 >= 0) { if (pl.temp[i - 4, j - 4] == Zawodnik && pl.temp[i - 2, j - 2] != Zawodnik && pl.temp[i - 2, j - 2] != 0 && pl.temp[i - 3, j - 3] == 6 && pl.temp[i - 1, j - 1] == 6) { Ruch ri = new Ruch(); ri.bicie = true; ri.bityPionek.x = i - 2; ri.bityPionek.y = j - 2; ri.skad.x = i - 4; ri.skad.y = j - 4; ri.dokad.x = i; ri.dokad.y = j; ListaBic.Add(ri); } } if (j - 4 >= 0) { if (pl.temp[i, j - 4] == Zawodnik && pl.temp[i, j - 2] != Zawodnik && pl.temp[i, j - 2] != 0 && pl.temp[i, j - 3] == 3 && pl.temp[i, j - 1] == 3) { Ruch ri = new Ruch(); ri.bicie = true; ri.bityPionek.x = i; ri.bityPionek.y = j - 2; ri.skad.x = i; ri.skad.y = j - 4; ri.dokad.x = i; ri.dokad.y = j; ListaBic.Add(ri); } } if (i + 4 <= 8 && j - 4 >= 0) { if (pl.temp[i + 4, j - 4] == Zawodnik && pl.temp[i + 2, j - 2] != Zawodnik && pl.temp[i + 2, j - 2] != 0 && pl.temp[i + 3, j - 3] == 5 && pl.temp[i + 1, j - 1] == 5) { Ruch ri = new Ruch(); ri.bicie = true; ri.bityPionek.x = i + 2; ri.bityPionek.y = j - 2; ri.skad.x = i + 4; ri.skad.y = j - 4; ri.dokad.x = i; ri.dokad.y = j; ListaBic.Add(ri); } } } } } //Console.WriteLine(LBic.Count); }
public List <Ruch> ListaBic = new List <Ruch>(); //Lista zawierająca listę możliwych do wykonania bić przez wilka w danym czasie public void generujMozliweRuchyOwiec(int Zawodnik, Plansza pl) { for (int i = 0; i < 9; i = i + 2) { for (int j = 0; j < 9; j = j + 2) { if (pl.temp[i, j] == 0) { if (i - 2 >= 0) { if (pl.temp[i - 2, j] == Zawodnik && pl.temp[i - 1, j] == 4) { Ruch r = new Ruch(); r.skad.x = i - 2; r.skad.y = j; r.dokad.x = i; r.dokad.y = j; ListaRuchow.Add(r); } } if (i - 2 >= 0 && j + 2 <= 8) { if (pl.temp[i - 2, j + 2] == Zawodnik && pl.temp[i - 1, j + 1] == 5) { Ruch r = new Ruch(); r.skad.x = i - 2; r.skad.y = j + 2; r.dokad.x = i; r.dokad.y = j; ListaRuchow.Add(r); } } if (j + 2 <= 8) { if (pl.temp[i, j + 2] == Zawodnik && pl.temp[i, j + 1] == 3) { Ruch r = new Ruch(); r.skad.x = i; r.skad.y = j + 2; r.dokad.x = i; r.dokad.y = j; ListaRuchow.Add(r); } } if (j + 2 <= 8 && i + 2 <= 8) { if (pl.temp[i + 2, j + 2] == Zawodnik && pl.temp[i + 1, j + 1] == 6) { Ruch r = new Ruch(); r.skad.x = i + 2; r.skad.y = j + 2; r.dokad.x = i; r.dokad.y = j; ListaRuchow.Add(r); } } if (i + 2 <= 8) { if (pl.temp[i + 2, j] == Zawodnik && pl.temp[i + 1, j] == 4) { Ruch r = new Ruch(); r.skad.x = i + 2; r.skad.y = j; r.dokad.x = i; r.dokad.y = j; ListaRuchow.Add(r); } } if (j - 2 >= 0 && i + 2 <= 8) { if (pl.temp[i + 2, j - 2] == Zawodnik && pl.temp[i + 1, j - 1] == 5) { Ruch r = new Ruch(); r.skad.x = i + 2; r.skad.y = j - 2; r.dokad.x = i; r.dokad.y = j; ListaRuchow.Add(r); } } if (j - 2 >= 0) { if (pl.temp[i, j - 2] == Zawodnik && pl.temp[i, j - 1] == 3) { Ruch r = new Ruch(); r.skad.x = i; r.skad.y = j - 2; r.dokad.x = i; r.dokad.y = j; ListaRuchow.Add(r); } } if (j - 2 >= 0 && i - 2 >= 0) { if (pl.temp[i - 2, j - 2] == Zawodnik && pl.temp[i - 1, j - 1] == 6) { Ruch r = new Ruch(); r.skad.x = i - 2; r.skad.y = j - 2; r.dokad.x = i; r.dokad.y = j; ListaRuchow.Add(r); } } } } } }
public void generujMozliweRuchyWilkow(int Zawodnik, Plansza pl) { for (int i = 0; i < 9; i = i + 2) { for (int j = 0; j < 9; j = j + 2) { if (pl.temp[i, j] == 0) { //przejscie gora if (i + 2 <= 8) { if (pl.temp[i + 2, j] == Zawodnik && pl.temp[i + 1, j] == 4) { int a = i; while (a >= 0) { if (pl.temp[a, j] == 0 && pl.temp[a + 1, j] == 4) { Ruch ri = new Ruch(); ri.skad.x = i + 2; ri.skad.y = j; ri.dokad.x = a; ri.dokad.y = j; ListaRuchow.Add(ri); a -= 2; // Console.WriteLine("dodatkowy"); } else { break; } } } } //przejscie dol if (i - 2 >= 0) { if (pl.temp[i - 2, j] == Zawodnik && pl.temp[i - 1, j] == 4) { int a = i; while (a <= 8) { if (pl.temp[a, j] == 0 && pl.temp[a - 1, j] == 4) { Ruch ri = new Ruch(); ri.skad.x = i - 2; ri.skad.y = j; ri.dokad.x = a; ri.dokad.y = j; ListaRuchow.Add(ri); a += 2; // Console.WriteLine("dodatkowy"); } else { break; } } } } //przejscie lewo if (j + 2 <= 8) { if (pl.temp[i, j + 2] == Zawodnik && pl.temp[i, j + 1] == 3) { int a = j; while (a >= 0) { if (pl.temp[i, a] == 0 && pl.temp[i, a + 1] == 3) { Ruch ri = new Ruch(); ri.skad.x = i; ri.skad.y = j + 2; ri.dokad.x = i; ri.dokad.y = a; ListaRuchow.Add(ri); a -= 2; // Console.WriteLine("dodatkowy"); } else { break; } } } } //przejscie prawo if (j - 2 >= 0) { if (pl.temp[i, j - 2] == Zawodnik && pl.temp[i, j - 1] == 3) { int a = j; while (a <= 8) { if (pl.temp[i, a] == 0 && pl.temp[i, a - 1] == 3) { Ruch ri = new Ruch(); ri.skad.x = i; ri.skad.y = j - 2; ri.dokad.x = i; ri.dokad.y = a; ListaRuchow.Add(ri); a += 2; // Console.WriteLine("dodatkowy"); } else { break; } } } } //przejscie lewo gora if (j + 2 <= 8 && i + 2 <= 8) { if (pl.temp[i + 2, j + 2] == Zawodnik && pl.temp[i + 1, j + 1] == 6) { int a = i; int b = j; while (a >= 0 && b >= 0) { if (pl.temp[a, b] == 0 && pl.temp[a + 1, b + 1] == 6) { Ruch ri = new Ruch(); ri.skad.x = i + 2; ri.skad.y = j + 2; ri.dokad.x = a; ri.dokad.y = b; ListaRuchow.Add(ri); a -= 2; b -= 2; // Console.WriteLine("dodatkowy"); } else { break; } } } } //przejscie dol-lewo if (i - 2 >= 0 && j + 2 <= 8) { if (pl.temp[i - 2, j + 2] == Zawodnik && pl.temp[i - 1, j + 1] == 5) { int a = i; int b = j; while (a <= 8 && b >= 0) { if (pl.temp[a, b] == 0 && pl.temp[a - 1, b + 1] == 5) { Ruch ri = new Ruch(); ri.skad.x = i - 2; ri.skad.y = j + 2; ri.dokad.x = a; ri.dokad.y = b; ListaRuchow.Add(ri); a += 2; b -= 2; // Console.WriteLine("dodatkowy"); } else { break; } } } } //przejscie prawo gora if (j - 2 >= 0 && i + 2 <= 8) { if (pl.temp[i + 2, j - 2] == Zawodnik && pl.temp[i + 1, j - 1] == 5) { int a = i; int b = j; while (a >= 0 && b <= 8) { if (pl.temp[a, b] == 0 && pl.temp[a + 1, b - 1] == 5) { Ruch ri = new Ruch(); ri.skad.x = i + 2; ri.skad.y = j - 2; ri.dokad.x = a; ri.dokad.y = b; ListaRuchow.Add(ri); a -= 2; b += 2; // Console.WriteLine("dodatkowy"); } else { break; } } } } //przejscie prawo dol if (j - 2 >= 0 && i - 2 >= 0) { if (pl.temp[i - 2, j - 2] == Zawodnik && pl.temp[i - 1, j - 1] == 6) { int a = i; int b = j; while (a <= 8 && b <= 8) { if (pl.temp[a, b] == 0 && pl.temp[a - 1, b - 1] == 6) { Ruch ri = new Ruch(); ri.skad.x = i - 2; ri.skad.y = j - 2; ri.dokad.x = a; ri.dokad.y = b; ListaRuchow.Add(ri); a += 2; b += 2; // Console.WriteLine("dodatkowy"); } else { break; } } } } } } } }
public void utworzDrzewo2(Wezel wezel, int poziom, int zawodnik, bool Min, bool Max) { operacje.ListaRuchow.Clear(); operacje.ListaBic.Clear(); int przeciwnik = -1; bool Min2 = false; bool Max2 = true; if (zawodnik == 1) { przeciwnik = 2; } else if (zawodnik == 2) { przeciwnik = 1; } if (Min == false && Max == true && poziom != 0) { Min2 = true; Max2 = false; } else if (Min == true && Max == false && poziom != 0) { Min2 = false; Max2 = true; } if (poziom < ilePoziomow) { if (poziom == 0) { operacje.generujBiciaWilkow(1, this.plansza_poczatkowa); // dodajemy jako potomkow mozliwe bicia for (int j = 0; j < operacje.ListaBic.Count; j++) { //Console.WriteLine("poziom "+poziom+" kulka: " + j + ": dodaje wezel bicia: [" + operacje.ListaBic[j].skad.x + "," + operacje.ListaBic[j].skad.y + "] -->" + "[" + operacje.ListaBic[j].dokad.x + "," + operacje.ListaBic[j].dokad.y + "]"); wezel.dodajWezel(operacje.ListaBic.ElementAt(j), false, true, zawodnik, operacje, 0); } if (operacje.ListaBic.Count == 0) //tylko jeśli nie ma bić to dodajemy jako potomkow mozliwe ruchy { operacje.generujMozliweRuchyWilkow(1, this.plansza_poczatkowa); for (int j = 0; j < operacje.ListaRuchow.Count; j++) { //Console.WriteLine("poziom " + poziom+ " kulka: " + j + ": dodaje wezel ruchu: [" + operacje.ListaRuchow[j].skad.x + "," + operacje.ListaRuchow[j].skad.y + "] -->" + "["+ operacje.ListaRuchow[j].dokad.x + "," + operacje.ListaRuchow[j].dokad.y + "]"); root.dodajWezel(operacje.ListaRuchow.ElementAt(j), false, true, zawodnik, operacje, 0); } } // wywolanie rekurencyjne dla potomkow for (int i = 0; i < wezel.lista_potomkow.Count; i++) { utworzDrzewo2(wezel.lista_potomkow.ElementAt(i), poziom + 1, przeciwnik, true, false); } } else { operacje.ListaRuchow.Clear(); operacje.ListaBic.Clear(); //dla owiec if (Min == true && Max == false) { //Console.WriteLine("poziom " + poziom + " pusty node na owiec"); Ruch r = new Ruch(); r.skad.x = 1; r.skad.y = 0; r.dokad.x = 1; r.dokad.y = 0; //wezel.plansza.pokazStanPlanszy(); wezel.dodajWezel(r, Min, Max, 2, operacje, 0); for (int i = 0; i < wezel.lista_potomkow.Count; i++) { utworzDrzewo2(wezel.lista_potomkow.ElementAt(i), poziom + 1, przeciwnik, Min2, Max2); } } //dla wilkow if (Max == true && Min == false) { operacje.generujBiciaWilkow(zawodnik, wezel.plansza); for (int j = 0; j < operacje.ListaBic.Count; j++) { //Console.WriteLine("poziom " + poziom + " kulka: " + j + ": dodaje wezel bicia: [" + operacje.ListaBic[j].skad.x + "," + operacje.ListaBic[j].skad.y + "] -->" + "[" + operacje.ListaBic[j].dokad.x + "," + operacje.ListaBic[j].dokad.y + "]"); wezel.dodajWezel(operacje.ListaBic.ElementAt(j), Min, Max, 1, operacje, 1); } if (operacje.ListaBic.Count == 0)//tylko jeśli nie ma bić to dodajemy jako potomkow mozliwe ruchy { operacje.generujMozliweRuchyWilkow(zawodnik, wezel.plansza); for (int j = 0; j < operacje.ListaRuchow.Count; j++) { //Console.WriteLine("poziom " + poziom + " kulka: " + j + ": dodaje wezel ruchu: [" + operacje.ListaRuchow[j].skad.x + "," + operacje.ListaRuchow[j].skad.y + "] -->" + "[" + operacje.ListaRuchow[j].dokad.x + "," + operacje.ListaRuchow[j].dokad.y + "]"); wezel.dodajWezel(operacje.ListaRuchow.ElementAt(j), Min, Max, 1, operacje, 0); } } for (int i = 0; i < wezel.lista_potomkow.Count; i++) { utworzDrzewo2(wezel.lista_potomkow.ElementAt(i), poziom + 1, przeciwnik, Min2, Max2); } } } } }