예제 #1
0
파일: Piece.cs 프로젝트: gwest/ChessTdd
 protected static IEnumerable<BoardCoordinate> GetRadialDiagonalFrom(BoardCoordinate startingPosition, int distance)
 {
     yield return new BoardCoordinate(startingPosition.X + distance, startingPosition.Y + distance);
     yield return new BoardCoordinate(startingPosition.X + distance, startingPosition.Y - distance);
     yield return new BoardCoordinate(startingPosition.X - distance, startingPosition.Y + distance);
     yield return new BoardCoordinate(startingPosition.X - distance, startingPosition.Y - distance);
 }
예제 #2
0
파일: Board.cs 프로젝트: gwest/ChessTdd
        public void AddPiece(Piece piece, BoardCoordinate moveTarget)
        {
            if (!moveTarget.IsCoordinateValidForBoardSize(BoardSize))
            {
                throw new ArgumentException("moveTarget");
            }

            this.pieces[moveTarget.X, moveTarget.Y] = piece;
        }
예제 #3
0
파일: Pawn.cs 프로젝트: gwest/ChessTdd
        public override IEnumerable<BoardCoordinate> GetMovesFrom(BoardCoordinate startingLocation, int boardSize = Board.DefaultBoardSize)
        {
            yield return new BoardCoordinate(startingLocation.X, startingLocation.Y + 1);

            if (!this.HasMoved)
            {
                yield return new BoardCoordinate(startingLocation.X, startingLocation.Y + 2);
            }
        }
예제 #4
0
파일: Bishop.cs 프로젝트: gwest/ChessTdd
        public override IEnumerable<BoardCoordinate> GetMovesFrom(BoardCoordinate startingLocation, int boardSize = Board.DefaultBoardSize)
        {
            var allDistancesFromStartingLocation = Enumerable.Range(1, boardSize + 1);

            var allPossibleBoardCoordinates = allDistancesFromStartingLocation.SelectMany(sp => GetRadialDiagonalFrom(startingLocation, sp));

            var legalBoardCoordinates = allPossibleBoardCoordinates.Where(bc => bc.IsCoordinateValidForBoardSize(boardSize));

            return legalBoardCoordinates;
        }
예제 #5
0
파일: Rook.cs 프로젝트: gwest/ChessTdd
        public override IEnumerable<BoardCoordinate> GetMovesFrom(BoardCoordinate startingLocation, int boardSize = Board.DefaultBoardSize)
        {
            var availableCoorinates = Enumerable.Range(1, boardSize);

            var verticalMoves = availableCoorinates.Where(y => startingLocation.Y != y)
                .Select(y => new BoardCoordinate(startingLocation.X, y));

            var horizonalMoves = availableCoorinates.Where(x => startingLocation.X != x)
                .Select(x => new BoardCoordinate(x, startingLocation.Y));

            return verticalMoves.Union(horizonalMoves);
        }
예제 #6
0
파일: Knight.cs 프로젝트: gwest/ChessTdd
        public override IEnumerable<BoardCoordinate> GetMovesFrom(BoardCoordinate startingLocation, int boardSize = Board.DefaultBoardSize)
        {
            var allPotentialMoves = new List<BoardCoordinate>
            {
                new BoardCoordinate(startingLocation.X + 2, startingLocation.Y + 1),
                new BoardCoordinate(startingLocation.X + 2, startingLocation.Y - 1),
                new BoardCoordinate(startingLocation.X + 1, startingLocation.Y + 2),
                new BoardCoordinate(startingLocation.X + 1, startingLocation.Y - 2),
                new BoardCoordinate(startingLocation.X - 2, startingLocation.Y + 1),
                new BoardCoordinate(startingLocation.X - 2, startingLocation.Y - 1),
                new BoardCoordinate(startingLocation.X - 1, startingLocation.Y + 2),
                new BoardCoordinate(startingLocation.X - 1, startingLocation.Y - 2)
            };

            return allPotentialMoves.Where(bc => bc.IsCoordinateValidForBoardSize(boardSize));
        }
예제 #7
0
파일: Queen.cs 프로젝트: gwest/ChessTdd
        public override IEnumerable<BoardCoordinate> GetMovesFrom(BoardCoordinate startingLocation, int boardSize = Board.DefaultBoardSize)
        {
            var movesWithinABoardSize = GetAllRadialMovesFrom(startingLocation, boardSize);

            return movesWithinABoardSize.Where(bc => bc.IsCoordinateValidForBoardSize(boardSize));
        }
예제 #8
0
파일: Board.cs 프로젝트: gwest/ChessTdd
 public Piece GetPiece(BoardCoordinate squareIn)
 {
     return this.pieces[squareIn.X, squareIn.Y];
 }
예제 #9
0
파일: Piece.cs 프로젝트: gwest/ChessTdd
 public abstract IEnumerable<BoardCoordinate> GetMovesFrom(BoardCoordinate startingLocation, int boardSize = Board.DefaultBoardSize);
예제 #10
0
파일: Piece.cs 프로젝트: gwest/ChessTdd
        protected static IEnumerable<BoardCoordinate> GetRadialDiagonalFromInclusive(BoardCoordinate startingPosition, int distance)
        {
            var squaresToRadiate = Enumerable.Range(1, distance);

            return squaresToRadiate.SelectMany(sq => GetRadialDiagonalFrom(startingPosition, sq));
        }
예제 #11
0
파일: Piece.cs 프로젝트: gwest/ChessTdd
 protected static IEnumerable<BoardCoordinate> GetAllRadialMovesFrom(BoardCoordinate startingLocation, int distance)
 {
     return GetRadialDiagonalFromInclusive(startingLocation, distance)
         .Union(GetRadialAdjacentFromInclusive(startingLocation, distance));
 }
예제 #12
0
파일: King.cs 프로젝트: gwest/ChessTdd
        public override IEnumerable<BoardCoordinate> GetMovesFrom(BoardCoordinate startingLocation, int boardSize = Board.DefaultBoardSize)
        {
            var oneSquareAwayMoves = GetAllRadialMovesFrom(startingLocation, 1);

            return oneSquareAwayMoves.Where(bc => bc.IsCoordinateValidForBoardSize(boardSize));
        }