예제 #1
0
        public void shah(int x, int y, PictureBox[] pics, int[,] mat, int playernum)
        {
            king         k   = new king(new Point(x, y), mat, picbox, playernum, kings, rooks);
            List <Point> lst = k.helping(playernum * -1, mat, x, y, picbox, kings, rooks);
            Node <Point> pos = lst.GetFirst();

            for (int i = 0; i < 64; i++)
            {
                if (picbox[i].BackColor == Color.Green)
                {
                    picbox[i].Enabled = true;
                }
                else
                {
                    picbox[i].Enabled = false;
                }
            }
            while (pos != null)
            {
                picbox[pos.GetInfo().X * 10 + pos.GetInfo().Y - 2 * pos.GetInfo().X].Enabled = true;
                pos = pos.GetNext();
            }

            picbox[x * 10 + y - 2 * x].Enabled = true;

            MessageBox.Show("shaaaaaaaaaaaaaaaaaaaa7");
        }
예제 #2
0
// اذا القطعه كانت مهدده وعند انتقالها للمكان الجديد تكون غير مهدد تعيد حسب اهميتها مثلا جندي 60 القلعه 65 وغير ذلك 0
        public int not_threatened()//good
        {
            int[,] help = new int[8, 8];
            int p1, p2;

            if (playernum == -1)
            {
                p1 = kingsplace[0].X;
                p2 = kingsplace[0].Y;
            }
            else
            {
                p1 = kingsplace[1].X;
                p2 = kingsplace[1].Y;
            }
            king k = new king(new Point(p1, p2), mat, picbox, playernum, kings, rooks);

            if (k.toking(befor.X, befor.Y, mat, picbox, playernum * -1) != new Point(-1, -1))
            {
                for (int i = 0; i < 8; i++)
                {
                    for (int j = 0; j < 8; j++)
                    {
                        help[i, j] = mat[i, j];
                    }
                }
                help[after.X, after.Y] = help[befor.X, befor.Y];
                help[befor.X, befor.Y] = 0;
                if (k.toking(after.X, after.Y, help, picbox, playernum * -1) == new Point(-1, -1))
                {
                    switch (help[after.X, after.Y])
                    {
                    case 1:
                    case -1: return(60);

                    case 2:
                    case -2: return(65);

                    case 3:
                    case -3: return(70);

                    case 4:
                    case -4: return(75);

                    case 5:
                    case -5: return(80);

                    case 6:
                    case -6: return(85);

                    default: break;
                    }
                }
                else
                {
                    return(0);
                }
            }
            return(0);
        }
예제 #3
0
        //عند انتقال القطعه للمكان الجديد هل تكن مهدده من قطع اخرى اذا كانت نعم مهدده تعيد-50وغير ذلك تعيد 50

        public int after_click_threatened() // good
        {
            int x1, y1;

            int[,] help = new int[8, 8];
            if (playernum == -1)
            {
                x1 = kingsplace[0].X;
                y1 = kingsplace[0].Y;
            }
            else
            {
                x1 = kingsplace[1].X;
                y1 = kingsplace[1].Y;
            }
            king k = new king(new Point(x1, y1), mat, picbox, playernum, kings, rooks);

            for (int i = 0; i < 8; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    help[i, j] = mat[i, j];
                }
            }
            help[after.X, after.Y] = help[befor.X, befor.Y];
            help[befor.X, befor.Y] = 0;
            if (k.toking(after.X, after.Y, help, picbox, playernum * -1) != new Point(-1, -1))
            {
                return(-50);
            }
            else
            {
                return(50);
            }
        }
