三消游戏查找匹配的实现

本文深入探讨了消除类游戏中匹配元素的算法实现,包括水平和垂直方向上的元素匹配过程,以及如何通过递归检测实现匹配元素的查找。文章详细解释了FindMatchItems和FindOneMatchItem方法的工作原理,为游戏开发者提供了宝贵的参考。
摘要由CSDN通过智能技术生成

 

/// <summary>
    ///     查找当前元素匹配的满足消除条件的元素列表
    /// </summary>
    /// <returns></returns>
    public List<Item> FindMatchItems()
    {
        List<Item> matchItemsList = new List<Item>();   // 最终返回的匹配列表
        List<Item> tempMatchList = new List<Item>();

        tempMatchList = FindOneMatchItem(tempMatchList, colorIndex, FindSperating.Horizontal);
        if (tempMatchList.Count >= miniMatches)     // 达到最低的匹配数量,即表示水平满足消除条件
        {
            foreach (Item item in tempMatchList)    // 存入到匹配列表中
            {    
                matchItemsList.Add(item);
            }
            matchHorItemCount = tempMatchList.Count;
        }
        tempMatchList.Clear();


        tempMatchList = FindOneMatchItem(tempMatchList, colorIndex, FindSperating.Vertical);
        if (tempMatchList.Count >= miniMatches)     // 达到最低的匹配数量,即表示垂直满足消除条件
        {
            foreach (Item item in tempMatchList)    // 存入到匹配列表中
            {
                matchItemsList.Add(item);
            }
            matchVerItemCount = tempMatchList.Count;
        }
        tempMatchList.Clear();

        return matchItemsList;
    }

    /// <summary>
    ///     查找匹配,递归检测,每次检测一个元素是否和交换元素的颜色一致
    /// </summary>
    /// <param name="matchItemsList">  储存匹配元素的列表 </param>
    /// <param name="sprColor">  需要匹配的元素颜色  </param>
    /// <param name="findSperating">  查找区分,分水平/垂直查找  </param>
    /// <returns></returns>
    private List<Item> FindOneMatchItem(List<Item> matchItemsList, int sprColor, FindSperating findSperating)
    {
        if (colorIndex != 0 && colorIndex == sprColor && !matchItemsList.Contains(this))// 如果颜色一样,则符合条件,如果已经包含了则不再检查
        {
            matchItemsList.Add(this);

            if (findSperating == FindSperating.Horizontal)
            {
                if (GetTopItem())
                    GetTopItem().FindOneMatchItem(matchItemsList, sprColor, FindSperating.Horizontal);  // 检查上方元素是否匹配
                if (GetBottomItem())
                    GetBottomItem().FindOneMatchItem(matchItemsList, sprColor, FindSperating.Horizontal);
            }
            else if (findSperating == FindSperating.Vertical)
            {
                if (GetLeftItem())
                    GetLeftItem().FindOneMatchItem(matchItemsList, sprColor, FindSperating.Vertical);
                if (GetRightItem())
                    GetRightItem().FindOneMatchItem(matchItemsList, sprColor, FindSperating.Vertical);
            }
        }

        return matchItemsList;
    }

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值