Exemplo n.º 1
0
        public int isChecked(Board brd2)
        {
            int c2, m;

            if (color == 1)
            {
                c2 = 2;
            }
            else
            {
                c2 = 1;
            }
            Board b = brd2;
            int   i, j;

            for (i = 0; i < 8; i++)
            {
                for (j = 0; j < 8; j++)
                {
                    b.setSquare(brd2.getInfo(i, j), i, j);
                }
            }
            Pawn   pawn   = new Pawn(c2, 0, 0);
            Castle castle = new Castle(c2, 0, 0);
            Knight knight = new Knight(c2, 0, 0);
            Queen  queen  = new Queen(c2, 0, 0);
            Bishop bishop = new Bishop(c2, 0, 0);
            Point  p      = brd2.searchKing(color);
            King   king   = new King(c2, 0, 0);
            int    r      = p.x;
            int    s      = p.y;

            for (i = 0; i < 8; i++)
            {
                for (j = 0; j < 8; j++)
                {
                    m = b.getInfo(i, j);
                    switch (m)
                    {
                    case 0:
                        break;

                    case 1:
                        if (c2 == 1)
                        {
                            castle.x = i;
                            castle.y = j;
                            if (castle.move(b, r, s) == 1)
                            {
                                return(1);
                            }
                        }
                        break;

                    case 2:
                        if (c2 == 1)
                        {
                            knight.x = i;
                            knight.y = j;
                            if (knight.move(b, r, s) == 1)
                            {
                                return(1);
                            }
                        }
                        break;

                    case 3:
                        if (c2 == 1)
                        {
                            bishop.x = i;
                            bishop.y = j;
                            if (bishop.move(b, r, s) == 1)
                            {
                                return(1);
                            }
                        }
                        break;

                    case 4:
                        if (c2 == 1)
                        {
                            queen.x = i;
                            queen.y = j;
                            if (queen.move(b, r, s) == 1)
                            {
                                return(1);
                            }
                        }
                        break;

                    case 5:
                        if (c2 == 2)
                        {
                            king.x = i;
                            king.y = j;
                            if (queen.move(b, r, s) == 1)
                            {
                                return(1);
                            }
                        }
                        break;

                    case 6:
                        if (c2 == 1)
                        {
                            pawn.x = i;
                            pawn.y = j;
                            if (pawn.move(b, r, s) == 1)
                            {
                                return(1);
                            }
                        }
                        break;

                    case 7:
                        if (c2 == 2)
                        {
                            castle.x = i;
                            castle.y = j;
                            if (castle.move(b, r, s) == 1)
                            {
                                return(1);
                            }
                        }
                        break;

                    case 8:
                        if (c2 == 2)
                        {
                            knight.x = i;
                            knight.y = j;
                            if (knight.move(b, r, s) == 1)
                            {
                                return(1);
                            }
                        }
                        break;

                    case 9:
                        if (c2 == 2)
                        {
                            bishop.x = i;
                            bishop.y = j;
                            if (bishop.move(b, r, s) == 1)
                            {
                                return(1);
                            }
                        }
                        break;

                    case 10:
                        if (c2 == 2)
                        {
                            queen.x = i;
                            queen.y = j;
                            if (queen.move(b, r, s) == 1)
                            {
                                return(1);
                            }
                        }
                        break;

                    case 11:
                        if (c2 == 2)
                        {
                            king.x = i;
                            king.y = j;
                            if (king.move(b, r, s) == 1)
                            {
                                return(1);
                            }
                        }
                        break;

                    case 12:
                        if (c2 == 2)
                        {
                            pawn.x = i;
                            pawn.y = j;
                            if (pawn.move(b, r, s) == 1)
                            {
                                return(1);
                            }
                        }
                        break;
                    }
                }
            }
            return(0);
        }
Exemplo n.º 2
0
        public bool ChecktestforRookBlack(GameBoard _Game, byte _X, byte _Y)
        {
            int i;

            for (i = 0; i < _Game.White.Count; i++)
            {
                Coordinate _Next     = new Coordinate(_X, _Y);
                string     typecheck = _Game.White[i].GetType().ToString();
                switch (typecheck)
                {
                case "Chess.Pawn":
                    Pawn Pawnmover = new Pawn("a");
                    Pawnmover = (Pawn)_Game.White[i];
                    if (Pawnmover.isMovable(_Game, _Next))
                    {
                        return(true);
                    }
                    break;

                case "Chess.Bishop":
                    Bishop Bishopmover = new Bishop("a");
                    Bishopmover = (Bishop)_Game.White[i];
                    if (Bishopmover.isMovable(_Game, _Next))
                    {
                        return(true);
                    }
                    break;

                case "Chess.Queen":
                    Queen Queenmover = new Queen("a");
                    Queenmover = (Queen)_Game.White[i];
                    if (Queenmover.isMovable(_Game, _Next))
                    {
                        return(true);
                    }
                    break;

                case "Chess.Knight":
                    Knight Knightmover = new Knight("a");
                    Knightmover = (Knight)_Game.White[i];
                    if (Knightmover.isMovable(_Game, _Next))
                    {
                        return(true);
                    }

                    break;

                case "Chess.Castle":
                    Castle Castlemover = new Castle("a");
                    Castlemover = (Castle)_Game.White[i];
                    if (Castlemover.isMovable(_Game, _Next))
                    {
                        return(true);
                    }
                    break;

                case "Chess.King":
                    King Kingmover2 = new King("a");
                    Kingmover2 = (King)_Game.White[i];
                    if (Kingmover2.isMovable(_Game, _Next))
                    {
                        return(true);
                    }
                    break;
                }
            }

            return(false);
        }