예제 #4
0
        //רוזמרין   اقليل الجبل

        public void Filllist(int n, Point[] pt, List <Point>[] lpt)
        {
            if (n >= 0)
            {
                List <Point> lst = new List <Point>();
                Node <Point> np1 = lst.GetFirst();
                Point        pp  = pt[n - 1];
                int          x   = pp.X;
                int          y   = pp.Y;
                if (mat[x, y] * playernum > 0)//>
                {
                    switch (mat[x, y])
                    {
                    case 1:
                    case -1: Pawn p2 = new Pawn(new Point(x, y), mat, picbox, playernum, kingsplace, kings, rooks);
                        p2.showGreenplaces(x, y, picbox); break;

                    case 2:
                    case -2: rook r2 = new rook(new Point(x, y), mat, picbox, playernum, kingsplace, kings, rooks);
                        r2.showGreenplaces(x, y, picbox); break;

                    case 3:
                    case -3: knight kn2 = new knight(new Point(x, y), mat, picbox, playernum, kingsplace, kings, rooks);
                        kn2.showGreenplaces(x, y, picbox); break;

                    case 4:
                    case -4: fou f2 = new fou(new Point(x, y), mat, picbox, playernum, kingsplace, kings, rooks);
                        f2.showGreenplaces(x, y, picbox); break;

                    case 5:
                    case -5: queen q2 = new queen(new Point(x, y), mat, picbox, playernum, kingsplace, kings, rooks);
                        q2.showGreenplaces(x, y, picbox); break;

                    case -6: king k2 = new king(new Point(x, y), mat, picbox, playernum, kings, rooks);
                        k2.showGreenplaces(x, y, picbox); break;

                    default: break;
                    }

                    for (int i = 0; i < 8; i++)
                    {
                        for (int j = 0; j < 8; j++)
                        {
                            if (picbox[i * 10 + j - 2 * i].BackColor == Color.Green)
                            {
                                np1 = lst.Insert(np1, new Point(i, j));
                            }
                        }
                    }
                    game_main gm = new game_main();
                    gm.refreshcolors(picbox, playernum, mat);
                }
                lpt[n - 1] = lst;
                if (n > 1)
                {
                    Filllist(n - 1, pt, lpt);
                }
            }
        }
예제 #5
0
        //داله تعيد عدد الاماكن الخضراء
        public int count_greenplace() //good
        {
            int count = 0;

            int[,] help = new int[8, 8];
            for (int i = 0; i < 8; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    help[i, j] = mat[i, j];
                }
            }
            help[after.X, after.Y] = help[befor.X, befor.Y];
            help[befor.X, befor.Y] = 0;
            game_main aaa = new game_main();

            aaa.refreshcolors(picbox, playernum, mat);
            switch (help[after.X, after.Y])
            {
            case 1:
            case -1: Pawn p2 = new Pawn(after, help, picbox, playernum, kingsplace, kings, rooks);
                p2.showGreenplaces(after.X, after.Y, picbox);  break;

            case 2:
            case -2: rook r2 = new rook(after, help, picbox, playernum, kingsplace, kings, rooks);
                r2.showGreenplaces(after.X, after.Y, picbox);  break;

            case 3:
            case -3: knight kn2 = new knight(after, help, picbox, playernum, kingsplace, kings, rooks);
                kn2.showGreenplaces(after.X, after.Y, picbox); break;

            case 4:
            case -4: fou f2 = new fou(after, help, picbox, playernum, kingsplace, kings, rooks);
                f2.showGreenplaces(after.X, after.Y, picbox); break;

            case 5:
            case -5: queen q2 = new queen(after, help, picbox, playernum, kingsplace, kings, rooks);
                q2.showGreenplaces(after.X, after.Y, picbox); break;

            case -6: king k2 = new king(after, help, picbox, playernum, kings, rooks);
                k2.showGreenplaces(after.X, after.Y, picbox); break;

            default: break;
            }

            for (int i = 0; i < 8; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    if (picbox[i * 10 + j - 2 * i].BackColor == Color.Green)
                    {
                        count++;
                    }
                }
            }
            return(count);
        }
