开始实习啦!要用python,
第一个练手项目,用wxpython写界面,实现了连连看的1连通,2连通,3连通
算法:1,如果相邻肯定连通,判断两个格子是否在同行同列且之间是否空白,如果空白则连通
2,1连通不满足,判断两个格子能否构成一个直角,通过两个选中格子p1p2生成另两个对角点p3p4(四个点构成一个矩形),判断p3能否和p1p2够成1连通,或者p4能否和p1p2构成1连通,满足一个条件即可
3,2连通也不满足,从p1周围(同行同列)找一个和p1构成1连通的p5,判断p5是否能和p2构成2连通,如果满足则属于3连通
python函数:
#单线连通
def linecheck(self,index0,index1):
x_y0=self.getX_Y(index0)
x_y1=self.getX_Y(index1)
x0=x_y0[0]
y0=x_y0[1]
x1=x_y1[0]
y1=x_y1[1]
if x0==x1:#同一列是否有通路
if abs(y0-y1)==1:
return True#相邻
tempflag=True
for i in range(min(y0,y1)+1,max(y0,y1),1):
if self.imageProlist[self.getIndex(x0,i)].getrandnum()!=(-1):
tempflag=False
break #同一列不通
if tempflag:
return True
if y0==y1:#同一行是否有通路
if abs(x0-x1)==1:
return True#相邻
tempflag=True
for i in range(min(x0,x1)+1,max(x0,x1),1):
if self.imageProlist[self.getIndex(i,y0)].getrandnum()!=(-1):
tempflag=False
break#同一行不通
if tempflag:
return True
return False#没有单线连通
#单直角连通,即有两根线相交
def secondlinecheck(self,index0,index1):
x_y0=self.getX_Y(index0)
x_y1=self.getX_Y(index1)
x0=x_y0[0]
y0=x_y0[1]
x1=x_y1[0]
y1=x_y1[1]
#即判断(x0,y1)和两点单线连通,或者(x1,y0)和两点单线连通
index01=self.getIndex(x0,y1)
index10=self.getIndex(x1,y0)
#这两点本身要为空
if self.linecheck(index01,index0)\
and self.linecheck(index01,index1)\
and self.imageProlist[index01].getrandnum()==(-1):
return True
if self.linecheck(index10,index0)\
and self.linecheck(index10,index1)\
and self.imageProlist[index10].getrandnum()==(-1):
return True
return False
#双直角,三线连接
def trilinecheck(self,index0,index1):
x_y0=self.getX_Y(index0)
x0=x_y0[0]
y0=x_y0[1]
#在p1周围寻找一个空格与p2单直角连通即可
#先固定y0寻找空格,非空格停止,越界停止
iter_x=x0-1#在左边寻找
while iter_x>=0 and iter_x<self.gridwidth:
if self.imageProlist[self.getIndex(iter_x,y0)].getrandnum()==(-1):
#这是p0周围空格的点
if self.secondlinecheck(self.getIndex(iter_x,y0),index1):
return True
else:
#退出这层循环
break
iter_x-=1
iter_x=x0+1#在右边寻找
while iter_x>=0 and iter_x<self.gridwidth:
if self.imageProlist[self.getIndex(iter_x,y0)].getrandnum()==(-1):
#这是p0周围空格的点
if self.secondlinecheck(self.getIndex(iter_x,y0),index1):
return True
else:
#退出这层循环
break
iter_x+=1
#先固定x0寻找空格,非空格停止,越界停止
iter_y=y0-1#在上边寻找
while iter_y>=0 and iter_y<self.gridheight:
if self.imageProlist[self.getIndex(x0,iter_y)].getrandnum()==(-1):
#这是p0周围空格的点
if self.secondlinecheck(self.getIndex(x0,iter_y),index1):
return True
else:
#退出这层循环
break
iter_y-=1
iter_y=y0+1#在下边寻找
while iter_y>=0 and iter_y<self.gridheight:
if self.imageProlist[self.getIndex(x0,iter_y)].getrandnum()==(-1):
#这是p0周围空格的点
if self.secondlinecheck(self.getIndex(x0,iter_y),index1):
return True
else:
#退出这层循环
break
iter_y+=1
return False #都不满足
分享到:
相关推荐
NULL 博文链接:https://westice.iteye.com/blog/973533
Part1 wxPython入门 , wxPython入门 , wxPython入门里面有实例讲解
wxpython中文教程wxpython中文教程wxpython中文教程wxpython中文教程wxpython中文教程wxpython中文教程wxpython中文教程wxpython中文教程wxpython中文教程
几本很不错的关于python gui的wxPython的书,包括“wxPython in Action(中文版)” 活学活用wxPython “《wxPython in Action》Noel Rappin, Robin Dunn著 2006年版”
源码包:wxPython-4.1.1.tar.gz 直接用pip3 install wxPython命令安装会各种报错,经过排雷,编译成功的安装包,可直接用以下命令安装: pip3 install wxPython-4.1.1-cp39-cp39-macosx_11_0_universal2.whl
CustomTreeCtrl是一个wxpython的树控件类,在使用的过程中对于拖放功能一直不是很理解,最近看了以上文章和参考了一些其他例子的代码,对于wxPython实现该功能做一些说明。
wxPython开发参考书籍
python2.4相对应的wxPython,还有很多库,一次性下载,不用费心去找了。
wxpython grid使用部分
wxPython and PyOpengl源码 演示如何在wxPython构建的GUI中使用pyopengl绘制场景
wxPython的wxAuiNotebook实现Tab页效果
wxpython for python2.4 wxpython for python2.4 wxpython for python2.4 wxpython for python2.4 做python开发,注意自己的python版本是2.4
活学活用wxPython pdf版,有1-18章 有图
wxPython Application Development Cookbook wxPython 开发入门
wxpython 学习,各种demo集合,
wxPython Grid Tips and Tricks
wxPython_API.chm Python+中文手册.pdf Python入门指南 2.5b.pdf python教程.chm wxPIA_book wxPython_Tutorial wxpython-in-action-zh.pdf
wxPython是一个用于创建桌面GUI应用程序的跨平台工具包。wxPython的主要作者是Robin Dunn。使用wxPython,开发人员可以在Windows,Mac和各种Unix系统上创建应用程序。
wxPython是Python编程语言的一个GUI工具箱。他使得Python程序员能够轻松的创建具有健壮、功能强大的图形用户界面的程序。它是Python语言对流行的wxWidgets跨平台GUI工具库的绑定。而wxWidgets是用C++语言写成的。 和...