示例#1
0
 public RuchDrzewo(Bierka b, Point ruch, int wartosc, bool bicie)
 {
     this.czyBicie = bicie;
     this.bierka   = b;
     this.ile      = wartosc;
     this.punkt    = ruch;
 }
        /// <summary>
        /// Konstruktor kopiujący -> taki, który tworzy nowe figurki
        /// </summary>
        /// <param name="inp">Pole do skopiowania</param>

        public SzachownicaPole(SzachownicaPole inp)
        {
            this.biale_pole_planszy = inp.biale_pole_planszy;

            Bierka pom = inp.figurka;

            if (pom is Pionek)
            {
                this.figurka = new Pionek((Pionek)pom);
            }
            else if (pom is Krol)
            {
                this.figurka = new Krol((Krol)pom);
            }
            else if (pom is Goniec)
            {
                this.figurka = new Goniec((Goniec)pom);
            }
            else if (pom is Krolowa)
            {
                this.figurka = new Krolowa((Krolowa)pom);
            }
            else if (pom is Skoczek)
            {
                this.figurka = new Skoczek((Skoczek)pom);
            }
            else if (pom is Wieza)
            {
                this.figurka = new Wieza((Wieza)pom);
            }
            else
            {
                this.figurka = null;
            }
        }
示例#3
0
        // ustawianie bierki, czyli narysowanie odpowiedniego obrazka na szachownicy (dokładniej to na panelu)
        private void ustawBierke(Bierka b)
        {
            Panel p = tableLayoutPanel1.GetControlFromPosition(b.pozycjaX, b.pozycjaY) as Panel;

            if (p != null)
            {
                p.BackgroundImage = b.grafika;
            }
        }
示例#4
0
 public Form1()
 {
     // wykonanie kilku niezbędnych na początku operacji
     InitializeComponent();
     podpiszSzachownice();
     RysujSiatke(bialy, czarny);
     kompletujPiony();
     Bierka.przeliczWszystieRuchy();
     odswiezLabelKolejka();
 }
示例#5
0
        private void btnMalaRoszada_Click(object sender, EventArgs e)
        {
            btnMalaRoszada.Enabled = false;
            // szukanie odpowiednich figur
            Bierka wieza = Bierka.getBierkaByPos(7, 7, Gra.bierkiBiale, Gra.bierkiCzarne);
            Bierka krol  = Bierka.getBierkaByPos(4, 7, Gra.bierkiBiale, Gra.bierkiCzarne);

            // wykonanie roszady - zostało wcześniej sprawdzone, czy można to zrobić.
            Bierka.roszada(wieza, krol, Enums.Roszada.Krotka);
            zrobResztePoRoszadzie();
        }
示例#6
0
        public static List <Bierka> klonujBierki(List <Bierka> bb)
        {
            List <Bierka> ret = new List <Bierka>();

            foreach (Bierka b in bb)
            {
                Bierka nowa = (Bierka)b.Clone();
                ret.Add(nowa);
            }

            return(ret);
        }
示例#7
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ś !!");
                }
            }
        }
示例#8
0
        // jedna funkcja uzywana przy obu roszadach - bo po kazdej trzeba przegenerowac ruchy i zmienic kolejke
        private void zrobResztePoRoszadzie()
        {
            WyczyscPanele();
            foreach (Bierka bi in Gra.bierkiBiale.Union(Gra.bierkiCzarne))
            {
                ustawBierke(bi);
            }
            odswiezLabelKolejka();
            Bierka.przeliczWszystieRuchy();
            Gra.kolejka = Enums.czyjaKolej.Komputer;
            wykonajRuchPC();

            WyczyscPanele();
            Bierka.przeliczWszystieRuchy();  // moze niepotrzebne
            foreach (Bierka bi in Gra.bierkiBiale.Union(Gra.bierkiCzarne))
            {
                ustawBierke(bi);
            }
            odswiezLabelKolejka();
        }