Exemplo n.º 3
0
        public bool ChecktestWhite(GameBoard _Game)
        {
            int  i;
            King Kingmover1 = new King("White");

            for (i = 0; i < _Game.White.Count; i++)
            {
                if (_Game.White[i].GetType().ToString().Contains("King"))
                {
                    Kingmover1 = (King)_Game.White[i];
                    break;
                }
            }
            Coordinate _Next = Kingmover1.Current;
            string     typecheck;

            for (i = 0; i < _Game.Black.Count; i++)
            {
                typecheck = _Game.Black[i].GetType().ToString();
                if (_Game.Black[i].Current.X == 99)
                {
                    continue;
                }
                switch (typecheck)
                {
                case "Chess.Pawn":
                    Pawn Pawnmover = new Pawn("a");
                    Pawnmover = (Pawn)_Game.Black[i];
                    if (Pawnmover.isMovable(_Game, _Next))
                    {
                        return(true);
                    }
                    break;

                case "Chess.Bishop":
                    Bishop Bishopmover = new Bishop("a");
                    Bishopmover = (Bishop)_Game.Black[i];
                    if (Bishopmover.isMovable(_Game, _Next))
                    {
                        return(true);
                    }
                    break;

                case "Chess.Queen":
                    Queen Queenmover = new Queen("a");
                    Queenmover = (Queen)_Game.Black[i];
                    if (Queenmover.isMovable(_Game, _Next))
                    {
                        return(true);
                    }
                    break;

                case "Chess.Knight":
                    Knight Knightmover = new Knight("a");
                    Knightmover = (Knight)_Game.Black[i];
                    if (Knightmover.isMovable(_Game, _Next))
                    {
                        return(true);
                    }

                    break;

                case "Chess.Castle":
                    Castle Castlemover = new Castle("a");
                    Castlemover = (Castle)_Game.Black[i];
                    if (Castlemover.isMovable(_Game, _Next))
                    {
                        return(true);
                    }
                    break;

                case "Chess.King":
                    King Kingmover2 = new King("a");
                    Kingmover2 = (King)_Game.Black[i];
                    if (Kingmover2.isMovable(_Game, _Next))
                    {
                        return(true);
                    }
                    break;
                }
            }

            return(false);
        }
Exemplo n.º 4
0
        public int canDefend(int color)
        {
            Board  b = new Board();
            Castle castle = new Castle(color, 0, 0);
            Pawn   pawn = new Pawn(color, 0, 0);
            Knight knight = new Knight(color, 0, 0);
            Bishop bishop = new Bishop(color, 0, 0);
            Queen  queen = new Queen(color, 0, 0);
            int    i, j, m, n, f = 0;

            for (i = 0; i < 8; i++)
            {
                for (j = 0; j < 8; j++)
                {
                    b.setSquare(this.getInfo(i, j), i, j);
                }
            }
            Point p    = b.searchKing(color);
            King  king = new King(color, p.x, p.y);

            for (i = 0; i < 8; i++)
            {
                for (j = 0; j < 8; j++)
                {
                    if (b.getInfo(i, j) == 0)
                    {
                    }
                    else if (b.getInfo(i, j) == (color == 1 ? 1 : 7))
                    {
                        castle.x = i;
                        castle.y = j;
                        for (m = 0; m < 8; m++)
                        {
                            for (n = 0; n < 8; n++)
                            {
                                if (castle.move(b, m, n) == 1)
                                {
                                    f = b.getInfo(m, n);
                                    b.setSquare(0, i, j);
                                    b.setSquare((color == 1 ? 1 : 7), m, n);
                                    if (king.isChecked(b) == 0)
                                    {
                                        return(1);
                                    }
                                    b.setSquare((color == 1 ? 1 : 7), i, j);
                                    b.setSquare(f, m, n);
                                }
                            }
                        }
                    }
                    else if (b.getInfo(i, j) == (color == 1 ? 2 : 8))
                    {
                        knight.x = i;
                        knight.y = j;
                        for (m = 0; m < 8; m++)
                        {
                            for (n = 0; n < 8; n++)
                            {
                                if (knight.move(b, m, n) == 1)
                                {
                                    f = b.getInfo(m, n);
                                    b.setSquare(0, i, j);
                                    b.setSquare((color == 1 ? 2 : 8), m, n);
                                    if (king.isChecked(b) == 0)
                                    {
                                        return(1);
                                    }
                                    b.setSquare((color == 1 ? 2 : 8), i, j);
                                    b.setSquare(f, m, n);
                                }
                            }
                        }
                    }
                    else if (b.getInfo(i, j) == (color == 1 ? 3 : 9))
                    {
                        bishop.x = i;
                        bishop.y = j;
                        for (m = 0; m < 8; m++)
                        {
                            for (n = 0; n < 8; n++)
                            {
                                if (bishop.move(b, m, n) == 1)
                                {
                                    f = b.getInfo(m, n);
                                    b.setSquare(0, i, j);
                                    b.setSquare((color == 1 ? 3 : 9), m, n);
                                    if (king.isChecked(b) == 0)
                                    {
                                        return(1);
                                    }
                                    b.setSquare((color == 1 ? 3 : 9), i, j);
                                    b.setSquare(f, m, n);
                                }
                            }
                        }
                    }
                    else if (b.getInfo(i, j) == (color == 1 ? 4 : 10))
                    {
                        queen.x = i;
                        queen.y = j;
                        for (m = 0; m < 8; m++)
                        {
                            for (n = 0; n < 8; n++)
                            {
                                if (queen.move(b, m, n) == 1)
                                {
                                    f = b.getInfo(m, n);
                                    b.setSquare(0, i, j);
                                    b.setSquare((color == 1 ? 4 : 10), m, n);
                                    if (king.isChecked(b) == 0)
                                    {
                                        return(1);
                                    }
                                    b.setSquare((color == 1 ? 4 : 10), i, j);
                                    b.setSquare(f, m, n);
                                }
                            }
                        }
                    }
                    else if (b.getInfo(i, j) == (color == 1 ? 5 : 11))
                    {
                        for (m = 0; m < 8; m++)
                        {
                            for (n = 0; n < 8; n++)
                            {
                                if (king.move(b, m, n) == 1)
                                {
                                    f      = b.getInfo(m, n);
                                    king.x = m;
                                    king.y = n;
                                    b.setSquare(0, i, j);
                                    b.setSquare((color == 1 ? 5 : 11), m, n);
                                    if (king.isChecked(b) == 0)
                                    {
                                        return(1);
                                    }
                                    b.setSquare((color == 1 ? 5 : 11), i, j);
                                    b.setSquare(f, m, n);
                                    king.x = p.x;
                                    king.y = p.y;
                                }
                            }
                        }
                    }
                    else if (b.getInfo(i, j) == (color == 1 ? 6 : 12))
                    {
                        pawn.x = i;
                        pawn.y = j;
                        for (m = 0; m < 8; m++)
                        {
                            for (n = 0; n < 8; n++)
                            {
                                if (pawn.move(b, m, n) == 1)
                                {
                                    f = b.getInfo(m, n);
                                    b.setSquare(0, i, j);
                                    b.setSquare((color == 1 ? 6 : 12), m, n);
                                    if (king.isChecked(b) == 0)
                                    {
                                        return(1);
                                    }
                                    b.setSquare((color == 1 ? 6 : 12), i, j);
                                    b.setSquare(f, m, n);
                                }
                            }
                        }
                    }
                }
            }
            return(0);
        }