예제 #6
0
        // פונקציה הזות מקבלת שני פרמטרים שלמים ובודקת מה סוג של הקטע שקבלנו לפי מערך דומימדי
        public void Wathitem(int i, int j)
        {
            if (playernum == -1)
            {
                timer1.Start();
            }
            else
            {
                timer2.Start();
            }


            switch (mat[i, j])// pwan +
            {
            case 1: Pawn p1 = new Pawn(new Point(i, j), mat, picbox, playernum, kingsplace, kings, rooks);
                p1.showGreenplaces(i, j, picbox); break;

            case 2: rook r1 = new rook(new Point(i, j), mat, picbox, playernum, kingsplace, kings, rooks);
                r1.showGreenplaces(i, j, picbox); break;

            case 3: knight kn1 = new knight(new Point(i, j), mat, picbox, playernum, kingsplace, kings, rooks);
                kn1.showGreenplaces(i, j, picbox); break;

            case 4: fou f1 = new fou(new Point(i, j), mat, picbox, playernum, kingsplace, kings, rooks);
                f1.showGreenplaces(i, j, picbox); break;

            case 5: queen q1 = new queen(new Point(i, j), mat, picbox, playernum, kingsplace, kings, rooks);
                q1.showGreenplaces(i, j, picbox); break;

            case 6: king k1 = new king(new Point(i, j), mat, picbox, playernum, kings, rooks);
                k1.showGreenplaces(i, j, picbox); k1.showorangeplace(); break;

            case -1: Pawn p2 = new Pawn(new Point(i, j), mat, picbox, playernum, kingsplace, kings, rooks);
                p2.showGreenplaces(i, j, picbox); break;

            case -2: rook r2 = new rook(new Point(i, j), mat, picbox, playernum, kingsplace, kings, rooks);
                r2.showGreenplaces(i, j, picbox); break;

            case -3: knight kn2 = new knight(new Point(i, j), mat, picbox, playernum, kingsplace, kings, rooks);
                kn2.showGreenplaces(i, j, picbox); break;

            case -4: fou f2 = new fou(new Point(i, j), mat, picbox, playernum, kingsplace, kings, rooks);
                f2.showGreenplaces(i, j, picbox); break;

            case -5: queen q2 = new queen(new Point(i, j), mat, picbox, playernum, kingsplace, kings, rooks);
                q2.showGreenplaces(i, j, picbox); break;

            case -6: king k2 = new king(new Point(i, j), mat, picbox, playernum, kings, rooks);
                k2.showGreenplaces(i, j, picbox); k2.showorangeplace(); break;

            default: break;
            }
        }
예제 #7
0
        public List <Point> helping(int kk, int[,] mat4, int x11, int y11, PictureBox[] picbox3, int[] kings3, int[] rooks3)
        {
            int[,] help = new int[8, 8];


            Point pos11 = new Point(x11, y11);


            king k13 = new king(pos11, mat4, picbox3, kk, kings3, rooks3);

            Point        poo  = new Point();
            Point        po   = k13.toking(x11, y11, mat4, picbox3, kk);
            List <Point> lst5 = new List <Point>();
            Node <Point> nd5  = lst5.GetFirst();


            for (int i = 0; i < 8; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    help[i, j] = mat4[i, j];
                }
            }
            help[x11, y11] = kk;
            if (k13.toking(po.X, po.Y, help, picbox3, kk * -1) == new Point(-1, -1))
            {
                return(lst5);
            }
            else
            {
                poo = k13.toking(po.X, po.Y, help, picbox3, kk * -1);
                nd5 = lst5.Insert(nd5, poo);
                help[poo.X, poo.Y] = kk;
                while (k13.toking(po.X, po.Y, help, picbox3, kk * -1) != new Point(-1, -1))
                {
                    Point pt = k13.toking(po.X, po.Y, help, picbox3, kk * -1);
                    nd5 = lst5.Insert(nd5, pt);
                    help[pt.X, pt.Y] = kk;
                }
            }
            Node <Point> pos = lst5.GetFirst();

            while (pos != null)
            {
                picbox3[pos.GetInfo().X * 10 + pos.GetInfo().Y - 2 * pos.GetInfo().X].Enabled = true;
                pos = pos.GetNext();
            }

            return(lst5);
        }
