两颗西柚|利用Python实现自动扫雷小脚本( 二 )


(左右滑动可查看完整代码)
5.扫雷算法
这里我采用的最基础的算法
1.首先点出一个点
2.扫描所有数字 , 如果周围空白+插旗==数字 , 则空白均有雷 , 右键点击空白插旗
3.扫描所有数字 , 如果周围插旗==数字 , 则空白均没有雷 , 左键点击空白
4.循环2、3 , 如果没有符合条件的 , 则随机点击一个白块
#插旗defbanner():showmap()foryinrange(blocks_y):forxinrange(blocks_x):if1<=map[y][x]andmap[y][x]<=5:boom_number=map[y][x]block_white=0block_qi=0foryyinrange(y-1,y+2):forxxinrange(x-1,x+2):if0<=yyand0<=xxandyy<blocks_yandxx<blocks_x:ifnot(yy==yandxx==x):ifmap[yy][xx]==0:block_white+=1elifmap[yy][xx]==-4:block_qi+=1ifboom_number==block_white+block_qi:foryyinrange(y-1,y+2):forxxinrange(x-1,x+2):if0<=yyand0<=xxandyy<blocks_yandxx<blocks_x:ifnot(yy==yandxx==x):ifmap[yy][xx]==0:win32api.SetCursorPos([left+xx*block_width,top+yy*block_height])win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTDOWN,0,0,0,0)win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP,0,0,0,0)showmap()#点击白块defdig():showmap()iscluck=0foryinrange(blocks_y):forxinrange(blocks_x):if1<=map[y][x]andmap[y][x]<=5:boom_number=map[y][x]block_white=0block_qi=0foryyinrange(y-1,y+2):forxxinrange(x-1,x+2):if0<=yyand0<=xxandyy<blocks_yandxx<blocks_x:ifnot(yy==yandxx==x):ifmap[yy][xx]==0:block_white+=1elifmap[yy][xx]==-4:block_qi+=1ifboom_number==block_qiandblock_white>0:foryyinrange(y-1,y+2):forxxinrange(x-1,x+2):if0<=yyand0<=xxandyy<blocks_yandxx<blocks_x:ifnot(yy==yandxx==x):ifmap[yy][xx]==0:win32api.SetCursorPos([left+xx*block_width,top+yy*block_height])win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0,0,0)win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0,0,0)iscluck=1ifiscluck==0:luck()#随机点击defluck():fl=1while(fl):random_x=random.randint(0,blocks_x-1)random_y=random.randint(0,blocks_y-1)if(map[random_y][random_x]==0):win32api.SetCursorPos([left+random_x*block_width,top+random_y*block_height])win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0,0,0)win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0,0,0)fl=0defgogo():win32api.SetCursorPos([left,top])win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0,0,0)win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0,0,0)showmap()globalgameoverwhile(1):if(gameover==0):banner()banner()dig()else:gameover=0win32api.keybd_event(113,0,0,0)win32api.SetCursorPos([left,top])win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0,0,0)win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0,0,0)showmap()


推荐阅读