Dim qdx,qdy,jk,jg,colorsex,colors,colorss,colorssex,临时列表
Dim 格子(9,13),检测(9,13)
//格子数组是保存每个格子数据,检测数组是保存格子是否为空
Dim 横向一步列表,纵向一步列表
横向一步列表 = "s" : 纵向一步列表 = "s" //初始化值
Dim 延迟
延迟 = 5 //适当加个延迟
SetControlBarPos 0.9
qdx = 65 : qdy = 76 //起点x,起点y
jk = 81 : jg = 81//每个格子宽距离和高距离
For i = 0 To 9
格子(i, 0) = 0
检测(i, 0) = 0
格子(i, 13) = 0
检测(i, 13) = 0
Next
For j = 0 To 13
格子(0, j) = 0
检测(0, j) = 0
格子(9, j) = 0
检测(9, j) = 0
Next
//==================两组for循环是因为连连看可以从边缘连击,所以创造一个边缘格子数组,0表示什么都没有==================
Rem 重新开始
Do
Dim 无用格子
无用格子 = ""
KeepCapture
For j = 1 To 12 //获取格子颜色 进行分类
For i = 1 To 8
colors = ColorDiff(GetPixelColor(qdx + (i-1) * jk, qdy + (j-1) * jg), "000000")
格子(i,j) = colors // 获取每个格子的颜色 以便连击
If ColorDiff(GetPixelColor(45 + (i-1) * jk, 45 + (j-1) * jg), "000000") <= 10 Then
检测(i, j) = 0 //检测此格子是不是被消除了,是就赋值为0,不是就为1
Else
检测(i, j) = 1 //为后面判断提供条件,如果是0那么此路通可以继续判断,否则判断两个格子颜色是否一样
End If
Next
Next
ReleaseCapture
For j = 1 To 12
For i = 1 To 8
If UTF8.InStr(1, 无用格子, i & "," & j) <> 0 Then //在连击后保存被消除了的两个格子信息,遍历时跳过以消除过的格子
Goto 循环
End If
If 检测(i, j) <> 1 Then //判断当前格子是不是可以消除
Goto 循环
End If
Call 中(i, j)
Rem 循环
Next
Next
Loop
//=====================回复一下给予我一点动力=====================
Function 中(i, j)
Dim xx,yy
//横 右
//获取右方向格子数据进行判断,是空的保存到“横向一步列表”然后进行后续两步的判断。 不是空的则判断两个格子是否一样
For xx = i+1 To 9
If 检测(xx, j) = 0 Then
横向一步列表 = 横向一步列表 & "|" & xx & "," & j
ElseIf 格子(i, j) = 格子(xx, j) Then
Tap (i-1) * jk + qdx, (j-1) * jg + qdy
Tap (i-1) * jk + qdx, (j-1) * jg + qdy
Tap (xx - 1) * jk + qdx, (j - 1) * jg + qdy
Tap (xx - 1) * jk + qdx, (j - 1) * jg + qdy
无用格子 = 无用格子 & "|" & xx & "," & j //寻找到格式格子进行消除,并把消除的两个格子信息保存到“无用格子”中
横向一步列表 = "s" //此时不需要后续两步判断直接跳出函数
Exit Function
ElseIf 格子(i, j) <> 格子(xx, j) Then
Exit For
End If
Next
Delay 延迟
//横 左
For xx = i-1 To 0 Step -1
If 检测(xx, j) = 0 Then
横向一步列表 = 横向一步列表 & "|" & xx & "," & j
ElseIf 格子(i, j) = 格子(xx, j) Then
Tap (i-1) * jk + qdx, (j-1) * jg + qdy
Tap (i-1) * jk + qdx, (j-1) * jg + qdy
Tap (xx - 1) * jk + qdx, (j - 1) * jg + qdy
Tap (xx - 1) * jk + qdx, (j - 1) * jg + qdy
无用格子 = 无用格子 & "|" & xx & "," & j
横向一步列表 = "s"
Exit Function
ElseIf 格子(i, j) <> 格子(xx, j) Then
Exit For
End If
Next
If 横向一步列表 <> "s" Then //横向第一步判断完后进行后续两步判断
临时列表 = 纵向列表(i, j, 横向一步列表) //这是第二步判断
Call 横向列表(i, j, 临时列表) //这是第三步判断
临时列表 = "s"
横向一步列表 = "s" //连连看只能拐弯两次,也就是三步,三步完成后所有列表初始化
End If
Delay 延迟
//=================================横向查找完成=================================
//竖 下
For yy = j+1 To 13
If 检测(i, yy) = 0 Then
纵向一步列表 = 纵向一步列表 & "|" & i & "," & yy
ElseIf 格子(i, j) = 格子(i, yy) Then
Tap (i-1) * jk + qdx, (j-1) * jg + qdy
Tap (i-1) * jk + qdx, (j-1) * jg + qdy
Tap (i-1) * jk + qdx, (yy-1) * jg + qdy
Tap (i-1) * jk + qdx, (yy-1) * jg + qdy
无用格子 = 无用格子 & "|" & i & "," & yy
纵向一步列表 = "s"
Exit Function
ElseIf 格子(i, j) <> 格子(i, yy) Then
Exit For
End If
Next
Delay 延迟
//竖 上
For yy = j-1 To 0 Step -1
If 检测(i, yy) = 0 Then
纵向一步列表 = 纵向一步列表 & "|" & i & "," & yy
ElseIf 格子(i, j) = 格子(i, yy) Then
Tap (i-1) * jk + qdx, (j-1) * jg + qdy
Tap (i-1) * jk + qdx, (j-1) * jg + qdy
Tap (i-1) * jk + qdx, (yy-1) * jg + qdy
Tap (i-1) * jk + qdx, (yy-1) * jg + qdy
无用格子 = 无用格子 & "|" & i & "," & yy
纵向一步列表 = "s"
Exit Function
ElseIf 格子(i, j) <> 格子(i, yy) Then
Exit For
End If
Next
If 纵向一步列表 <> "s" Then //这里跟横向一样
临时列表 = 横向列表(i, j, 纵向一步列表)
Call 纵向列表(i,j,临时列表)
临时列表 = "s"
横向一步列表 = "s"
End If
//=================================纵向查找完成=================================
Delay 延迟
End Function
Function 纵向列表(i,j,列表) //输入横向列表,得出来一条纵向可走格子,再调用横向列表函数即可完成查找
Dim ii,i_i,jj,j_j,暂时列表,无用格子,暂时列表ex,多步列表
多步列表 = "s"
If 列表 <> "s" Then
暂时列表 = Split(列表, "|")
For i_i = 1 To UBOUND(暂时列表)
暂时列表ex = Split(暂时列表(i_i), ",")//暂时列表ex(0)是空白格的x坐标,暂时列表ex(1)是空白格的y坐标
//=================================================================
//纵向上
If 暂时列表ex(1) <> 0 Then
For jj = 暂时列表ex(1)-1 To 0 step -1
If 检测(暂时列表ex(0), jj) = 0 Then
多步列表 = 多步列表 & "|" & 暂时列表ex(0) & "," & jj
纵向列表 = 多步列表
ElseIf 格子(i, j) = 格子(暂时列表ex(0), jj) Then
Tap (i - 1) * jk + qdx, (j - 1) * jg + qdy
Tap (i - 1) * jk + qdx, (j - 1) * jg + qdy
Tap (暂时列表ex(0) - 1) * jk + qdx, (jj - 1) * jg + qdy
Tap (暂时列表ex(0) - 1) * jk + qdx, (jj - 1) * jg + qdy
无用格子 = 无用格子 & "|" & 暂时列表ex(0) & "," & jj
多步列表 = "s"
纵向列表 = 多步列表
列表 = "s" //找到可消除的格子,所有保存的列表清空
Exit Function
ElseIf 格子(i, j) <> 格子(暂时列表ex(0), jj) Then
Exit For
End If
Next
End If
//=================================================================
//纵向下
If 暂时列表ex(1) <> 13 Then
For jj = 暂时列表ex(1)+1 To 13
If 检测(暂时列表ex(0), jj) = 0 Then
多步列表 = 多步列表 & "|" & 暂时列表ex(0) & "," & jj
纵向列表 = 多步列表
ElseIf 格子(i, j) = 格子(暂时列表ex(0), jj) Then
Tap (i - 1) * jk + qdx, (j - 1) * jg + qdy
Tap (i - 1) * jk + qdx, (j - 1) * jg + qdy
Tap (暂时列表ex(0) - 1) * jk + qdx, (jj - 1) * jg + qdy
Tap (暂时列表ex(0) - 1) * jk + qdx, (jj - 1) * jg + qdy
无用格子 = 无用格子 & "|" & 暂时列表ex(0) & "," & jj
多步列表 = "s"
纵向列表 = 多步列表
列表 = "s" //找到可消除的格子,所有保存的列表清空
Exit Function
ElseIf 格子(i, j) <> 格子(暂时列表ex(0), jj) Then
Exit For
End If
//=================================================================
Next
End If
Next
End If
End Function
Function 横向列表(i,j,列表) //输入纵向列表,得出来一条横向可走格子,再调用纵向列表函数即可完成查找
Dim ii,i_i,jj,j_j,暂时列表,无用格子,暂时列表ex,多步列表
If 列表 <> "s" Then
暂时列表 = Split(列表, "|")
For i_i = 1 To UBOUND(暂时列表)
暂时列表ex = Split(暂时列表(i_i), ",")//暂时列表ex(0)是空白格的x坐标,暂时列表ex(1)是空白格的y坐标
//=================================================================
//横向左
If 暂时列表ex(0) <> 0 Then
For ii = 暂时列表ex(0)-1 To 0 step -1
If 检测(ii, 暂时列表ex(1)) = 0 Then
多步列表 = 多步列表 & "|" & ii & "," & 暂时列表ex(1)
横向列表 = 多步列表
ElseIf 格子(i, j) = 格子(ii, 暂时列表ex(1)) Then
Tap (i - 1) * jk + qdx, (j - 1) * jg + qdy
Tap (i - 1) * jk + qdx, (j - 1) * jg + qdy
Tap (ii - 1) * jk + qdx, (暂时列表ex(1) - 1) * jg + qdy
Tap (ii - 1) * jk + qdx, (暂时列表ex(1) - 1) * jg + qdy
无用格子 = 无用格子 & "|" & ii & "," & 暂时列表ex(1)
多步列表 = "s"
横向列表 = 多步列表
列表 = "s" //找到可消除的格子,所有保存的列表清空
Exit Function
ElseIf 格子(i, j) <> 格子(ii, 暂时列表ex(1)) Then
Exit For
End If
Next
End If
//=================================================================
//横向右
If 暂时列表ex(0) <> 9 Then
For ii = 暂时列表ex(0)+1 To 9
If 检测(ii, 暂时列表ex(1)) = 0 Then
多步列表 = 多步列表 & "|" & ii & "," & 暂时列表ex(1)
横向列表 = 多步列表
ElseIf 格子(i, j) = 格子(ii, 暂时列表ex(1)) Then
Tap (i - 1) * jk + qdx, (j - 1) * jg + qdy
Tap (i - 1) * jk + qdx, (j - 1) * jg + qdy
Tap (ii - 1) * jk + qdx, (暂时列表ex(1) - 1) * jg + qdy
Tap (ii - 1) * jk + qdx, (暂时列表ex(1) - 1) * jg + qdy
无用格子 = 无用格子 & "|" & ii & "," & 暂时列表ex(1)
多步列表 = "s"
横向列表 = 多步列表
列表 = "s" //找到可消除的格子,所有保存的列表清空
Exit Function
ElseIf 格子(i, j) <> 格子(ii, 暂时列表ex(1)) Then
Exit For
End If
Next
End If
//=================================================================
Next
End If
End Function