예제 #8
0
        //اذا حركنا القطعه للمكان الجديد هل يكون ملك العدو مهدد تعيد 70 وغير ذلك 0
        public int enemyking_threatened() // good
        {
            int x1, y1;

            int[,] help = new int[8, 8];
            if (playernum == -1)
            {
                x1 = kingsplace[1].X;
                y1 = kingsplace[1].Y;
            }
            else
            {
                x1 = kingsplace[0].X;
                y1 = kingsplace[0].Y;
            }
            king k = new king(new Point(x1, y1), mat, picbox, playernum, kings, rooks);

            for (int i = 0; i < 8; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    help[i, j] = mat[i, j];
                }
            }
            if (k.toking(x1, y1, help, picbox, playernum * -1) != new Point(-1, -1)) // king enemy are threated before
            {
                return(0);
            }
            else // king enemy not threated before
            {
                help[after.X, after.Y] = help[befor.X, befor.Y];
                help[befor.X, befor.Y] = 0;
                if (k.toking(after.X, after.Y, help, picbox, playernum * -1) != new Point(-1, -1)) // king enemy is threted after
                {
                    return(70);
                }
                else
                {
                    return(0);
                }
            }
        }
예제 #9
0
        public bool deathofking(int i1, int j1, int[,] mat2, PictureBox[] picbox2, int[] kings2, int[] rooks2, int k11)
        {
            Node <Point> np1  = null;
            Point        pos1 = new Point(i1, j1);
            List <Point> lst3 = new List <Point>();

            king k12 = new king(pos1, mat2, picbox2, k11 * -1, kings2, rooks2);

            if (k12.toking(i1, j1, mat2, picbox2, k11) == new Point(-1, -1))
            {
                return(false);
            }
            try
            {
                lst3 = k12.placestomove();
                Point pp1 = lst3.GetFirst().GetInfo();
                np1 = lst3.GetFirst();
            }
            catch (Exception)
            {
            }
            while (np1 != null)
            {
                if (k12.toking(np1.GetInfo().X, np1.GetInfo().Y, mat2, picbox2, k11) != new Point(-1, -1))
                {
                    np1 = lst3.Remove(np1);
                }
                else
                {
                    break;
                }
            }
            if (lst3.IsEmpty() == true)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #10
0
        //להציג מקומות האפשריות בצבע ירוק

        public void showGreenplaces(int i, int j, PictureBox[] pics)
        {
            Node <Point> np   = null;
            Point        pos  = new Point(i, j);
            List <Point> lst2 = new List <Point>();

            king k1 = new king(pos, mat, pics, playernum, kings, rooks);

            try
            {
                lst2 = k1.placestomove();
                Point pp = lst2.GetFirst().GetInfo();
                np = lst2.GetFirst();
            }
            catch (Exception)
            {
            }

            while (np != null)
            {
                int x = np.GetInfo().X;
                int y = np.GetInfo().Y;
                int n = x * 10 + y - 2 * x;
                if (k1.toking(x, y, mat, picbox, playernum * -1) == new Point(-1, -1))
                {
                    pics[n].BackColor = Color.Green;
                    pics[n].Enabled   = true;
                }
                else
                {
                    pics[n].BackColor = Color.Red;
                }
                pics[n].Enabled = true;
                pics[n].Visible = true;
                np = np.GetNext();
            }
        }
예제 #11
0
        public void showGreenplaces(int i, int j, PictureBox[] pics)
        {
            Node <Point> np   = null;
            Point        pos  = new Point(i, j);
            List <Point> lst2 = new List <Point>();
            Point        pt   = new Point();
            knight       r1   = new knight(pos, mat, pics, playernum, kingplaces, kings, rooks);

            if (playernum == -1)
            {
                pt = kingplaces[0];
            }
            else
            {
                pt = kingplaces[1];
            }
            king k = new king(pt, mat, picbox, playernum, kings, rooks);
            bool t = k.deathofking(pt.X, pt.Y, mat, picbox, kings, rooks, playernum * -1);

            try
            {
                lst2 = r1.placestomove();
                Point pp = lst2.GetFirst().GetInfo();
                np = lst2.GetFirst();
            }
            catch (Exception)
            {
            }

            int[,] help = new int[8, 8];
            for (int ii = 0; ii < 8; ii++)
            {
                for (int jj = 0; jj < 8; jj++)
                {
                    help[ii, jj] = mat[ii, jj];
                }
            }

            while (np != null)
            {
                int x = np.GetInfo().X;
                int y = np.GetInfo().Y;
                int n = x * 10 + y - 2 * x;
                int v = help[x, y];
                help[x, y] = playernum;
                if (k.toking(pt.X, pt.Y, help, picbox, playernum * -1) == new Point(-1, -1))
                {
                    pics[n].BackColor = Color.Green;
                    pics[n].Enabled   = true;
                    pics[n].Visible   = true;
                }
                else
                {
                    pics[n].BackColor = Color.Red;
                    pics[n].Enabled   = false;
                    pics[n].Visible   = true;
                }
                help[x, y] = v;
                np         = np.GetNext();
            }
        }
예제 #12
0
        void gooo(int x, int y)
        {
            game_main.loss = 0;
            if (playernum == 1)
            {
                timer1.Start();
            }
            else
            {
                timer2.Start();
            }

            if (flage == true)
            {
                canx  = x;
                cany  = y;
                flage = false;
            }
            if (steps == 40)
            {
                for (int i = 0; i < 64; i++)
                {
                    picbox[i].Enabled = false;
                }
                MessageBox.Show("equality ");
                result = "drow";
                winer  = 3;
            }

            game_main      pppp = new game_main();
            computerplayer comp = new computerplayer();

            if (picbox[x * 10 + y - 2 * x].BackColor == Color.Green || picbox[x * 10 + y - 2 * x].BackColor == Color.Yellow)
            {
                pppp.IFgreenmovelastItem(lastclick, picbox, mat, x, y, pppp.chessimage(mat[lastclick.X, lastclick.Y]), kings, rooks, kingsplace);
                setlosser();
                if (game_main.loss > 0)
                {
                    lossb += game_main.loss + ",";
                }
                else if (game_main.loss != 0)
                {
                    lossw += game_main.loss + ",";
                }

                history(x, y, canx, cany);
                flage = true;

                pppp.refreshcolors(picbox, playernum, mat);
                if (Form2.justkings(mat) == true)
                {
                    steps++;
                }

                playernum = playernum * -1;

                pppp.playerrole(playernum, picbox, mat);
            }
            else
            {
                pppp.refreshcolors(picbox, playernum, mat);

                Wathitem(x, y);
            }
            if (playernum == 1)
            {
                timer1.Stop();
                timer2.Start();
            }
            else
            {
                timer2.Stop();
                timer1.Start();
            }


            int   x1 = kingsplace[0].X;
            int   y1 = kingsplace[0].Y;
            int   x2 = kingsplace[1].X;
            int   y2 = kingsplace[1].Y;
            Point kp = new Point(-1, -1);
            king  k1 = new king(new Point(x1, y1), mat, picbox, playernum, kings, rooks);
            king  k2 = new king(new Point(x2, y2), mat, picbox, playernum, kings, rooks);

            if (k1.toking(x1, y1, mat, picbox, 1) != new Point(-1, -1))
            {
                k1.redtoging(new Point(x1, y1), picbox, -1);
            }
            if (k2.toking(x2, y2, mat, picbox, -1) != new Point(-1, -1))
            {
                k2.redtoging(new Point(x2, y2), picbox, 1);
            }
            if (k1.toking(x1, y1, mat, picbox, 1) != new Point(-1, -1) && playernum == -1)
            {
                k1.shah(x1, y1, picbox, mat, -1);
            }
            if (k2.toking(x2, y2, mat, picbox, -1) != new Point(-1, -1) && playernum == 1)
            {
                k2.shah(x2, y2, picbox, mat, 1);
            }

            if (k1.deathofking(x1, y1, mat, picbox, kings, rooks, 1) == true)
            {
                if (k1.helping(1, mat, x1, y1, picbox, kings, rooks).IsEmpty() == true)
                {
                    timer1.Stop();
                    timer2.Stop();
                    k1.shahmeet("wihte lose!");
                    result = "1";
                    winer  = 1;
                }
            }



            if (k2.deathofking(x2, y2, mat, picbox, kings, rooks, -1) == true)
            {
                if (k2.helping(-1, mat, x2, y2, picbox, kings, rooks).IsEmpty() == true)
                {
                    timer1.Stop();
                    timer2.Stop();
                    k2.shahmeet("blcak lose!");
                    result = "-1";
                    winer  = -1;
                }
            }


            lastclick = new Point(x, y);
        }
예제 #13
0
//  اذا كانت القطعه ملك وهو مهددتعيد90 واذا كانت قطعه اخرى وتستطيع مساعده الملك في المكان الجديد تعيد 100 ,والا تعيد -50 وغير ذلك تعيد 0
        public int my_king_is_threated() // good
        {
            List <Point> lst = new List <Point>();
            int          x, y;

            int[,] help = new int[8, 8];
            if (playernum == -1)  // that the king point
            {
                x = kingsplace[0].X;
                y = kingsplace[0].Y;
            }
            else
            {
                x = kingsplace[1].X;
                y = kingsplace[1].Y;
            }
            king k = new king(new Point(x, y), mat, picbox, playernum, kings, rooks);

            for (int i = 0; i < 8; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    help[i, j] = mat[i, j];
                }
            }
            if (help[befor.X, befor.Y] == 6 * playernum)                                           // if this item king
            {
                if (k.toking(befor.X, befor.Y, help, picbox, playernum * -1) == new Point(-1, -1)) //no threated king
                {
                    return(0);
                }
                else //threated king
                {
                    help[after.X, after.Y] = help[befor.X, befor.Y];
                    help[befor.X, befor.Y] = 0;
                    if (k.toking(after.X, after.Y, help, picbox, playernum * -1) == new Point(-1, -1))
                    {
                        return(90);
                    }
                    else
                    {
                        return(-50);
                    }
                }
            }
            else  // the item not king
            {
                if (k.toking(x, y, help, picbox, playernum * -1) != new Point(-1, -1))// the king is threated
                {
                    help[after.X, after.Y] = help[befor.X, befor.Y];
                    help[befor.X, befor.Y] = 0;
                    if (k.toking(x, y, help, picbox, playernum * -1) == new Point(-1, -1))// after move item king not threted
                    {
                        return(100);
                    }
                    else
                    {
                        return(-50);  // the king is threated & item can't help
                    }
                }
            }

            return(0); // no threteds
        }