示例#9
0
        public static void wczytajGre()
        {
            string linijka = string.Empty;

            Gra.bierkiBiale.Clear();
            Gra.bierkiCzarne.Clear();

            OpenFileDialog okienko = new OpenFileDialog();

            okienko.Filter = "Stany gry BasicBlue(chess)|*.chess";
            if (okienko.ShowDialog() == DialogResult.OK)
            {
                MessageBox.Show("Wybrano plik: " + okienko.FileName);
            }

            System.IO.StreamReader file = new System.IO.StreamReader(okienko.FileName);

            // odczyt i przetwarzanie każdej linii pliku osobno
            while ((linijka = file.ReadLine()) != null)
            {
                string[] tab = linijka.Split(';');

                if (tab.Length == 5)
                {
                    string typBierki      = tab[1];
                    string kolor          = tab[0];
                    int    x              = int.Parse(tab[2]);
                    int    y              = int.Parse(tab[3]);
                    string ruch           = tab[4];
                    Enums.Kolor_pionków k = Enums.Kolor_pionków.Biale;
                    bool bylRuch          = false;

                    if (ruch == "True")
                    {
                        bylRuch = true;
                    }


                    if (kolor == "Czarne")
                    {
                        k = Enums.Kolor_pionków.Czarne;
                    }
                    else if (kolor == "Biale")
                    {
                        k = Enums.Kolor_pionków.Biale;
                    }

                    if (typBierki == "Pionek")
                    {
                        if (k == Enums.Kolor_pionków.Biale)
                        {
                            Gra.bierkiBiale.Add(new Pionek(k, x, y, bylRuch));
                        }
                        else
                        {
                            Gra.bierkiCzarne.Add(new Pionek(k, x, y, bylRuch));
                        }
                    }
                    else if (typBierki == "Wieza")
                    {
                        if (k == Enums.Kolor_pionków.Biale)
                        {
                            Gra.bierkiBiale.Add(new Wieza(k, x, y, bylRuch));
                        }
                        else
                        {
                            Gra.bierkiCzarne.Add(new Wieza(k, x, y, bylRuch));
                        }
                    }
                    else if (typBierki == "Skoczek")
                    {
                        if (k == Enums.Kolor_pionków.Biale)
                        {
                            Gra.bierkiBiale.Add(new Skoczek(k, x, y, bylRuch));
                        }
                        else
                        {
                            Gra.bierkiCzarne.Add(new Skoczek(k, x, y, bylRuch));
                        }
                    }
                    else if (typBierki == "Goniec")
                    {
                        if (k == Enums.Kolor_pionków.Biale)
                        {
                            Gra.bierkiBiale.Add(new Goniec(k, x, y, bylRuch));
                        }
                        else
                        {
                            Gra.bierkiCzarne.Add(new Goniec(k, x, y, bylRuch));
                        }
                    }
                    else if (typBierki == "Hetman")
                    {
                        if (k == Enums.Kolor_pionków.Biale)
                        {
                            Gra.bierkiBiale.Add(new Hetman(k, x, y, bylRuch));
                        }
                        else
                        {
                            Gra.bierkiCzarne.Add(new Hetman(k, x, y, bylRuch));
                        }
                    }

                    else if (typBierki == "Krol")
                    {
                        if (k == Enums.Kolor_pionków.Biale)
                        {
                            Gra.bierkiBiale.Add(new Krol(k, x, y, bylRuch));
                        }
                        else
                        {
                            Gra.bierkiCzarne.Add(new Krol(k, x, y, bylRuch));
                        }
                    }
                }
                else if (linijka.Contains("1."))
                {
                    Gra.pgnString = linijka;
                }
            }
            file.Close();
            Bierka.przeliczWszystieRuchy();
            Gra.kolejka = Enums.czyjaKolej.Osoba;
        }
示例#10
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();
        }
示例#11
0
        /// <summary>
        /// Konstruktor przyjmujacy bierkę
        /// </summary>
        /// <param name="bierka">Figura, która stoi na polu </param>

        public SzachownicaPole(Bierka bierka)
        {
            this.figurka            = bierka;
            this.biale_pole_planszy = 0;
        }