예제 #1
0
 void Ruch_SI() //ruch komputera
 {
     if (trwa)
     {
         if (s0 && gra.kolej == 0 && Czy_nie_pat(0))
         {
             SI si = new SI(gra, 0);
             wybor = si.Wybor();
             if (!gra.seria)
             {
                 ObslugaPlanszy(0);
             }
             wybor = si.Cel();
             ObslugaPlanszy(0);
         }
         else if (s1 && gra.kolej == 1 && Czy_nie_pat(1))
         {
             SI si = new SI(gra, 1);
             wybor = si.Wybor();
             if (!gra.seria)
             {
                 ObslugaPlanszy(0);
             }
             wybor = si.Cel();
             ObslugaPlanszy(0);
         }
     }
 }
예제 #2
0
        public void Kopia(Gra g)
        {
            licznik_bez_bic = g.licznik_bez_bic;

            kolej   = g.kolej;//nr gracza ktory ma wykonac ruch
            seria   = g.seria;
            wygrany = g.wygrany;
            koniec  = g.koniec;
            lp[0]   = g.lp[0];
            lp[1]   = g.lp[1];
            lk[0]   = g.lk[0];
            lk[1]   = g.lk[1];

            if (seria)
            {
                p_serii = new Pionek(g.p_serii);
            }

            pionki = new Pionek[2][];

            pionki[0] = new Pionek[12];
            pionki[1] = new Pionek[12];

            for (int j = 0; j <= 1; j++)
            {
                for (int i = 0; i <= 11; i++)
                {
                    pionki[j][i] = new Pionek(g.pionki[j][i]);
                }
            }
        }
예제 #3
0
 public void Kopia(Pionek p)
 {
     aktywny = p.aktywny;
     god     = p.god;
     gracz   = p.gracz;
     w       = p.w;
     r       = p.r;
 }
예제 #4
0
 public void usunPionek(Pionek co)
 {
     foreach (var a in this.wszystkiePionki.ToList())
     {
         if (co == a)
         {
             this.wszystkiePionki.Remove(a);
         }
     }
 }
예제 #5
0
 bool ZnajdzPionek(Pionek wybor, Pionek[] pionki)
 {
     for (int i = 0; i <= 11; i++)
     {
         if ((pionki[i].aktywny) && (wybor.r == pionki[i].r) && (wybor.w == pionki[i].w))
         {
             return(true);
         }
     }
     return(false);
 }
예제 #6
0
        List <Wierz> RozwinWierz(Wierz w)         //robi dla w :-dzieci(zruchem) -dodaje do list
        {
            List <Wierz> lw = new List <Wierz>(); //nowe wierzcholki od ojca

            Pionek p = new Pionek(0);

            Wierz nowy_wierz = new Wierz(w, gracz);


            void p_cel(int y, int x)
            {
                p.w = y;
                p.r = x;
            }

            foreach (Pionek t in w.gra.pionki[w.gra.kolej])
            {
                if (t.aktywny)
                {
                    for (int y = 0; y < 8; y++)
                    {
                        for (int x = 0; x < 8; x++)
                        {
                            p_cel(y, x);

                            if (nowy_wierz.Zagraj(t, p))
                            {
                                Kraw nowa_kraw = new Kraw(w, nowy_wierz);
                                nowa_kraw.p1 = new Pionek(t);
                                nowa_kraw.p2 = new Pionek(p);

                                {
                                    lw.Add(nowy_wierz);
                                    W.Add(nowy_wierz);
                                    K.Add(nowa_kraw);
                                }
                                nowy_wierz = new Wierz(w, gracz);
                            }
                        }
                    }
                }
            }

            w.rozwiniety = true;



            //dodaje do lisci//czyli swierza nowa warstwa
            return(lw);
        }
