两颗西柚|利用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()
推荐阅读
- 严胖子黑科技|有水有大气!,人类移居有望了?科学家:两颗“超级地球”被发现
- 小强幽默|公司如何做好网络营销推广找客户,园林花卉行业企业怎么利用网络推广引流获客
- 风雨同进步|公司如何做好网络营销推广找客户,旅游行业企业怎么利用网络推广引流获客
- 小熊带你玩科技|全新等离子体光子芯片:利用光进行超高速数据传输
- 风雨同进步|公司如何做好网络营销推广找客户,家装建材行业企业怎么利用网络推广引流获客
- 博科园|还同时看到太阳系两颗小行星,哈勃拍摄1500万光年外的星系时
- 两颗西柚|3A系列,尽管新款的Pixel 4A还没推出,但Google确认不再提供Pixel
- 换个角度看问题|昂科信息利用5G+物联网为中科大附一院建设智慧医疗服务
- 雨果的书房|IBM利用容器提升大型机上的DevOps
- 科技刀|第三届太空技术和平利用国际研讨会第二次筹备会召开
