예제 #1
0
            private static Point[] GetPawnMoves(Point location, ChessPiece[,] board, PieceColor color)
            {
                int          direction = color == PieceColor.White ? -1 : 1;
                List <Point> locations = new List <Point>();

                Point[] directions =                 //relative to direction
                {
                    new Point(0, direction),         //forward one step
                    new Point(0, direction * 2),     //forward two steps
                    new Point(direction, direction), //forward left
                    new Point(-direction, direction) //forward right
                };

                Point dir = location + directions[0];

                if (board.WithinBounds(dir) && board[dir.X, dir.Y].type == PieceType.None)
                {
                    locations.Add(dir);
                    dir = location + directions[1];

                    if (board.WithinBounds(dir) &&
                        board[dir.X, dir.Y].type == PieceType.None &&
                        ((direction < 0 && location.Y == 6) || location.Y == 1) && !ContainsFriend(board, dir, color) && !ContainsEnemy(board, dir, color))
                    {
                        locations.Add(dir);
                    }
                }

                //capturing
                dir = location + directions[2];
                if (board.WithinBounds(dir) && ContainsEnemy(board, dir, color))
                {
                    locations.Add(dir);
                }
                dir = location + directions[3];
                if (board.WithinBounds(dir) && ContainsEnemy(board, dir, color))
                {
                    locations.Add(dir);
                }

                return(locations.ToArray());
            }
예제 #2
0
            private static Point[] GetJumps(Point location, Point[] offsets, ChessPiece[,] board, PieceColor color)
            {
                List <Point> locations = new List <Point>();

                for (int i = 0; i < offsets.Length; i++)
                {
                    Point sampleLocation = location + offsets[i];
                    if (board.WithinBounds(sampleLocation) && !ContainsFriend(board, sampleLocation, color))
                    {
                        locations.Add(sampleLocation);
                    }
                }
                return(locations.ToArray());
            }
예제 #3
0
            private static Point[] GetPaths(Point location, Point[] directions, ChessPiece[,] board, PieceColor color)
            {
                List <Point> locations = new List <Point>();

                for (int i = 0; i < directions.Length; i++)
                {
                    Point sampleLocation = location + directions[i];
                    while (board.WithinBounds(sampleLocation) && !ContainsFriend(board, sampleLocation, color))
                    {
                        locations.Add(sampleLocation);
                        if (ContainsEnemy(board, sampleLocation, color))
                        {
                            break;
                        }
                        sampleLocation += directions[i];
                    }
                }
                return(locations.ToArray());
            }