예제 #7
0
        void UstawPionki()
        {
            pionki = new Pionek[2][];

            pionki[0] = new Pionek[12];
            pionki[1] = new Pionek[12];
            for (int j = 0; j <= 11; j++)
            {
                pionki[0][j] = new Pionek(0);
                pionki[1][j] = new Pionek(1);
            }
            int i = 0;

            pionki[i][0].UstPoz(0, 0);
            pionki[i][1].UstPoz(0, 2);
            pionki[i][2].UstPoz(0, 4);
            pionki[i][3].UstPoz(0, 6);
            pionki[i][4].UstPoz(1, 1);
            pionki[i][5].UstPoz(1, 3);
            pionki[i][6].UstPoz(1, 5);
            pionki[i][7].UstPoz(1, 7);
            pionki[i][8].UstPoz(2, 0);
            pionki[i][9].UstPoz(2, 2);
            pionki[i][10].UstPoz(2, 4);
            pionki[i][11].UstPoz(2, 6);

            i = 1;
            pionki[i][0].UstPoz(5, 1);
            pionki[i][1].UstPoz(5, 3);
            pionki[i][2].UstPoz(5, 5);
            pionki[i][3].UstPoz(5, 7);
            pionki[i][4].UstPoz(6, 0);
            pionki[i][5].UstPoz(6, 2);
            pionki[i][6].UstPoz(6, 4);
            pionki[i][7].UstPoz(6, 6);
            pionki[i][8].UstPoz(7, 1);
            pionki[i][9].UstPoz(7, 3);
            pionki[i][10].UstPoz(7, 5);
            pionki[i][11].UstPoz(7, 7);
        }
예제 #8
0
        bool DoPrzodu(Pionek w, Pionek c)
        {
            if (w.god)
            {
                return(true);
            }
            if (w.gracz == 0)
            {
                if (c.w > w.w)
                {
                    return(true);
                }
            }
            if (w.gracz == 1)
            {
                if (c.w < w.w)
                {
                    return(true);
                }
            }

            return(false);
        }
예제 #9
0
        public Warcaby()
        {
            InitializeComponent();
            pionek1  = Image.FromFile("graphics/p1.png");
            pionek2  = Image.FromFile("graphics/p2.png");
            krolowa1 = Image.FromFile("graphics/k1.png");
            krolowa2 = Image.FromFile("graphics/k2.png");



            gra = new Gra();
            OdsPlansze();
            wybor       = new Pionek(0);
            c           = new Pionek(0);
            w           = new Pionek(0);
            wybrano     = false;
            label3.Text = "Twoja kolej";
            label2.Text = "Czekaj";
            label4.Text = "";

            s0 = false;
            s1 = false;
        }
예제 #10
0
        bool Awans(Pionek p)
        {
            if (!p.god)
            {
                if (Wolny(p))
                {
                    if (p.gracz == 0)
                    {
                        if (p.w == 7)
                        {
                            p.god = true;
                            lk[0]++;
                        }
                    }

                    else if (p.w == 0)
                    {
                        p.god = true;
                        lk[1]++;
                    }
                }
            }
            return(false);
        }
