示例#1
0
        internal override IList <Move> GetMoves(Hex start, Board board)
        {
            Beetle beetle     = (Beetle)top;
            var    validMoves = new List <Move>();

            beetle.GetClimbingMoves(start, board, validMoves);

            // empty spaces around are valid moves for a beetle stack
            var hivailability = Hivailability.GetHivailability(board, start);

            foreach (Hex hex in hivailability.EmptyNeighborHexes(start))
            {
                validMoves.Add(Move.GetMove(this.top, hex));
            }

            return(validMoves);
        }
示例#2
0
        internal void GetClimbingMoves(Hex start, Board board, List <Move> validMoves)
        {
            // TODO check climbing gates
            var hivailability = Hivailability.GetHivailability(board, start);

            for (int i = 1; i < 7; i++)
            {
                Hex neighborHex = Neighborhood.GetNeighborHex(start, (Position)i);
                if (hivailability.NeighborStatusArray[i] != Hivailability.NeighborStatus.Empty)
                {
                    if (!IsDirectionClimbingBlocked(start, board, (Position)i))
                    {
                        validMoves.Add(Move.GetMove(this, neighborHex));
                    }
                }
            }
        }
示例#3
0
文件: Piece.cs 项目: vfridell/HiveLib
        protected void GetSlideMovesRecursive(Hex current, Board board, int stopAtDepth, int depth, IList <Hex> visited, Dictionary <int, HashSet <Hex> > results)
        {
            Hivailability hivailableCenter       = Hivailability.GetHivailability(board, current);
            IList <Hex>   blockedNeighbors       = hivailableCenter.BlockedNeighborHexes(current);
            IList <Hex>   emptyNeighbors         = hivailableCenter.EmptyNeighborHexes(current);
            IList <Hex>   nonEmptyNeighbors      = hivailableCenter.NonEmptyNeighborHexes(current);
            IList <Hex>   emptyNeighborNeighbors = new List <Hex>();

            foreach (Hex hex in nonEmptyNeighbors)
            {
                Hivailability hivailableNeighbor = Hivailability.GetHivailability(board, hex);
                emptyNeighborNeighbors = hivailableNeighbor.EmptyNeighborHexes(hex).Concat(emptyNeighborNeighbors).ToList();
            }
            HashSet <Hex> validMovementHexes = new HashSet <Hex>(((emptyNeighborNeighbors.Intersect(emptyNeighbors)).Except(blockedNeighbors)).Except(visited));

            visited.Add(current);

            HashSet <Hex> validHexSet;

            if (results.TryGetValue(depth, out validHexSet))
            {
                validHexSet.UnionWith(validMovementHexes);
            }
            else
            {
                results.Add(depth, validMovementHexes);
            }

            if (stopAtDepth == depth)
            {
                return;
            }

            foreach (Hex h in validMovementHexes)
            {
                if (!visited.Contains(h))
                {
                    GetSlideMovesRecursive(h, board, stopAtDepth, depth + 1, visited, results);
                }
            }
        }