交换动画元素后就是要消除动画元素了,消除的规则是横向或纵向相连的三个以上相同元素才能进行消除,操作意图注释在语句中。
private bool 消除动画(int 行数, int 列数, int 数据, bool 行列 = false)
{
bool 选控 = false;
if (!行列) 计个数 = 0;
消除: //跟踪记录("消除动画:" + (选控 ? "消除" : "检查"));
int 重复 = 0, 上 = 行数, 下 = 行数, 左 = 列数, 右 = 列数; 选定坐标[4] = 行数; 选定坐标[5] = 列数;
if (行列 && 数据 != 0)
{
while (上 > 0 && (int)玩无限消乐.Rows[--上].Cells[列数].Tag == 数据)
{ if (!选控) ++重复; else { 玩无限消乐.Rows[上].Cells[列数].Value = new Bitmap("动画素材/e136.gif"); 玩无限消乐.Rows[上].Cells[列数].Tag = 0; } }
while (下 < 玩无限消乐.RowCount - 1 && (int)玩无限消乐.Rows[++下].Cells[列数].Tag == 数据)
{ if (!选控) ++重复; else { 玩无限消乐.Rows[下].Cells[列数].Value = new Bitmap("动画素材/e136.gif"); 玩无限消乐.Rows[下].Cells[列数].Tag = 0; 选定坐标[4] = 下;/*由于自上而下循环,因此,记录最下位置。*/ } }
}
if (!行列 && 数据 != 0)
{
while (右 < 玩无限消乐.ColumnCount - 1 && (int)玩无限消乐.Rows[行数].Cells[++右].Tag == 数据)
{ if (!选控) ++重复; else { 玩无限消乐.Rows[行数].Cells[右].Value = new Bitmap("动画素材/e136.gif"); 玩无限消乐.Rows[行数].Cells[右].Tag = 0; } }
while (左 > 0 && (int)玩无限消乐.Rows[行数].Cells[--左].Tag == 数据)
{ if (!选控) ++重复; else { 玩无限消乐.Rows[行数].Cells[左].Value = new Bitmap("动画素材/e136.gif"); 玩无限消乐.Rows[行数].Cells[左].Tag = 0; 选定坐标[5] = 左;/*由于从左到右进行循环,因此,记录最左的位置。*/ } }
}
if (重复 >= 2)
{
选控 = true;/*控制第一次是检查并计数,如果符合要求则跳转去消除元素。*/
goto 消除;
}
return 选控;/*返回是否进行消除信息。*/
}