예제 #11
0
        bool Przesun(Pionek wybor, Pionek cel)
        {
            for (int j = 0; j <= 11; j++)
            {
                if ((pionki[wybor.gracz][j].aktywny) && (wybor.r == pionki[wybor.gracz][j].r) && (wybor.w == pionki[wybor.gracz][j].w))
                {
                    if (wybor.god)
                    {
                        Pionek w = wybor;
                        Pionek c = cel;
                        Pionek bicie;


                        bicie = new Pionek(1);


                        if (!((w.r == c.r) || (w.w == c.w)))

                        {
                            int opt = 0;
                            //znajduje rodzaj ukosu
                            for (int i = 1; i <= 7; i++)
                            {
                                if ((w.w + i == c.w) && (w.r + i == c.r))
                                {
                                    opt = 1;
                                }
                                if ((w.w + i == c.w) && (w.r - i == c.r))
                                {
                                    opt = 2;
                                }
                                if ((w.w - i == c.w) && (w.r + i == c.r))
                                {
                                    opt = 3;
                                }
                                if ((w.w - i == c.w) && (w.r - i == c.r))
                                {
                                    opt = 4;
                                }
                            }
                            if (opt == 0)
                            {
                                return(false);
                            }

                            //czy nie ma swojego pionka na trasie i jedno bicie
                            int bic = 0;
                            for (int i = 1; i <= Math.Abs(w.w - c.w); i++)
                            {
                                if (opt == 1)
                                {
                                    if (plansza[w.w + i][w.r + i].zajete)
                                    {
                                        if (plansza[w.w + i][w.r + i].gracz != w.gracz)
                                        {
                                            if (bic < 1)
                                            {
                                                bicie.UstPoz(w.w + i, w.r + i);
                                                bic++;
                                            }
                                        }
                                    }
                                }

                                if (opt == 2)
                                {
                                    if (plansza[w.w + i][w.r - i].zajete)
                                    {
                                        if (plansza[w.w + i][w.r - i].gracz != w.gracz)
                                        {
                                            if (bic < 1)
                                            {
                                                bicie.UstPoz(w.w + i, w.r - i);
                                                bic++;
                                            }
                                        }
                                    }
                                }

                                if (opt == 3)
                                {
                                    if (plansza[w.w - i][w.r + i].zajete)
                                    {
                                        if (plansza[w.w - i][w.r + i].gracz != w.gracz)
                                        {
                                            if (bic < 1)
                                            {
                                                bicie.UstPoz(w.w - i, w.r + i);
                                                bic++;
                                            }
                                        }
                                    }
                                }
                                if (opt == 4)
                                {
                                    if (plansza[w.w - i][w.r - i].zajete)
                                    {
                                        if (plansza[w.w - i][w.r - i].gracz != w.gracz)
                                        {
                                            if (bic < 1)
                                            {
                                                bicie.UstPoz(w.w - i, w.r - i);
                                                bic++;
                                            }
                                        }
                                    }
                                }
                            }
                            if (!Wolny(w))
                            {
                                if (bic != 1)
                                {
                                    return(false);
                                }
                            }
                            if (Wolny(w))
                            {
                                if (bic != 0)
                                {
                                    return(false);
                                }
                            }
                            {
                                Bij(bicie.w, bicie.r);
                                licznik_bez_bic = 15;
                            }
                        }
                        else if (!Wolny(wybor))
                        {
                            return(false);
                        }
                    }

                    pionki[wybor.gracz][j].UstPoz(cel.w, cel.r);
                    Awans(pionki[wybor.gracz][j]);

                    if (pionki[wybor.gracz][j].god)
                    {
                        licznik_bez_bic--;
                    }

                    WczytajPlansze();
                    return(true);
                }
            }

            return(false);
        }
예제 #12
0
        public bool Ruch(Pionek wybor, Pionek cel)
        {
            ///////////////////////////////////////////////////////////
            if (plansza[cel.w][cel.r].zajete)//pole cel juz jest zajete
            {
                return(false);
            }
            ////////////////////////////////////////////////
            if (plansza[wybor.w][wybor.r].zajete)             //wybrano jakis pionek
            {
                if (plansza[wybor.w][wybor.r].gracz == kolej) //sprawdzenie czy moze wykonac ruch
                {
                    if (seria)
                    {
                        if (wybor.w != p_serii.w || wybor.r != p_serii.r)
                        {
                            return(false);
                        }
                    }

                    if (Moze(wybor, cel))
                    {
                        if (Wolny(wybor))
                        {
                            if (DoPrzodu(wybor, cel))
                            {
                                if (Przesun(wybor, cel))
                                {
                                    PrzKolej(); //koniec ruchu jezeli nie ma mozliwosci bicia
                                    seria = false;
                                    Wynik();
                                    return(true);
                                }
                            }
                        }
                        else
                        {
                            if (!wybor.god)
                            {
                                if (plansza[(wybor.w + cel.w) / 2][(wybor.r + cel.r) / 2].zajete == true)
                                {
                                    if (plansza[(wybor.w + cel.w) / 2][(wybor.r + cel.r) / 2].gracz != wybor.gracz)
                                    {
                                        if (Przesun(wybor, cel))
                                        {
                                            wybor.w = cel.w;
                                            wybor.r = cel.r;
                                            if (Wolny(wybor))
                                            {
                                                PrzKolej(); //koniec ruchu jezeli nie ma mozliwosci bicia
                                                seria = false;
                                            }
                                            else
                                            {
                                                seria   = true;
                                                p_serii = wybor;
                                            }
                                            Wynik();
                                            return(true);
                                        }
                                    }
                                }
                            }
                            else

                            if (Przesun(wybor, cel))
                            {
                                wybor.w = cel.w;
                                wybor.r = cel.r;
                                if (Wolny(wybor))
                                {
                                    PrzKolej(); //koniec ruchu jezeli nie ma mozliwosci bicia
                                    seria = false;
                                }
                                else
                                {
                                    seria   = true;
                                    p_serii = wybor;
                                }
                                Wynik();
                                return(true);
                            }
                        }
                    }
                }
            }
            return(false);
        }
