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