将地图中一个不能到达的点和可以到达的点连通

        /// <summary>
        /// 当地图有死路是改变地图使地图不出现死路
        /// </summary>
        /// <param name="canPassPoint">地图中可以到达的点集合</param>
        /// <param name="cannotPassPoint">地图中不可到达的点集合</param>
        /// <param name="map"></param>
        private static void ChangeMapWhenImpasse(HashSet<Tuple<Int32, Int32>> canPassPoint, HashSet<Tuple<Int32, Int32>> cannotPassPoint, Dictionary<String, SmallgameExploreTypeConfig> map)
        {
            foreach (var point in cannotPassPoint)
            {
                var mindistance = canPassPoint.Select(item => Math.Pow(point.Item1 - item.Item1, 2) + Math.Pow(point.Item2 - item.Item2, 2)).Min();
                var minPoint = canPassPoint.Where(item => Math.Pow(point.Item1 - item.Item1, 2) + Math.Pow(point.Item2 - item.Item2, 2) == mindistance).First();
                var startFloor = Math.Min(point.Item1, minPoint.Item1);
                var endFloor = Math.Max(point.Item1, minPoint.Item1);
                var startNum = Math.Min(point.Item2, minPoint.Item2);
                var endNum = Math.Max(point.Item2, minPoint.Item2);
                var blankArea = SmallgameExploreTypeConfigBLL.GetItem((int)ExploreType.NotBarrier).Where(item => item.Num == (int)NotBarrierExploreTypeNum.Blank).First();

                for (int floor = startFloor; floor <= endFloor; floor++)
                {
                    var key = GetKey(floor, minPoint.Item2);
                    if (map[key].IsPass == false)
                    {
                        map[key] = blankArea;
                    }
                }
                for (int num = startNum; num <= endNum; num++)
                {
                    var key = GetKey(point.Item1, num);
                    if (map[key].IsPass == false)
                    {
                        map[key] = blankArea;
                    }
                }
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值