예제 #13
0
        bool Moze(Pionek w, Pionek c)
        {
            if (!w.god && !seria && !DoPrzodu(w, c))
            {
                return(false);                                   //dodane
            }
            if (Math.Abs(w.w - c.w) == 1)
            {
                if (Math.Abs(w.r - c.r) == 1)
                {
                    return(true);
                }
            }
            if (Math.Abs(w.w - c.w) == 2)
            {
                if (Math.Abs(w.r - c.r) == 2)
                {
                    if (plansza[(w.w + c.w) / 2][(w.r + c.r) / 2].zajete)
                    {
                        if (plansza[(w.w + c.w) / 2][(w.r + c.r) / 2].gracz != kolej)//sprawdza czy zjadzie bicie
                        {
                            Bij((w.w + c.w) / 2, (w.r + c.r) / 2);
                            seria = true;
                            return(true);
                        }
                    }
                }
            }
            if (w.god)
            {
                //ukos
                int opt   = 0;
                int bicie = 0;

                //znajduje rodzaj ukosu
                for (int i = 1; i <= Math.Abs(w.w - c.w); i++)
                {
                    if ((w.w + i == c.w) && (w.r + i == c.r))
                    {
                        opt = 1;
                    }
                    if ((w.w + i == c.w) && (w.r - i == c.r))
                    {
                        opt = 2;
                    }
                    if ((w.w - i == c.w) && (w.r + i == c.r))
                    {
                        opt = 3;
                    }
                    if ((w.w - i == c.w) && (w.r - i == c.r))
                    {
                        opt = 4;
                    }
                }
                if (opt == 0)
                {
                    return(false);
                }

                //czy nie ma swojego pionka na trasie i jedno bicie
                for (int i = 1; i <= Math.Abs(w.w - c.w); i++)
                {
                    if (opt == 1)
                    {
                        if (plansza[w.w + i][w.r + i].zajete)
                        {
                            if (plansza[w.w + i][w.r + i].gracz != w.gracz)
                            {
                                bicie++; if (bicie > 1)
                                {
                                    return(false);
                                }
                            }
                            else
                            {
                                return(false);
                            }
                        }
                    }
                    if (opt == 2)
                    {
                        if (plansza[w.w + i][w.r - i].zajete)
                        {
                            if (plansza[w.w + i][w.r - i].gracz != w.gracz)
                            {
                                bicie++; if (bicie > 1)
                                {
                                    return(false);
                                }
                            }
                            else
                            {
                                return(false);
                            }
                        }
                    }
                    if (opt == 3)
                    {
                        if (plansza[w.w - i][w.r + i].zajete)
                        {
                            if (plansza[w.w - i][w.r + i].gracz != w.gracz)
                            {
                                bicie++; if (bicie > 1)
                                {
                                    return(false);
                                }
                            }
                            else
                            {
                                return(false);
                            }
                        }
                    }
                    if (opt == 4)
                    {
                        if (plansza[w.w - i][w.r - i].zajete)
                        {
                            if (plansza[w.w - i][w.r - i].gracz != w.gracz)
                            {
                                bicie++; if (bicie > 1)
                                {
                                    return(false);
                                }
                            }
                            else
                            {
                                return(false);
                            }
                        }
                    }
                }

                return(true);
            }
            return(false);
        }
예제 #14
0
 public bool Zagraj(Pionek wybor, Pionek cel)//wykonuje ruch w grze
 {
     return(gra.Ruch(new Pionek(wybor), new Pionek(cel)));
 }
            public override bool Equals(object obj)
            {
                Pionek p = (Pionek)obj;

                return(p.x == x && p.y == y);
            }
