玩无限消乐的设计示例(智能篇)智能配对算法

元素多了看得眼花缭乱的,如果让程序辅助搜寻可能的配对,则玩起来更容易,玩得容易则是益智娱乐的一个原则,智能搜寻目的为特效配对,普通配对,找到可配对位置后会交替闪烁提示..

        private void 智能配对(int 主数据, int 辅数据, bool 行列 = true)
        {
            int 行 = 0, 列 = 0, 查 = 1, 隔 = 2, 值1 = 0, 值2 = 0, 值3 = 0, 行数 = 玩无限消乐.RowCount, 列数 = 玩无限消乐.ColumnCount;
            Func<int, int, DataGridViewCell> 记录单元 = (行序, 列序) => { return 玩无限消乐.Rows[行序].Cells[列序]; };
            Func<bool> 智能判断 = () =>
            { return
                (值1 == 主数据 && 值2 == 辅数据) || (值1 == 辅数据 && 值2 == 主数据) ||
                (值2 == 主数据 && 值3 == 辅数据) || (值2 == 辅数据 && 值3 == 主数据) ||
                (值1 == 主数据 && 值3 == 辅数据) || (值1 == 辅数据 && 值3 == 主数据);
            };
            while (行列 ? 列 < 列数 : 行 < 行数)
            {
                值1 = (int)记录单元(行, 列).Tag;
                值2 = (int)记录单元(行列 ? 查 : 行, 行列 ? 列 : 查).Tag;
                值3 = (int)记录单元(行列 ? 隔 : 行, 行列 ? 列 : 隔).Tag;
                if (智能判断(/*数据1为独辅,数据2为双主 continue;*/))
                {
                    if ((值1 == 辅数据 && 值2 == 主数据) || (值1 == 辅数据 && 值3 == 主数据))
                        添加智能(主数据, 记录单元(行, 列), true, false);
                    if ((值1 == 主数据 && 值2 == 辅数据) || (值2 == 辅数据 && 值3 == 主数据))
                        添加智能(主数据, 记录单元(行列 ? 查 : 行, 行列 ? 列 : 查), true, false);
                    if ((值1 == 主数据 && 值3 == 辅数据) || (值2 == 主数据 && 值3 == 辅数据))
                        添加智能(主数据, 记录单元(行列 ? 隔 : 行, 行列 ? 列 : 隔), true, false);
                }
                if (行列) ++行; else ++列; ++查; ++隔;
                if (隔 >= (行列 ? 行数 : 列数))
                { if (行列) 行 = 0; else 列 = 0; 查 = 1; 隔 = 2; if (行列) ++列; else ++行; }
                //Application.DoEvents();
            }
            添集合 = true;
        }

添加到集合

        private void 添加智能(int 数据, DataGridViewCell 单元, bool 选, bool 配)
        {
            Action<int, int> 配对搜寻 = (主数据, 辅数据) =>
            { new Thread(() => { 智能配对(主数据, 辅数据); 智能配对(主数据, 辅数据, false); }).Start(); };
            if ((int)单元.Tag != 0)
            {
                bool 判 = true; int 序 = 0;
                while (最优集合.Count > 序)
                {
                    DataGridViewCell 元素 = 最优集合[序++];
                    if (元素 != null && 元素.ColumnIndex == 单元.ColumnIndex && 单元.RowIndex == 元素.RowIndex)
                    { 判 = false; break; }
                }
                if (判)
                { 
                    if (选) 最优集合.Add(单元); else 最优集合.Insert(0, 单元);
                    if (配) 配对搜寻((int)单元.Tag, 数据);
                }
            }
        }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值