예제 #14
0
        //عند انتقال القطعه للمكان الجديد نفحص عدد القطع التي تستطيع القطعه تهديدها ونعيدها واذا ولا قطعه نعيد 0
        public int count_piesethreated() //good
        {
            game_main aaa = new game_main();

            int[,] help = new int[8, 8];
            int k = 0, c = 0;

            for (int i = 0; i < 8; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    help[i, j] = mat[i, j];
                }
            }
            help[after.X, after.Y] = help[befor.X, befor.Y];
            help[befor.X, befor.Y] = 0;
            aaa.refreshcolors(picbox, playernum, help);
            switch (help[after.X, after.Y])
            {
            case 1:
            case -1: Pawn p2 = new Pawn(after, help, picbox, playernum, kingsplace, kings, rooks);
                p2.showGreenplaces(after.X, after.Y, picbox); break;

            case 2:
            case -2: rook r2 = new rook(after, help, picbox, playernum, kingsplace, kings, rooks);
                r2.showGreenplaces(after.X, after.Y, picbox); break;

            case 3:
            case -3: knight kn2 = new knight(after, help, picbox, playernum, kingsplace, kings, rooks);
                kn2.showGreenplaces(after.X, after.Y, picbox); break;

            case 4:
            case -4: fou f2 = new fou(after, help, picbox, playernum, kingsplace, kings, rooks);
                f2.showGreenplaces(after.X, after.Y, picbox); break;

            case 5:
            case -5: queen q2 = new queen(after, help, picbox, playernum, kingsplace, kings, rooks);
                q2.showGreenplaces(after.X, after.Y, picbox); break;

            case 6:
            case -6: king k2 = new king(after, help, picbox, playernum, kings, rooks);
                k2.showGreenplaces(after.X, after.Y, picbox); break;

            default: break;
            }
            for (int d = 0; d < 8; d++)
            {
                for (int e = 0; e < 8; e++)
                {
                    if (picbox[k].BackColor == Color.Green)
                    {
                        if (help[d, e] != 0)
                        {
                            c++;
                        }
                    }
                    k++;
                }
            }
            aaa.refreshcolors(picbox, playernum, help);
            return(c * 10);
        }
