示例#1
0
        public override List <BoardPosition> GetValidMoves(ChessBoard board)
        {
            var candidatePositions = new CandidatePositions();
            var direction          = 1;

            if (PieceTeam == PieceTeam.White)
            {
                direction = -1;
            }

            // TODO: This is loop is dangerous and inconvenient, but I do love Fig Newtons.
            for (var i = 1; i <= 2; i++)
            {
                if (candidatePositions.Add(new BoardPosition(BoardPosition.Col, BoardPosition.Row + direction * i), board) == false)
                {
                    break;
                }
            }

            // Take East (check for collision before allowing)
            candidatePositions.Add(new BoardPosition(BoardPosition.Col + direction, BoardPosition.Row + direction)
            {
                AttackPosition = true
            }, board);

            // Take west (check for collision before allowing)
            candidatePositions.Add(new BoardPosition(BoardPosition.Col + -1 * direction, BoardPosition.Row + direction)
            {
                AttackPosition = true
            }, board);

            return(candidatePositions.BoardPositions);
        }
示例#2
0
文件: Knight.cs 项目: ballance/jsmate
        public override List <BoardPosition> GetValidMoves(ChessBoard board)
        {
            var candidatePositions = new CandidatePositions();

            // NW
            candidatePositions.Add(new BoardPosition(BoardPosition.Col - 1, BoardPosition.Row - 2), board);

            // NE
            candidatePositions.Add(new BoardPosition(BoardPosition.Col + 1, BoardPosition.Row - 2), board);

            // EN
            candidatePositions.Add(new BoardPosition(BoardPosition.Col + 2, BoardPosition.Row + 1), board);

            // ES
            candidatePositions.Add(new BoardPosition(BoardPosition.Col + 2, BoardPosition.Row - 1), board);

            // SE
            candidatePositions.Add(new BoardPosition(BoardPosition.Col + 1, BoardPosition.Row + 2), board);

            // SW
            candidatePositions.Add(new BoardPosition(BoardPosition.Col - 1, BoardPosition.Row + 2), board);

            // WN
            candidatePositions.Add(new BoardPosition(BoardPosition.Col - 2, BoardPosition.Row + 1), board);

            // WS
            candidatePositions.Add(new BoardPosition(BoardPosition.Col - 2, BoardPosition.Row - 1), board);

            return(candidatePositions.BoardPositions);
        }
示例#3
0
        public override List <BoardPosition> GetValidMoves(ChessBoard board)
        {
            var candidatePositions = new CandidatePositions();

            // TODO: Add how far the bishop can move

            // NE
            for (var ne = 1; ne < 7; ne++)
            {
                if (candidatePositions.Add(new BoardPosition(BoardPosition.Col - ne, BoardPosition.Row + ne), board) == false)
                {
                    break;
                }
            }

            // SE
            for (var se = 1; se < 7; se++)
            {
                if (candidatePositions.Add(new BoardPosition(BoardPosition.Col + se, BoardPosition.Row + se), board) == false)
                {
                    break;
                }
            }

            // SW
            for (var sw = 1; sw < 7; sw++)
            {
                if (candidatePositions.Add(new BoardPosition(BoardPosition.Col + sw, BoardPosition.Row - sw), board) == false)
                {
                    break;
                }
            }

            // NW
            for (var nw = 1; nw < 7; nw++)
            {
                if (candidatePositions.Add(new BoardPosition(BoardPosition.Col - nw, BoardPosition.Row - nw), board) ==
                    false)
                {
                    break;
                }
            }
            return(candidatePositions.BoardPositions);
        }
示例#4
0
        // TODO: I don't like the encapsulation here that has me passing around the chess board to check each new potential move.  This could be structured better.  Validations should probably be happening on the board itself.
        public override List <BoardPosition> GetValidMoves(ChessBoard board)
        {
            var candidatePositions = new CandidatePositions();

            // N
            for (var n = 1; n < 7; n++)
            {
                if (candidatePositions.Add(new BoardPosition(BoardPosition.Col - n, BoardPosition.Row), board) == false)
                {
                    break;
                }
            }

            // E
            for (var e = 1; e < 7; e++)
            {
                if (candidatePositions.Add(new BoardPosition(BoardPosition.Col, BoardPosition.Row + e), board) == false)
                {
                    break;
                }
            }

            // S
            for (var s = 1; s < 7; s++)
            {
                if (candidatePositions.Add(new BoardPosition(BoardPosition.Col + s, BoardPosition.Row), board) == false)
                {
                    break;
                }
            }


            // W
            for (var w = 1; w < 7; w++)
            {
                if (candidatePositions.Add(new BoardPosition(BoardPosition.Col, BoardPosition.Row - w), board) == false)
                {
                    break;
                }
            }
            return(candidatePositions.BoardPositions);
        }
示例#5
0
文件: Queen.cs 项目: ballance/jsmate
        public override List <BoardPosition> GetValidMoves(ChessBoard board)
        {
            var candidatePositions = new CandidatePositions();

            // TODO: Add how far the queen can move

            var moveDepth = 15;

            // N
            for (int n = 1; n < moveDepth; n++)
            {
                if (candidatePositions.Add(new BoardPosition(BoardPosition.Col - n, BoardPosition.Row), board) == false)
                {
                    break;
                }
            }

            // NE
            for (int ne = 1; ne < moveDepth; ne++)
            {
                if (candidatePositions.Add(new BoardPosition(BoardPosition.Col - ne, BoardPosition.Row + ne), board) == false)
                {
                    break;
                }
            }

            // E
            for (int e = 1; e < moveDepth; e++)
            {
                if (candidatePositions.Add(new BoardPosition(BoardPosition.Col, BoardPosition.Row + e), board) == false)
                {
                    break;
                }
            }

            // SE
            for (int se = 1; se < moveDepth; se++)
            {
                if (candidatePositions.Add(new BoardPosition(BoardPosition.Col + se, BoardPosition.Row + se), board) == false)
                {
                    break;
                }
            }

            // S
            for (int s = 1; s < moveDepth; s++)
            {
                if (candidatePositions.Add(new BoardPosition(BoardPosition.Col + s, BoardPosition.Row), board) == false)
                {
                    break;
                }
            }

            // SW
            for (int sw = 1; sw < moveDepth; sw++)
            {
                if (candidatePositions.Add(new BoardPosition(BoardPosition.Col + sw, BoardPosition.Row - sw), board) == false)
                {
                    break;
                }
            }

            // W
            for (int w = 1; w < moveDepth; w++)
            {
                if (candidatePositions.Add(new BoardPosition(BoardPosition.Col, BoardPosition.Row - w), board) == false)
                {
                    break;
                }
            }

            // NW
            for (int nw = 1; nw < moveDepth; nw++)
            {
                if (candidatePositions.Add(new BoardPosition(BoardPosition.Col - nw, BoardPosition.Row - nw), board) == false)
                {
                    break;
                }
            }

            return(candidatePositions.BoardPositions);
        }