コード例 #1
0
        // 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ś !!");
                }
            }
        }
コード例 #2
0
        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();
        }