예제 #15
0
        //اذا كانت القطعه او عند انتقالها للمكان الجديد تستطيع قتل قطع من قطع العو تعيد حسب اهميته جندي 60 وغير ذلك 0
        public int killer()  // good
        {
            game_main aaa = new game_main();

            aaa.refreshcolors(picbox, playernum, mat); // no color
            switch (mat[befor.X, befor.Y])             // show color green before move the item
            {
            case -1:
            case 1: Pawn p2 = new Pawn(befor, mat, picbox, playernum, kingsplace, kings, rooks);
                p2.showGreenplaces(befor.X, befor.Y, picbox); break;

            case -2:
            case 2: rook r2 = new rook(befor, mat, picbox, playernum, kingsplace, kings, rooks);
                r2.showGreenplaces(befor.X, befor.Y, picbox); break;

            case -3:
            case 3: knight kn2 = new knight(befor, mat, picbox, playernum, kingsplace, kings, rooks);
                kn2.showGreenplaces(befor.X, befor.Y, picbox); break;

            case -4:
            case 4: fou f2 = new fou(befor, mat, picbox, playernum, kingsplace, kings, rooks);
                f2.showGreenplaces(befor.X, befor.Y, picbox); break;

            case -5:
            case 5: queen q2 = new queen(befor, mat, picbox, playernum, kingsplace, kings, rooks);
                q2.showGreenplaces(befor.X, befor.Y, picbox); break;

            case -6:
            case 6: king k2 = new king(befor, mat, picbox, playernum, kings, rooks);
                k2.showGreenplaces(befor.X, befor.Y, picbox); break;

            default: break;
            }
            if (picbox[after.X * 10 + after.Y - 2 * after.X].BackColor == Color.Green) // new point is green?
            {
                if (mat[after.X, after.Y] != 0)                                        // new pos in mat(orginal) not 0
                {
                    switch (Math.Abs(mat[after.X, after.Y]))
                    {
                    case -1:
                    case 1: aaa.refreshcolors(picbox, playernum, mat); return(60);

                    case -2:
                    case 2: aaa.refreshcolors(picbox, playernum, mat); return(62);

                    case -3:
                    case 3: aaa.refreshcolors(picbox, playernum, mat); return(64);

                    case -4:
                    case 4: aaa.refreshcolors(picbox, playernum, mat); return(66);

                    case -5:
                    case 5: aaa.refreshcolors(picbox, playernum, mat); return(68);

                    default: break;
                    }
                }
            }

            return(0);
        }