예제 #16
0
        public bool Wolny(Pionek p) //czy nie musi niczego bić
        {
            bool opt1, opt2, opt3, opt4;

            opt1 = true;
            opt2 = true;
            opt3 = true;
            opt4 = true;

            if (!p.god)
            {
                if (seria || p.gracz == 1)
                {
                    if ((p.w >= 2) && (p.r >= 2))
                    {
                        if (plansza[p.w - 1][p.r - 1].zajete)
                        {
                            if (plansza[p.w - 1][p.r - 1].gracz != p.gracz)
                            {
                                if (!plansza[p.w - 2][p.r - 2].zajete)
                                {
                                    return(false);
                                }
                            }
                        }
                    }
                }

                if (seria || p.gracz == 1)
                {
                    if ((p.w >= 2) && (p.r <= 5))
                    {
                        if (plansza[p.w - 1][p.r + 1].zajete)
                        {
                            if (plansza[p.w - 1][p.r + 1].gracz != p.gracz)
                            {
                                if (!plansza[p.w - 2][p.r + 2].zajete)
                                {
                                    return(false);
                                }
                            }
                        }
                    }
                }

                if (seria || p.gracz == 0)
                {
                    if ((p.w <= 5) && (p.r >= 2))
                    {
                        if (plansza[p.w + 1][p.r - 1].zajete)
                        {
                            if (plansza[p.w + 1][p.r - 1].gracz != p.gracz)
                            {
                                if (!plansza[p.w + 2][p.r - 2].zajete)
                                {
                                    return(false);
                                }
                            }
                        }
                    }
                }
                if (seria || p.gracz == 0)
                {
                    if ((p.w <= 5) && (p.r <= 5))
                    {
                        if (plansza[p.w + 1][p.r + 1].zajete)
                        {
                            if (plansza[p.w + 1][p.r + 1].gracz != p.gracz)
                            {
                                if (!plansza[p.w + 2][p.r + 2].zajete)
                                {
                                    return(false);
                                }
                            }
                        }
                    }
                }
            }
            if (p.god)
            {
                for (int i = 0; i <= 7; i++)
                {
                    if ((p.w - i >= 2) && (p.r - i >= 2) && opt1)
                    {
                        if ((!plansza[p.w - i][p.r - i].zajete) || (plansza[p.w - i][p.r - i].gracz == p.gracz))
                        {
                            if (plansza[p.w - i - 1][p.r - i - 1].zajete)
                            {
                                if (plansza[p.w - i - 1][p.r - i - 1].gracz != p.gracz)
                                {
                                    if (!plansza[p.w - i - 2][p.r - i - 2].zajete)
                                    {
                                        return(false);
                                    }
                                }
                                else
                                {
                                    opt1 = false;
                                }
                            }
                        }
                    }

                    if ((p.w - i >= 2) && (p.r + i <= 5) && opt2)
                    {
                        if ((!plansza[p.w - i][p.r + i].zajete) || (plansza[p.w - i][p.r + i].gracz == p.gracz))
                        {
                            if (plansza[p.w - i - 1][p.r + i + 1].zajete)
                            {
                                if (plansza[p.w - i - 1][p.r + i + 1].gracz != p.gracz)
                                {
                                    if (!plansza[p.w - i - 2][p.r + i + 2].zajete)
                                    {
                                        return(false);
                                    }
                                }
                                else
                                {
                                    opt2 = false;
                                }
                            }
                        }
                    }


                    if ((p.w + i <= 5) && (p.r - i >= 2) && opt3)
                    {
                        if ((!plansza[p.w + i][p.r - i].zajete) || (plansza[p.w + i][p.r - i].gracz == p.gracz))
                        {
                            if (plansza[p.w + i + 1][p.r - i - 1].zajete)
                            {
                                if (plansza[p.w + i + 1][p.r - i - 1].gracz != p.gracz)
                                {
                                    if (!plansza[p.w + i + 2][p.r - i - 2].zajete)
                                    {
                                        return(false);
                                    }
                                }
                                else
                                {
                                    opt3 = false;
                                }
                            }
                        }
                    }

                    if ((p.w + i <= 5) && (p.r + i <= 5) && opt4)
                    {
                        if ((!plansza[p.w + i][p.r + i].zajete) || (plansza[p.w + i][p.r + i].gracz == p.gracz))
                        {
                            if (plansza[p.w + i + 1][p.r + i + 1].zajete)
                            {
                                if (plansza[p.w + i + 1][p.r + i + 1].gracz != p.gracz)
                                {
                                    if (!plansza[p.w + i + 2][p.r + i + 2].zajete)
                                    {
                                        return(false);
                                    }
                                }
                                else
                                {
                                    opt4 = false;
                                }
                            }
                        }
                    }
                }
            }


            return(true);
        }
예제 #17
0
 public Pionek(Pionek p)
 {
     Kopia(p);
 }