Python实现连连看11

(2)isOneCornerLink()函数

isOneCornerLink()函数判断图片是否是单拐点连通。判断是否是单拐点连通有两种方式,如图14所示。

图14 判断单拐点连通的两种方式

从图14中可以看出,判断两张图片是否是单拐点连通,实际上就是判断图中红点与绿点所在图片是否分别与这两张图是直接连通即可,代码如下所示。

python 复制代码
def isOneCornerLink(pre_row, pre_col, cur_row, cur_col):
    if isNoCornerLink(pre_row, pre_col, pre_row, cur_col)\
         and isNoCornerLink(pre_row, cur_col, cur_row, cur_col):
        return True
    if isNoCornerLink(pre_row, pre_col, cur_row, pre_col)\
         and isNoCornerLink(cur_row, pre_col, cur_row, cur_col):
        return True
return False

其中,第2-4行代码判断如图14中红点所在图片是否与两张图片是直接连通,如果都是直接连通,则返回True;第5-7行代码如图14中绿点所在图片是否与两张图片是直接连通,如果都是直接连通,则返回True。

(3)isTwoCornerLink()函数

isTwoCornerLink()函数判断图片是否是双拐点连通。与判断单拐点连通类似,两张图片是双拐点连通的条件是,这两个拐点分别与两张图片是直接连通,并且这两个拐点之间也是直接连通即可,如图15和图16所示。

图15 判断双拐点的方式(1)

图16 判断双拐点的方式(2)

从图15所示的垂直方向判断双拐点的方法,两张图片是双拐点连通有两种形式:一种是图片位于地图的左侧边缘或者右侧边缘时,如图15红色部分;另一种是图片位于地图内部位置时,如图15红绿部分。代码如下所示

python 复制代码
for col in range(-1, COL_PIC+1):
        if col==pre_col or col==cur_col:
            continue

其中,第1行的for循环遍历了第-1列(左侧边缘外)到第COL_PIC列(右侧边缘外)中所有的列,第2-3行表示不比较两次选中的图片。

python 复制代码
if col==-1 or col==COL_PIC:
    if isNoCornerLink(pre_row, pre_col, pre_row, col)\
    and isNoCornerLink(cur_row, cur_col, cur_row, col):
         return True

第1行代码表示如果两张图在左侧边缘(图15红色图片)或者在右侧边缘时,当两个拐点是直接连通(代码2-3行),就说明这两张图是双拐点连通。

python 复制代码
else:
     if isNoCornerLink(pre_row, pre_col, pre_row, col) \
     and isNoCornerLink(cur_row, cur_col, cur_row, col) \
     and isNoCornerLink(pre_row, col,cur_row, col) \
     and pics_map[pre_row][col]==MAP_EMPTY \
     and pics_map[cur_row][col]==MAP_EMPTY:
        return True

第1行中的else与之前的if配对,如果两张图片在地图内部时(图15红绿色图片),如果这两张图片是双拐点连通,必须满足的条件是(1)第一次选中的图片与第一个拐点是直接连通(2)第二次选中的图片与第二个拐点是直接连通(3)两个拐点间是直接连通(4)第一张图片与第一个拐点间没有图片遮挡(5)第二张图片与第二个拐点间没有图片遮挡。

同理,图16显示的是垂直方向判断双拐点的方法,代码如下所示。

python 复制代码
for row in range(-1, ROW_PIC+1):
        if row==pre_row or col==cur_row:
            continue
        if row==-1 or row==COL_PIC:
            if isNoCornerLink(pre_row, pre_col, row, pre_col)\
               and isNoCornerLink(cur_row, cur_col, row, cur_col):
                return True
        else:
            if isNoCornerLink(pre_row, pre_col, row, pre_col) \
               and isNoCornerLink(cur_row, cur_col, row, cur_col) \
               and isNoCornerLink(row, pre_col,row, cur_col) \
               and pics_map[row][pre_col]==MAP_EMPTY \
               and pics_map[row][cur_col]==MAP_EMPTY:
                return True
相关推荐
.生产的驴6 分钟前
SpringBoot AOP切入点表达式
spring boot·后端·python
逆水寻舟34 分钟前
算法学习记录2
python·学习·算法
B站计算机毕业设计超人1 小时前
计算机毕业设计Python深度学习美食推荐系统 美食可视化 美食数据分析大屏 美食爬虫 美团爬虫 机器学习 大数据毕业设计 Django Vue.js
大数据·python·深度学习·机器学习·数据分析·课程设计·推荐算法
码农超哥同学1 小时前
Python面试题:请解释 `lambda` 函数是什么,并举一个例子
开发语言·python·面试·编程
sssjjww1 小时前
python输出日志out.log相关问题(缓存机制)
java·python·缓存
Uluoyu2 小时前
python爬虫爬取中国国际招标有限公司
开发语言·爬虫·python
Python私教2 小时前
zdppy+onlyoffice+vue3解决文档加载和文档强制保存时弹出警告的问题
vue.js·python
菜鸟赵大宝2 小时前
【Python】Python中TODO的用法解析
python·pycharm
Narutolxy2 小时前
如何高效管理和迁移Python开发环境:从Conda到纯Python的转换指南
开发语言·python·conda
萌狼蓝天2 小时前
[python]Markdown图片引用格式批处理桌面应用程序
开发语言·python