Exemplo n.º 5
0
        public static void CheckEnemyKingBeAttaced(int startX,
                                                   int startY,
                                                   int finishX,
                                                   int finishY,
                                                   bool[,] chessmanPresenceSign,
                                                   ControlCollection controls,
                                                   object sender,
                                                   Dictionary <string, int> moveOrder)
        {
            //Клонируем массив признака расположения шахмат, для фальсификации
            bool[,] fakeChessmanPresenceSign = new bool[8, 8];
            for (var i = 0; i < 8; i++)
            {
                for (var j = 0; j < 8; j++)
                {
                    fakeChessmanPresenceSign[i, j] = chessmanPresenceSign[i, j];
                }
            }
            fakeChessmanPresenceSign[startY, startX]   = false;
            fakeChessmanPresenceSign[finishY, finishX] = true;

            //Клонируем свойство расположения шахмат для возможности фальсификации
            foreach (var control in controls)
            {
                if (control is Chessman)
                {
                    ((Chessman)control).FakeLocation = ((Chessman)control).Location;
                }
            }

            //Проверка возможности шаха
            foreach (var control in controls)
            {
                if (control is King)
                {
                    if (((Chessman)control).ChessColor != ((Chessman)sender).ChessColor)
                    {
                        var kingfinishX = (((King)control).Location.X - 27) / 50;
                        var kingFinishY = (((King)control).Location.Y - 27) / 50;

                        ((Chessman)control).FakeCheck = true;
                        ((Chessman)sender).ShahSigne  = King.CheckKingBeAttacked(kingfinishX, kingFinishY,
                                                                                 fakeChessmanPresenceSign,
                                                                                 controls, control, false, sender);
                        ((Chessman)control).FakeCheck = false;
                    }
                }
            }


            //Проверка возможности мата
            if (((Chessman)sender).ShahSigne)
            {
                var  flag = true;
                int  chessStartX, chessStartY;
                bool result;

                //Клонируем свойство расположения шахмат для возможности фальсификации
                foreach (var control in controls)
                {
                    if (control is Chessman)
                    {
                        ((Chessman)control).FakeLocation = ((Chessman)control).Location;
                    }
                }

                foreach (var control in controls)
                {
                    if (control is Chessman && flag)
                    {
                        ((Chessman)sender).MateSigne = true;
                        if (((Chessman)control).ChessColor != ((Chessman)sender).ChessColor)
                        {
                            result = true;

                            // Делаем фэйковые координаты
                            chessStartX = (((Chessman)control).Location.X - 27) / 50;
                            chessStartY = (((Chessman)control).Location.Y - 27) / 50;


                            if (control is King)
                            {
                                for (var i = 0; i < 8 && flag; i++)
                                {
                                    for (var j = 0; j < 8 && flag; j++)
                                    {
                                        var chessFinishX = i;
                                        var chessFinishY = j;

                                        if (chessFinishX != chessStartX || chessFinishY != chessStartY)
                                        {
                                            ((Chessman)control).FakeCheck = true;
                                            result = King.CheckKingMove(chessStartX, chessStartY, chessFinishX,
                                                                        chessFinishY,
                                                                        fakeChessmanPresenceSign, controls, control, sender);
                                            ((Chessman)control).FakeCheck = false;

                                            if (!result)
                                            {
                                                flag = false;
                                                break;
                                            }
                                        }
                                    }
                                }
                            }
                            if (control is Queen)
                            {
                                for (var i = 0; i < 8 && flag; i++)
                                {
                                    for (var j = 0; j < 8 && flag; j++)
                                    {
                                        //Задаем фэйковое положение
                                        var chessFinishX = i;
                                        var chessFinishY = j;
                                        ((Chessman)control).FakeLocation = new Point(chessFinishX * 50 + 27,
                                                                                     chessFinishY * 50 + 27);

                                        if (chessFinishX != chessStartX || chessFinishY != chessStartY)
                                        {
                                            ((Chessman)control).FakeCheck = true;
                                            result = Queen.CheckQueenMove(chessStartX, chessStartY, chessFinishX,
                                                                          chessFinishY,
                                                                          fakeChessmanPresenceSign, controls, control, moveOrder);
                                            ((Chessman)control).FakeCheck = false;

                                            if (!result)
                                            {
                                                flag = false;
                                                break;
                                            }
                                        }
                                    }
                                }
                            }


                            if (control is Castle)
                            {
                                for (var i = 0; i < 8 && flag; i++)
                                {
                                    for (var j = 0; j < 8 && flag; j++)
                                    {
                                        var chessFinishX = i;
                                        var chessFinishY = j;
                                        ((Chessman)control).FakeLocation = new Point(chessFinishX * 50 + 27,
                                                                                     chessFinishY * 50 + 27);

                                        if (chessFinishX != chessStartX || chessFinishY != chessStartY)
                                        {
                                            ((Chessman)control).FakeCheck = true;
                                            result = Castle.CheckCastleMove(chessStartX, chessStartY, chessFinishX,
                                                                            chessFinishY,
                                                                            fakeChessmanPresenceSign, controls, control, moveOrder);
                                            ((Chessman)control).FakeCheck = false;

                                            if (!result)
                                            {
                                                flag = false;
                                                break;
                                            }
                                        }
                                    }
                                }
                            }

                            if (control is Elephant)
                            {
                                for (var i = 0; i < 8 && flag; i++)
                                {
                                    for (var j = 0; j < 8 && flag; j++)
                                    {
                                        var chessFinishX = i;
                                        var chessFinishY = j;
                                        ((Chessman)control).FakeLocation = new Point(chessFinishX * 50 + 27,
                                                                                     chessFinishY * 50 + 27);

                                        if (chessFinishX != chessStartX || chessFinishY != chessStartY)
                                        {
                                            ((Chessman)control).FakeCheck = true;
                                            result = Elephant.CheckElephantMove(chessStartX, chessStartY, chessFinishX,
                                                                                chessFinishY,
                                                                                fakeChessmanPresenceSign, controls, control, moveOrder);
                                            ((Chessman)control).FakeCheck = false;

                                            if (!result)
                                            {
                                                flag = false;
                                                break;
                                            }
                                        }
                                    }
                                }
                            }


                            if (control is Horse)
                            {
                                for (var i = 0; i < 8 && flag; i++)
                                {
                                    for (var j = 0; j < 8 && flag; j++)
                                    {
                                        var chessFinishX = i;
                                        var chessFinishY = j;
                                        ((Chessman)control).FakeLocation = new Point(chessFinishX * 50 + 27,
                                                                                     chessFinishY * 50 + 27);

                                        if (chessFinishX != chessStartX || chessFinishY != chessStartY)
                                        {
                                            ((Chessman)control).FakeCheck = true;
                                            result = Horse.CheckHorseMove(chessStartX, chessStartY, chessFinishX,
                                                                          chessFinishY,
                                                                          fakeChessmanPresenceSign, controls, control, moveOrder);
                                            ((Chessman)control).FakeCheck = false;

                                            if (!result)
                                            {
                                                flag = false;
                                                break;
                                            }
                                        }
                                    }
                                }
                            }

                            if (control is Pawn)
                            {
                                for (var i = 0; i < 8 && flag; i++)
                                {
                                    for (var j = 0; j < 8 && flag; j++)
                                    {
                                        var chessFinishX = i;
                                        var chessFinishY = j;
                                        ((Chessman)control).FakeLocation = new Point(chessFinishX * 50 + 27,
                                                                                     chessFinishY * 50 + 27);

                                        if (chessFinishX != chessStartX || chessFinishY != chessStartY)
                                        {
                                            ((Chessman)control).FakeCheck = true;
                                            result = Pawn.CheckPawnMove(chessStartX, chessStartY, chessFinishX,
                                                                        chessFinishY,
                                                                        fakeChessmanPresenceSign, controls, control, moveOrder);
                                            ((Chessman)control).FakeCheck = false;

                                            if (!result)
                                            {
                                                flag = false;
                                                break;
                                            }
                                        }
                                    }
                                }
                            }
                            if (!result)
                            {
                                ((Chessman)sender).MateSigne = false;
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 6
0
        private void CheckChessMove(object sender)
        {
            var startX  = (initialChessmanLocation.X - 27) / 50;
            var startY  = (initialChessmanLocation.Y - 27) / 50;
            var finishX = (CellsPositions[chessmansCellIndexRow, chessmansCellIndexColumn].X - 27) / 50;
            var finishY = (CellsPositions[chessmansCellIndexRow, chessmansCellIndexColumn].Y - 27) / 50;

            var impossibleMove = sender is Queen
                ? Queen.CheckQueenMove(startX, startY, finishX, finishY, ChessmanPresenceSign, Controls, sender, moveOrder)
                : sender is Castle
                    ? Castle.CheckCastleMove(startX, startY, finishX, finishY, ChessmanPresenceSign, Controls, sender, moveOrder)
                    : sender is Elephant
                        ? Elephant.CheckElephantMove(startX, startY, finishX, finishY, ChessmanPresenceSign, Controls, sender, moveOrder)
                        : sender is Horse
                            ? Horse.CheckHorseMove(startX, startY, finishX, finishY, ChessmanPresenceSign, Controls, sender, moveOrder)
                            : sender is King
                                ? King.CheckKingMove(startX, startY, finishX, finishY, ChessmanPresenceSign, Controls, sender, sender)
                                : Pawn.CheckPawnMove(startX, startY, finishX, finishY, ChessmanPresenceSign, Controls, sender, moveOrder);

            if (impossibleMove)
            {
                MessageBox.Show(Resources.ImpossibleMoveMessage);

                chess          = (Chessman)sender;
                chess.Location = initialChessmanLocation;
            }
            else
            {
                //Проверка возможности превращения
                if (sender is Pawn)
                {
                    if (((Pawn)sender).CanTransform)
                    {
                        var dialogWindow = new PawnTransfomDialog();
                        dialogWindow.Owner = this;

                        DialogResult dialogResult = dialogWindow.ShowDialog();
                        if (dialogResult == DialogResult.OK && !dialogWindow.RBPawn.Checked)
                        {
                            var color       = ((Pawn)sender).ChessColor;
                            var finishPoint = new Point(finishX * 50 + 27, finishY * 50 + 27);

                            ((Pawn)sender).Dispose();

                            if (dialogWindow.RBCastle.Checked)
                            {
                                var index = Castles.Count + 1;
                                Castles.Add(color + "Castel" + index, new Castle(color));
                                Controls.Add(Castles[color + "Castel" + index]);
                                Castles[color + "Castel" + index].Location = finishPoint;

                                Castles[color + "Castel" + index].MouseLeave += Chessman_MouseLeave;
                                Castles[color + "Castel" + index].MouseDown  += Chessman_MouseDown;
                                Castles[color + "Castel" + index].MouseUp    += Chessman_MouseUp;
                                Castles[color + "Castel" + index].MouseMove  += Chessman_MouseMove;

                                sender = Castles[color + "Castel" + index];
                                Chessman.CheckEnemyKingBeAttaced(startX, startY, finishX, finishY, ChessmanPresenceSign, Controls,
                                                                 sender, moveOrder);
                            }

                            if (dialogWindow.RBElephant.Checked)
                            {
                                var index = Elephants.Count + 1;
                                Elephants.Add(color + "Elephant" + index, new Elephant(color));
                                Controls.Add(Elephants[color + "Elephant" + index]);
                                Elephants[color + "Elephant" + index].Location = finishPoint;

                                Elephants[color + "Elephant" + index].MouseLeave += Chessman_MouseLeave;
                                Elephants[color + "Elephant" + index].MouseDown  += Chessman_MouseDown;
                                Elephants[color + "Elephant" + index].MouseUp    += Chessman_MouseUp;
                                Elephants[color + "Elephant" + index].MouseMove  += Chessman_MouseMove;

                                sender = Elephants[color + "Elephant" + index];
                                Chessman.CheckEnemyKingBeAttaced(startX, startY, finishX, finishY, ChessmanPresenceSign, Controls,
                                                                 sender, moveOrder);
                            }

                            if (dialogWindow.RBHorse.Checked)
                            {
                                var index = Horses.Count + 1;
                                Horses.Add(color + "Horse" + index, new Horse(color));
                                Controls.Add(Horses[color + "Horse" + index]);
                                Horses[color + "Horse" + index].Location = finishPoint;

                                Horses[color + "Horse" + index].MouseLeave += Chessman_MouseLeave;
                                Horses[color + "Horse" + index].MouseDown  += Chessman_MouseDown;
                                Horses[color + "Horse" + index].MouseUp    += Chessman_MouseUp;
                                Horses[color + "Horse" + index].MouseMove  += Chessman_MouseMove;

                                sender = Horses[color + "Horse" + index];
                                Chessman.CheckEnemyKingBeAttaced(startX, startY, finishX, finishY, ChessmanPresenceSign, Controls,
                                                                 sender, moveOrder);
                            }

                            if (dialogWindow.RBQueen.Checked)
                            {
                                var index = Queens.Count + 1;
                                Queens.Add(color + "Queen" + index, new Queen(color));
                                Controls.Add(Queens[color + "Queen" + index]);
                                Queens[color + "Queen" + index].Location = finishPoint;

                                Queens[color + "Queen" + index].MouseLeave += Chessman_MouseLeave;
                                Queens[color + "Queen" + index].MouseDown  += Chessman_MouseDown;
                                Queens[color + "Queen" + index].MouseUp    += Chessman_MouseUp;
                                Queens[color + "Queen" + index].MouseMove  += Chessman_MouseMove;

                                sender = Queens[color + "Queen" + index];
                                Chessman.CheckEnemyKingBeAttaced(startX, startY, finishX, finishY, ChessmanPresenceSign, Controls,
                                                                 sender, moveOrder);
                            }
                        }
                    }
                }

                //Проверка мата или шаха
                ChessmanPresenceSign[startY, startX]   = false;
                ChessmanPresenceSign[finishY, finishX] = true;

                moveOrder[((Chessman)sender).ChessColor] += -2;

                if (((Chessman)sender).ShahSigne && !((Chessman)sender).MateSigne)
                {
                    MessageBox.Show(Resources.ShahMessage);
                    ((Chessman)sender).ShahSigne = false;
                }

                if (((Chessman)sender).MateSigne)
                {
                    DialogResult result = MessageBox.Show(Resources.MateMessage + Environment.NewLine + Resources.restartQuestion,
                                                          Resources.GameEndMessage, MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                    if (result == DialogResult.Yes)
                    {
                        Application.Restart();
                    }
                    else
                    {
                        Application.Exit();
                    }
                }
            }
        }
Exemplo n.º 7
0
        public bool MatetestforWhite(GameBoard Game, Empty Emptyspace, Check Checker)
        {
            Coordinate CurrentCoord = new Coordinate();
            Coordinate NextCoord    = new Coordinate();

            for (int i = 0; i < Game.White.Count; i++)
            {
                string typecheck = Game.White[i].GetType().ToString();

                CurrentCoord.X = Game.White[i].Current.X;
                CurrentCoord.Y = Game.White[i].Current.Y;
                for (byte j = 0; j < 8; j++)
                {
                    NextCoord.X = j;
                    for (byte k = 0; k < 8; k++)
                    {
                        NextCoord.Y = k;
                        switch (typecheck)
                        {
                        case "Chess.Pawn":
                            Pawn Pawnmover = new Pawn("WHITE");
                            Pawnmover = (Pawn)Game.Chessboard[CurrentCoord.X, CurrentCoord.Y];
                            if (Pawnmover.isMovable(Game, NextCoord))
                            {
                                Game.Chessboard[CurrentCoord.X, CurrentCoord.Y].Move(Game, CurrentCoord, NextCoord, Emptyspace);
                                if (!(Checker.Checktest(Game, NextCoord)))
                                {
                                    Game.LastmoveReverser(Game, CurrentCoord, NextCoord, Emptyspace);
                                }
                                else
                                {
                                    Game.LastmoveReverser(Game, CurrentCoord, NextCoord, Emptyspace);
                                    return(true);
                                }
                            }

                            break;

                        case "Chess.Bishop":

                            Bishop Bishopmover = new Bishop("a");
                            Bishopmover = (Bishop)Game.Chessboard[CurrentCoord.X, CurrentCoord.Y];
                            if (Bishopmover.isMovable(Game, NextCoord))
                            {
                                Game.Chessboard[CurrentCoord.X, CurrentCoord.Y].Move(Game, CurrentCoord, NextCoord, Emptyspace);
                                if (!(Checker.Checktest(Game, NextCoord)))
                                {
                                    Game.LastmoveReverser(Game, CurrentCoord, NextCoord, Emptyspace);
                                }
                                else
                                {
                                    Game.LastmoveReverser(Game, CurrentCoord, NextCoord, Emptyspace);
                                    return(true);
                                }
                            }
                            break;

                        case "Chess.Queen":

                            Queen Queenmover = new Queen("a");
                            Queenmover = (Queen)Game.Chessboard[CurrentCoord.X, CurrentCoord.Y];
                            if (Queenmover.isMovable(Game, NextCoord))
                            {
                                Game.Chessboard[CurrentCoord.X, CurrentCoord.Y].Move(Game, CurrentCoord, NextCoord, Emptyspace);
                                if (!(Checker.Checktest(Game, NextCoord)))
                                {
                                    Game.LastmoveReverser(Game, CurrentCoord, NextCoord, Emptyspace);
                                }
                                else
                                {
                                    Game.LastmoveReverser(Game, CurrentCoord, NextCoord, Emptyspace);
                                    return(true);
                                }
                            }
                            break;

                        case "Chess.Knight":

                            Knight Knightmover = new Knight("a");
                            Knightmover = (Knight)Game.Chessboard[CurrentCoord.X, CurrentCoord.Y];
                            if (Knightmover.isMovable(Game, NextCoord))
                            {
                                Game.Chessboard[CurrentCoord.X, CurrentCoord.Y].Move(Game, CurrentCoord, NextCoord, Emptyspace);
                                if (!(Checker.Checktest(Game, NextCoord)))
                                {
                                    Game.LastmoveReverser(Game, CurrentCoord, NextCoord, Emptyspace);
                                }
                                else
                                {
                                    Game.LastmoveReverser(Game, CurrentCoord, NextCoord, Emptyspace);
                                    return(true);
                                }
                            }
                            break;

                        case "Chess.Castle":

                            Castle Castlemover = new Castle("a");
                            Castlemover = (Castle)Game.Chessboard[CurrentCoord.X, CurrentCoord.Y];
                            if (Castlemover.isMovable(Game, NextCoord))
                            {
                                Game.Chessboard[CurrentCoord.X, CurrentCoord.Y].Move(Game, CurrentCoord, NextCoord, Emptyspace);
                                if (!(Checker.Checktest(Game, NextCoord)))
                                {
                                    Game.LastmoveReverser(Game, CurrentCoord, NextCoord, Emptyspace);
                                }
                                else
                                {
                                    Game.LastmoveReverser(Game, CurrentCoord, NextCoord, Emptyspace);
                                    return(true);
                                }
                            }
                            break;

                        case "Chess.King":

                            King Kingmover = new King("a");
                            Kingmover = (King)Game.Chessboard[CurrentCoord.X, CurrentCoord.Y];
                            if (Kingmover.isMovable(Game, NextCoord))
                            {
                                Game.Chessboard[CurrentCoord.X, CurrentCoord.Y].Move(Game, CurrentCoord, NextCoord, Emptyspace);
                                if (!(Checker.Checktest(Game, NextCoord)))
                                {
                                    Game.LastmoveReverser(Game, CurrentCoord, NextCoord, Emptyspace);
                                }
                                else
                                {
                                    Game.LastmoveReverser(Game, CurrentCoord, NextCoord, Emptyspace);
                                    return(true);
                                }
                            }


                            break;
                        }
                    }
                }
            }
            return(false);
        }
Exemplo n.º 8
0
        public void CreateDefaultPosition()
        {
            Figure blackCastle1 = new Castle(false, 0, 0);
            Figure blackCastle2 = new Castle(false, 7, 0);
            Figure blackKnight1 = new Knight(false, 1, 0);
            Figure blackKnight2 = new Knight(false, 6, 0);
            Figure blackBishop1 = new Bishop(false, 2, 0);
            Figure blackBishop2 = new Bishop(false, 5, 0);
            Figure blackKing    = new King(false, 4, 0);
            Figure blackQueen   = new Queen(false, 3, 0);
            Figure blackPawn1   = new Pawn(false, 0, 1);
            Figure blackPawn2   = new Pawn(false, 1, 1);
            Figure blackPawn3   = new Pawn(false, 2, 1);
            Figure blackPawn4   = new Pawn(false, 3, 1);
            Figure blackPawn5   = new Pawn(false, 4, 1);
            Figure blackPawn6   = new Pawn(false, 5, 1);
            Figure blackPawn7   = new Pawn(false, 6, 1);
            Figure blackPawn8   = new Pawn(false, 7, 1);

            Figure whiteCastle1 = new Castle(true, 0, 7);
            Figure whiteCastle2 = new Castle(true, 7, 7);
            Figure whiteKnight1 = new Knight(true, 1, 7);
            Figure whiteKnight2 = new Knight(true, 6, 7);
            Figure whiteBishop1 = new Bishop(true, 2, 7);
            Figure whiteBishop2 = new Bishop(true, 5, 7);
            Figure whiteKing    = new King(true, 4, 7);
            Figure whiteQueen   = new Queen(true, 3, 7);
            Figure whitePawn1   = new Pawn(true, 0, 6);
            Figure whitePawn2   = new Pawn(true, 1, 6);
            Figure whitePawn3   = new Pawn(true, 2, 6);
            Figure whitePawn4   = new Pawn(true, 3, 6);
            Figure whitePawn5   = new Pawn(true, 4, 6);
            Figure whitePawn6   = new Pawn(true, 5, 6);
            Figure whitePawn7   = new Pawn(true, 6, 6);
            Figure whitePawn8   = new Pawn(true, 7, 6);

            _table[0, 0].PutFigure(blackCastle1);
            _table[1, 0].PutFigure(blackKnight1);
            _table[2, 0].PutFigure(blackBishop1);
            _table[3, 0].PutFigure(blackQueen);
            _table[4, 0].PutFigure(blackKing);
            _table[5, 0].PutFigure(blackBishop2);
            _table[6, 0].PutFigure(blackKnight2);
            _table[7, 0].PutFigure(blackCastle2);
            _table[0, 1].PutFigure(blackPawn1);
            _table[1, 1].PutFigure(blackPawn2);
            _table[2, 1].PutFigure(blackPawn3);
            _table[3, 1].PutFigure(blackPawn4);
            _table[4, 1].PutFigure(blackPawn5);
            _table[5, 1].PutFigure(blackPawn6);
            _table[6, 1].PutFigure(blackPawn7);
            _table[7, 1].PutFigure(blackPawn8);

            _table[0, 7].PutFigure(whiteCastle1);
            _table[1, 7].PutFigure(whiteKnight1);
            _table[2, 7].PutFigure(whiteBishop1);
            _table[3, 7].PutFigure(whiteQueen);
            _table[4, 7].PutFigure(whiteKing);
            _table[5, 7].PutFigure(whiteBishop2);
            _table[6, 7].PutFigure(whiteKnight2);
            _table[7, 7].PutFigure(whiteCastle2);
            _table[0, 6].PutFigure(whitePawn1);
            _table[1, 6].PutFigure(whitePawn2);
            _table[2, 6].PutFigure(whitePawn3);
            _table[3, 6].PutFigure(whitePawn4);
            _table[4, 6].PutFigure(whitePawn5);
            _table[5, 6].PutFigure(whitePawn6);
            _table[6, 6].PutFigure(whitePawn7);
            _table[7, 6].PutFigure(whitePawn8);
        }
Exemplo n.º 9
0
        public GameBoard()
        {
            King   BlackKing    = new King("BLACK");
            Queen  BlackQueen   = new Queen("BLACK", 1);
            Castle BlackCastle1 = new Castle("BLACK", 1);
            Castle BlackCastle2 = new Castle("BLACK", 2);
            Bishop BlackBishop1 = new Bishop("BLACK", 1);
            Bishop BlackBishop2 = new Bishop("BLACK", 2);
            Knight BlackKnight1 = new Knight("BLACK", 1);
            Knight BlackKnight2 = new Knight("BLACK", 2);
            Pawn   BlackPawn1   = new Pawn("BLACK", 1);
            Pawn   BlackPawn2   = new Pawn("BLACK", 2);
            Pawn   BlackPawn3   = new Pawn("BLACK", 3);
            Pawn   BlackPawn4   = new Pawn("BLACK", 4);
            Pawn   BlackPawn5   = new Pawn("BLACK", 5);
            Pawn   BlackPawn6   = new Pawn("BLACK", 6);
            Pawn   BlackPawn7   = new Pawn("BLACK", 7);
            Pawn   BlackPawn8   = new Pawn("BLACK", 8);
            Empty  Emptyspace   = new Empty();

            for (byte i = 2; i < 6; i++)
            {
                for (byte j = 0; j < 8; j++)
                {
                    Chessboard[i, j] = Emptyspace;
                }
            }

            Black.Add(BlackKing);
            Black.Add(BlackQueen);
            Black.Add(BlackCastle1);
            Black.Add(BlackCastle2);
            Black.Add(BlackBishop1);
            Black.Add(BlackBishop2);
            Black.Add(BlackKnight1);
            Black.Add(BlackKnight2);
            Black.Add(BlackPawn1);
            Black.Add(BlackPawn2);
            Black.Add(BlackPawn3);
            Black.Add(BlackPawn4);
            Black.Add(BlackPawn5);
            Black.Add(BlackPawn6);
            Black.Add(BlackPawn7);
            Black.Add(BlackPawn8);

            King   WhiteKing    = new King("WHITE");
            Queen  WhiteQueen   = new Queen("WHITE", 1);
            Castle WhiteCastle1 = new Castle("WHITE", 1);
            Castle WhiteCastle2 = new Castle("WHITE", 2);
            Bishop WhiteBishop1 = new Bishop("WHITE", 1);
            Bishop WhiteBishop2 = new Bishop("WHITE", 2);
            Knight WhiteKnight1 = new Knight("WHITE", 1);
            Knight WhiteKnight2 = new Knight("WHITE", 2);
            Pawn   WhitePawn1   = new Pawn("WHITE", 1);
            Pawn   WhitePawn2   = new Pawn("WHITE", 2);
            Pawn   WhitePawn3   = new Pawn("WHITE", 3);
            Pawn   WhitePawn4   = new Pawn("WHITE", 4);
            Pawn   WhitePawn5   = new Pawn("WHITE", 5);
            Pawn   WhitePawn6   = new Pawn("WHITE", 6);
            Pawn   WhitePawn7   = new Pawn("WHITE", 7);
            Pawn   WhitePawn8   = new Pawn("WHITE", 8);

            White.Add(WhiteKing);
            White.Add(WhiteQueen);
            White.Add(WhiteCastle1);
            White.Add(WhiteCastle2);
            White.Add(WhiteBishop1);
            White.Add(WhiteBishop2);
            White.Add(WhiteKnight1);
            White.Add(WhiteKnight2);
            White.Add(WhitePawn1);
            White.Add(WhitePawn2);
            White.Add(WhitePawn3);
            White.Add(WhitePawn4);
            White.Add(WhitePawn5);
            White.Add(WhitePawn6);
            White.Add(WhitePawn7);
            White.Add(WhitePawn8);

            Chessboard[0, 0] = WhiteCastle1;
            Chessboard[0, 1] = WhiteKnight1;
            Chessboard[0, 2] = WhiteBishop1;
            Chessboard[0, 3] = WhiteQueen;
            Chessboard[0, 4] = WhiteKing;
            Chessboard[0, 5] = WhiteBishop2;
            Chessboard[0, 6] = WhiteKnight2;
            Chessboard[0, 7] = WhiteCastle2;

            Chessboard[1, 0] = WhitePawn1;
            Chessboard[1, 1] = WhitePawn2;
            Chessboard[1, 2] = WhitePawn3;
            Chessboard[1, 3] = WhitePawn4;
            Chessboard[1, 4] = WhitePawn5;
            Chessboard[1, 5] = WhitePawn6;
            Chessboard[1, 6] = WhitePawn7;
            Chessboard[1, 7] = WhitePawn8;

            Chessboard[7, 0] = BlackCastle1;
            Chessboard[7, 1] = BlackKnight1;
            Chessboard[7, 2] = BlackBishop1;
            Chessboard[7, 3] = BlackQueen;
            Chessboard[7, 4] = BlackKing;
            Chessboard[7, 5] = BlackBishop2;
            Chessboard[7, 6] = BlackKnight2;
            Chessboard[7, 7] = BlackCastle2;

            Chessboard[6, 0] = BlackPawn1;
            Chessboard[6, 1] = BlackPawn2;
            Chessboard[6, 2] = BlackPawn3;
            Chessboard[6, 3] = BlackPawn4;
            Chessboard[6, 4] = BlackPawn5;
            Chessboard[6, 5] = BlackPawn6;
            Chessboard[6, 6] = BlackPawn7;
            Chessboard[6, 7] = BlackPawn8;

            for (byte i = 0; i < 8; i++)
            {
                for (byte j = 0; j < 8; j++)
                {
                    if (!(Chessboard[i, j].GetType().ToString().Contains("Empty")))
                    {
                        Chessboard[i, j].Current.X = i;
                        Chessboard[i, j].Current.Y = j;
                    }
                }
            }
        }
Exemplo n.º 10
0
        public void Run(GameBoard Game, Coordinate Current, Coordinate Next, Check Checker, Empty Emptyspace)
        {
            string typecheck;

            typecheck = Game.Chessboard[Current.X, Current.Y].GetType().ToString();

            switch (typecheck)
            {
            case "Chess.Pawn":
                Pawn Pawnmover = new Pawn("WHITE");
                Pawnmover = (Pawn)Game.Chessboard[Current.X, Current.Y];
                if (Pawnmover.isMovable(Game, Next))
                {
                    Game.Chessboard[Current.X, Current.Y].Move(Game, Current, Next, Emptyspace);
                    if (!(Checker.Checktest(Game, Next)))
                    {
                        Game.LastmoveReverser(Game, Current, Next, Emptyspace);
                    }
                    else
                    {
                        anyChanges = true;
                    }
                }

                break;

            case "Chess.Bishop":

                Bishop Bishopmover = new Bishop("a");
                Bishopmover = (Bishop)Game.Chessboard[Current.X, Current.Y];
                if (Bishopmover.isMovable(Game, Next))
                {
                    Game.Chessboard[Current.X, Current.Y].Move(Game, Current, Next, Emptyspace);
                    if (!(Checker.Checktest(Game, Next)))
                    {
                        Game.LastmoveReverser(Game, Current, Next, Emptyspace);
                    }
                    else
                    {
                        anyChanges = true;
                    }
                }
                break;

            case "Chess.Queen":

                Queen Queenmover = new Queen("a");
                Queenmover = (Queen)Game.Chessboard[Current.X, Current.Y];
                if (Queenmover.isMovable(Game, Next))
                {
                    Game.Chessboard[Current.X, Current.Y].Move(Game, Current, Next, Emptyspace);
                    if (!(Checker.Checktest(Game, Next)))
                    {
                        Game.LastmoveReverser(Game, Current, Next, Emptyspace);
                    }
                    else
                    {
                        anyChanges = true;
                    }
                }
                break;

            case "Chess.Knight":

                Knight Knightmover = new Knight("a");
                Knightmover = (Knight)Game.Chessboard[Current.X, Current.Y];
                if (Knightmover.isMovable(Game, Next))
                {
                    Game.Chessboard[Current.X, Current.Y].Move(Game, Current, Next, Emptyspace);
                    if (!(Checker.Checktest(Game, Next)))
                    {
                        Game.LastmoveReverser(Game, Current, Next, Emptyspace);
                    }
                    else
                    {
                        anyChanges = true;
                    }
                }
                break;

            case "Chess.Castle":

                Castle Castlemover = new Castle("a");
                Castlemover = (Castle)Game.Chessboard[Current.X, Current.Y];
                if (Castlemover.isMovable(Game, Next))
                {
                    Game.Chessboard[Current.X, Current.Y].Move(Game, Current, Next, Emptyspace);
                    if (!(Checker.Checktest(Game, Next)))
                    {
                        Game.LastmoveReverser(Game, Current, Next, Emptyspace);
                    }
                    else
                    {
                        anyChanges = true;
                    }
                }
                break;

            case "Chess.King":

                King Kingmover = new King("a");
                Kingmover = (King)Game.Chessboard[Current.X, Current.Y];
                if (Kingmover.isMovable(Game, Next))
                {
                    Game.Chessboard[Current.X, Current.Y].Move(Game, Current, Next, Emptyspace);
                    if (!(Checker.Checktest(Game, Next)))
                    {
                        Game.LastmoveReverser(Game, Current, Next, Emptyspace);
                    }
                    else
                    {
                        anyChanges = true;
                    }
                }

                else if (Kingmover.Rooktest1(Game, Current, Next, Emptyspace) && Checker.Checktest(Game, Current))
                {
                    Game.Chessboard[Current.X, Current.Y].Rookmover1(Game, Current, Next, Emptyspace);
                    anyChanges = true;
                }

                else if (Kingmover.Rooktest2(Game, Current, Next, Emptyspace) && Checker.Checktest(Game, Current))
                {
                    Game.Chessboard[Current.X, Current.Y].Rookmover2(Game, Current, Next, Emptyspace);
                    anyChanges = true;
                }

                break;
            }
            if (CommonProperties.enPassantfinder + 1 > Game.White.Count || CommonProperties.enPassantfinder + 1 > Game.Black.Count)
            {
                CommonProperties.enPassantfinder = 0;
            }
            if (Game.White[CommonProperties.enPassantfinder].enPassantchecker == 2)
            {
                Game.White[CommonProperties.enPassantfinder].enPassantchecker -= 1;
            }
            else if (Game.White[CommonProperties.enPassantfinder].enPassantchecker == 1)
            {
                Game.White[CommonProperties.enPassantfinder].enPassantchecker -= 1;
            }
            if (Game.Black[CommonProperties.enPassantfinder].enPassantchecker == 2)
            {
                Game.Black[CommonProperties.enPassantfinder].enPassantchecker -= 1;
            }
            else if (Game.Black[CommonProperties.enPassantfinder].enPassantchecker == 1)
            {
                Game.Black[CommonProperties.enPassantfinder].enPassantchecker -= 1;
            }
        }