Exemple #1
0
        public List <Piece> CheckDiagonalDirection(ChessBoard ChessBoard, Point BoardPos, bool isKing)
        {
            PossibleMoves = new List <Piece>();
            int x = BoardPos.X;                                // 3
            int y = BoardPos.Y;                                // 1
            int DistanceToLeft   = x + 1;                      // 4
            int DistanceToRight  = ChessBoard.BoardWidth - x;  // 5
            int DistanceToTop    = ChessBoard.BoardHeight - y; // 7
            int DistanceToBottom = y + 1;                      //2


            if (isKing)
            {
                DistanceToTop    = GameSystem.GetMin(2, DistanceToTop);
                DistanceToBottom = GameSystem.GetMin(2, DistanceToBottom);
                DistanceToLeft   = GameSystem.GetMin(2, DistanceToLeft);
                DistanceToRight  = GameSystem.GetMin(2, DistanceToRight);
            }

            //forward left

            for (int i = 1; i < GameSystem.GetMin(DistanceToLeft, DistanceToTop); i++)
            {
                if (i < GameSystem.GetMin(DistanceToLeft, DistanceToTop))
                {
                    Piece currentSpace = ChessBoard.BoardData[x - i, y + i];
                    if (currentSpace.PieceColour == "-")
                    {
                        PossibleMoves.Add(ChessBoard.BoardData[x - i, y + i]);
                    }
                    else if (currentSpace.PieceColour != PieceColour)
                    {
                        PossibleMoves.Add(ChessBoard.BoardData[x - i, y + i]);
                        break;
                    }
                    else
                    {
                        break;
                    }
                }
            }

            //down left

            for (int i = 1; i < GameSystem.GetMin(DistanceToLeft, DistanceToBottom); i++)
            {
                Piece currentSpace = ChessBoard.BoardData[x - i, y - i];
                if (currentSpace.PieceColour == "-")
                {
                    PossibleMoves.Add(ChessBoard.BoardData[x - i, y - i]);
                }
                else if (currentSpace.PieceColour != PieceColour)
                {
                    PossibleMoves.Add(ChessBoard.BoardData[x - i, y - i]);
                    break;
                }
                else
                {
                    break;
                }
            }



            //forward right

            for (int i = 1; i < GameSystem.GetMin(DistanceToRight, DistanceToTop); i++)
            {
                Piece currentSpace = ChessBoard.BoardData[x + i, y + i];
                if (currentSpace.PieceColour == "-")
                {
                    PossibleMoves.Add(ChessBoard.BoardData[x + i, y + i]);
                }
                else if (currentSpace.PieceColour != PieceColour)
                {
                    PossibleMoves.Add(ChessBoard.BoardData[x + i, y + i]);
                    break;
                }
                else
                {
                    break;
                }
            }

            //down right

            for (int i = 1; i < GameSystem.GetMin(DistanceToRight, DistanceToBottom); i++)
            {
                Piece currentSpace = ChessBoard.BoardData[x + i, y - i];
                if (currentSpace.PieceColour == "-")
                {
                    PossibleMoves.Add(ChessBoard.BoardData[x + i, y - i]);
                }
                else if (currentSpace.PieceColour != PieceColour)
                {
                    PossibleMoves.Add(ChessBoard.BoardData[x + i, y - i]);
                    break;
                }
                else
                {
                    break;
                }
            }

            return(PossibleMoves);
        }
Exemple #2
0
        public List <Piece> CheckHorizontalDirection(ChessBoard ChessBoard, Point BoardPos, bool isKing)
        {
            PossibleMoves = new List <Piece>();
            int x                = BoardPos.X;
            int y                = BoardPos.Y;
            int DistanceToTop    = ChessBoard.BoardHeight - y;
            int DistanceToBottom = y + 1;
            int DistanceToLeft   = x + 1;
            int DistanceToRight  = ChessBoard.BoardWidth - x;


            if (isKing)
            {
                DistanceToTop    = GameSystem.GetMin(2, DistanceToTop);
                DistanceToBottom = GameSystem.GetMin(2, DistanceToBottom);
                DistanceToLeft   = GameSystem.GetMin(2, DistanceToLeft);
                DistanceToRight  = GameSystem.GetMin(2, DistanceToRight);
            }

            //check up direction

            for (int i = 1; i < DistanceToTop; i++)
            {
                Piece currentSpace = ChessBoard.BoardData[x, y + i];
                if (currentSpace.PieceColour == "-")
                {
                    PossibleMoves.Add(ChessBoard.BoardData[x, y + i]);
                }
                else if (currentSpace.PieceColour != PieceColour)
                {
                    PossibleMoves.Add(ChessBoard.BoardData[x, y + i]);
                    break;
                }
                else
                {
                    break;
                }
            }

            //check down direction

            for (int i = 1; i < DistanceToBottom; i++)
            {
                Piece currentSpace = ChessBoard.BoardData[x, y - i];
                if (currentSpace.PieceColour == "-")
                {
                    PossibleMoves.Add(ChessBoard.BoardData[x, y - i]);
                }
                else if (currentSpace.PieceColour != PieceColour)
                {
                    PossibleMoves.Add(ChessBoard.BoardData[x, y - i]);
                    break;
                }
                else
                {
                    break;
                }
            }

            //check right direction

            for (int i = 1; i < DistanceToRight; i++)
            {
                Piece currentSpace = ChessBoard.BoardData[x + i, y];
                if (currentSpace.PieceColour == "-")
                {
                    PossibleMoves.Add(ChessBoard.BoardData[x + i, y]);
                }
                else if (currentSpace.PieceColour != PieceColour)
                {
                    PossibleMoves.Add(ChessBoard.BoardData[x + i, y]);
                    break;
                }
                else
                {
                    break;
                }
            }

            //check left direction



            for (int i = 1; i < DistanceToLeft; i++)
            {
                Piece currentSpace = ChessBoard.BoardData[x - i, y];
                if (currentSpace.PieceColour == "-")
                {
                    PossibleMoves.Add(ChessBoard.BoardData[x - i, y]);
                }
                else if (currentSpace.PieceColour != PieceColour)
                {
                    PossibleMoves.Add(ChessBoard.BoardData[x - i, y]);
                    break;
                }
                else
                {
                    break;
                }
            }


            return(PossibleMoves);
        }