// zbiór funkcji do obsługi ruchu wykonywanego przez komputer private void wykonajRuchPC() { if (uzywajSI) { RuchDrzewo rd = new RuchDrzewo(); do { // mechanizm losujący bierki przekazywane do funkcji obliczającej List <Bierka> listaBiale = new List <Bierka>(); listaBiale = Tools.klonujBierki(Gra.bierkiBiale); List <Bierka> listaCzarne = new List <Bierka>(); listaCzarne = Tools.klonujBierki(Gra.bierkiCzarne); listaBiale = LosujBierki.zwrocListe(ileLosowac, listaBiale); listaCzarne = LosujBierki.zwrocListe(ileLosowac, listaCzarne); // zwrócenie najlepszego ruchu rd = Gracz_Komputer.obliczRuchAI(listaBiale, listaCzarne); }while (rd.bierka == null); Bierka bi = Bierka.getBierkaByPos(rd.bierka.pozycjaX, rd.bierka.pozycjaY, Gra.bierkiBiale, Gra.bierkiCzarne); if (rd.czyBicie) { try // tutaj niestety czasem coś się psuje. { // komputer ma w którymś miejscu nieaktualną listę pionów (prawdopodobnie) bi.zbij(Bierka.getBierkaByPos(bi.mozliweBicia[0].X, bi.mozliweBicia[0].Y, Gra.bierkiBiale, Gra.bierkiCzarne)); } catch { MessageBox.Show("Wystąpił problem z mechanizmem SI. PC Oddaje ruch graczowi"); } Gra.kolejka = Enums.czyjaKolej.Osoba; } else { bi.przesun(rd.punkt.X, rd.punkt.Y, true); Gra.kolejka = Enums.czyjaKolej.Osoba; } } else { if (!Gracz_Komputer.Zrob_RuchLosowy()) { MessageBox.Show("Wygrałeś !!"); } } }
private void panel_Click(object sender, EventArgs e) { if (Gra.kolejka == Enums.czyjaKolej.Osoba) { TableLayoutPanelCellPosition pos = Tools.GetCellPosotion(tableLayoutPanel1); Bierka b = Bierka.getBierkaByPos(pos.Column, pos.Row, Gra.bierkiBiale, Gra.bierkiCzarne); if (wybrana == null && b != null && b.kolor == Enums.Kolor_pionków.Czarne) { return; } if (wybrana != null && b == null) { if (!wybrana.przesun(pos.Column, pos.Row, true)) { MessageBox.Show("ruch niedozwolony"); } else { WyczyscPanele(); foreach (Bierka bi in Gra.bierkiBiale.Union(Gra.bierkiCzarne)) { ustawBierke(bi); } Gra.kolejka = Enums.czyjaKolej.Komputer; odswiezLabelKolejka(); Bierka.przeliczWszystieRuchy(); wykonajRuchPC(); WyczyscPanele(); // Bierka.przeliczWszystieRuchy(); // moze niepotrzebne foreach (Bierka bi in Gra.bierkiBiale.Union(Gra.bierkiCzarne)) { ustawBierke(bi); } odswiezLabelKolejka(); } } else if (wybrana != null && b != null && wybrana.kolor != b.kolor) // bicie { if (!wybrana.zbij(b)) { MessageBox.Show("bicie niedozwolone"); } else { WyczyscPanele(); foreach (Bierka bi in Gra.bierkiBiale.Union(Gra.bierkiCzarne)) { ustawBierke(bi); } Gra.kolejka = Enums.czyjaKolej.Komputer; odswiezLabelKolejka(); Bierka.przeliczWszystieRuchy(); wykonajRuchPC(); WyczyscPanele(); Bierka.przeliczWszystieRuchy(); // moze niepotrzebne foreach (Bierka bi in Gra.bierkiBiale.Union(Gra.bierkiCzarne)) { ustawBierke(bi); } odswiezLabelKolejka(); } } else { wybrana = b; } if (b == null) { label3.Text = "Puste pole " + pos.Column + " " + pos.Row; } else { label3.Text = b.ToString() + " kolor: " + b.kolor + "(X,Y)=(" + b.pozycjaX + "," + b.pozycjaY + ")"; //b.generujMozliweRuchy(); Bierka.przeliczWszystieRuchy(); label4.Text = "możliwe ruchy: " + b.mozliweRuchy.Count() + Environment.NewLine + "możliwe bicia: " + b.mozliweBicia.Count(); } } txtPgn.Text = Gra.pgnString; sprawdzMozliwoscRoszady(); }