예제 #16
0
        public void computerplayer1(int playernum, int[] kings, int[] rooks, Point[] kingsplace, PictureBox[] picbox, int[,] mat)
        {
            Point        last = new Point();
            Random       rd = new Random();
            game_main    pppp = new game_main();
            int          i, j, newx, newy, found = 0, c = 0, a, m = 0, p, timer;
            List <Point> lst = new List <Point>();

            List <Point> lst2 = new List <Point>();
            Node <Point> np   = lst2.GetFirst();
            Node <Point> np2;

            timer = rd.Next(3) + 1;
            TimeSpan interval = new TimeSpan(0, 0, timer);


            for (i = 0; i < 8 && found == 0; i++)
            {
                c     = 0;
                found = 0;
                for (j = 0; j < 8 && found == 0; j++)
                {
                    if (mat[i, j] * playernum > 0)
                    {
                        last = new Point(i, j);

                        switch (mat[i, j])
                        {
                        case -1:
                        case 1: Pawn p2 = new Pawn(new Point(i, j), mat, picbox, playernum, kingsplace, kings, rooks);
                            p2.showGreenplaces(i, j, picbox); lst = p2.placestomove(); break;

                        case -2:
                        case 2: rook r2 = new rook(new Point(i, j), mat, picbox, playernum, kingsplace, kings, rooks);
                            r2.showGreenplaces(i, j, picbox); lst = r2.placestomove(); break;

                        case -3:
                        case 3: knight kn2 = new knight(new Point(i, j), mat, picbox, playernum, kingsplace, kings, rooks);
                            kn2.showGreenplaces(i, j, picbox); lst = kn2.placestomove(); break;

                        case -4:
                        case 4: fou f2 = new fou(new Point(i, j), mat, picbox, playernum, kingsplace, kings, rooks);
                            f2.showGreenplaces(i, j, picbox); lst = f2.placestomove(); break;

                        case -5:
                        case 5: queen q2 = new queen(new Point(i, j), mat, picbox, playernum, kingsplace, kings, rooks);
                            q2.showGreenplaces(i, j, picbox); lst = q2.placestomove(); break;

                        case -6:
                        case 6: king k2 = new king(new Point(i, j), mat, picbox, playernum, kings, rooks);
                            k2.showGreenplaces(i, j, picbox); lst = k2.placestomove(); break;

                        default: break;
                        }
                    }
                    if (lst.IsEmpty() == false)
                    {
                        for (int k = 0; k < 8; k++)
                        {
                            for (int t = 0; t < 8; t++)
                            {
                                if (picbox[k * 10 + t - 2 * k].BackColor == Color.Green)
                                {
                                    np = lst2.Insert(np, new Point(k, t));
                                    c++;
                                }
                            }
                        }
                        if (lst2.IsEmpty() == false)
                        {
                            found = 1;
                        }
                    }
                }
            }


            a   = rd.Next(c + 1);
            m   = 0;
            np2 = lst2.GetFirst();
            while (a != m)
            {
                np2 = np2.GetNext();
                m++;
            }


            int b1 = last.X;
            int b2 = last.Y;

            lx = new Point(b1, b2);
            computerplayer.oldstep = new Point(b1, b2);
            newx = np.GetInfo().X;
            newy = np.GetInfo().Y;
            computerplayer.newstep = new Point(newx, newy);
            nx = new Point(newx, newy);
            if (mat[newx, newy] != 0)
            {
                computerplayer.loscomp = mat[newx, newy];
            }
            if (newx == 7 * playernum && mat[b1, b2] == 1 * playernum)
            {
                mat[b1, b2] = 0;

                mat[newx, newy] = 5;

                picbox[b1 * 10 + b2 - 2 * b1].ImageLocation = null;
                Thread.Sleep(interval);
                Application.DoEvents();
                picbox[newx * 10 + newy - 2 * newx].ImageLocation = pppp.chessimage(5);

                picbox[newx * 10 + newy - 2 * newx].SizeMode = PictureBoxSizeMode.CenterImage;
                pppp.refreshcolors(picbox, playernum, mat);
            }


            else if (newx == 0 && mat[b1, b2] * playernum == -1 * playernum)
            {
                mat[b1, b2] = 0;

                mat[newx, newy] = -5;

                picbox[b1 * 10 + b2 - 2 * b1].ImageLocation = null;
                Thread.Sleep(interval);
                Application.DoEvents();
                picbox[newx * 10 + newy - 2 * newx].ImageLocation = pppp.chessimage(-5);

                picbox[newx * 10 + newy - 2 * newx].SizeMode = PictureBoxSizeMode.CenterImage;
                pppp.refreshcolors(picbox, playernum, mat);
            }
            else
            {
                p           = mat[b1, b2];
                mat[b1, b2] = 0;

                mat[newx, newy] = p;

                picbox[b1 * 10 + b2 - 2 * b1].ImageLocation = null;
                Thread.Sleep(interval);
                Application.DoEvents();

                picbox[newx * 10 + newy - 2 * newx].ImageLocation = pppp.chessimage(p);

                picbox[newx * 10 + newy - 2 * newx].SizeMode = PictureBoxSizeMode.CenterImage;

                pppp.refreshcolors(picbox, playernum, mat);
            }
        }