首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

练手项目一(wxpython连连看)

2012-12-21 
练手项目1(wxpython连连看)??开始实习啦!要用python,??第一个练手项目,用wxpython写界面,实现了连连看的1

练手项目1(wxpython连连看)

??开始实习啦!要用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 #都不满足
?

热点排行