#w:: run winmine.exe return #s:: start: Process Exist,winmine.exe pid:=ErrorLevel If (errorlevel=0) { MsgBox ,64,提示,请先打开扫雷! Exit 5 } WinGet id,id,ahk_pid%pid% WinActivate ahk_pid%pid% WinWaitActive ahk_pid%pid% WinGetPos ,,,wl,hl,ahk_pid%pid% xn:=Round((wl-30)/16) yn:=Round((hl-115)/16) m:=xn*yn CoordMode pixel,relative PixelSearch xl1,,9,hl-50,20,hl-50,0x808080 xl1+=3 xl2:=16*xn-1+xl1 PixelSearch ,,yl2,50,hl-9,50,hl-20,0xFFFFFF yl2-=3 yl1:=yl2-16*yn+1 CoordMode mouse,relative offcount:=0 loop %yn% { ifoffy:=A_Index Loop %xn% { noff:=ifnoff(A_index,ifoffy) If (noff="off") { offcount++ } } } If (offcount =0) { ControlSend ,,{F2},扫雷 } clickstart: Random nxrandom,1,xn Random nyrandom,1,yn nrpx:=xl1+8+16*(nxrandom-1) nrpy:=yl1+8+16*(nyrandom-1) ControlClick x%nrpx% y%nrpy%,ahk_pid%pid%,,L,,NA Search: done:=0 Loop %yn% { ny:=A_Index nvy:=ny Loop %xn% { nvx:=A_Index ny:=nvy nx:=A_Index n%nx%_%ny%:=number(nx,ny) n:=n%nx%_%ny% nnx:=xl1+8+16*(nx-1) nny:=yl1+8+16*(ny-1) if n%nx%_%ny% is Number { on=0 off=0 flag=0 nr= nrd= nd= nld= nl= nlu= nu= nru= Gosub ntype } } } If (done=1) Gosub search Else { offcount:=0 loop %yn% { ifoffy:=A_Index Loop %xn% { noff:=ifnoff(A_index,ifoffy) If (noff="off") { offcount++ offx%offcount%:=A_Index offy%offcount%:=ifoffy } } } If (offcount =0) Exit 8 Random nrandom,1,offcount nrpx:=xl1+8+16*(offx%nrandom%-1) nrpy:=yl1+8+16*(offy%nrandom%-1) ControlClick x%nrpx% y%nrpy%,ahk_pid%pid%,,L,,NA Gosub search } Exit 4 ntype: If (ny=1) and (nx=1) { Gosub noLU Return } If (ny=1) and (nx1) and (nxxn) { Gosub noU Return } If (ny=1) and (nx=xn) { Gosub noRU Return } If (ny1) and (nyyn) and (nx=1) { Gosub noL Return } If (ny1) and (nyyn) and (nx1) and (nxxn) { Gosub AS Return } If (ny1) and (nyyn) and (nx=xn) { Gosub noR Return } If (ny=yn) and (nx=1) { Gosub noLD Return } If (ny=yn) and (nx1) and (nxxn) { Gosub noD Return } If (ny=yn) and (nx=xn) { Gosub noRD Return } Detect: noLU: na:=3 nx++ nr:=Status(nx,ny) ny++ nrd:=Status(nx,ny) nx-- nd:=Status(nx,ny) Gosub Do Return noU: na:=5 nx++ nr:=Status(nx,ny) ny++ nrd:=Status(nx,ny) nx-- nd:=Status(nx,ny) nx-- nld:=Status(nx,ny) ny-- nl:=Status(nx,ny) Gosub Do Return noRU: na:=3 ny++ nd:=Status(nx,ny) nx-- nld:=Status(nx,ny) ny-- nl:=Status(nx,ny) Gosub Do Return noL: na:=5 nx++ nr:=Status(nx,ny) ny++ nrd:=Status(nx,ny) nx-- nd:=Status(nx,ny) ny-=2 nu:=Status(nx,ny) nx++ nru:=Status(nx,ny) Gosub Do Return AS: na:=8 nx++ nr:=Status(nx,ny) ny++ nrd:=Status(nx,ny) nx-- nd:=Status(nx,ny) nx-- nld:=Status(nx,ny) ny-- nl:=Status(nx,ny) ny-- nlu:=Status(nx,ny) nx++ nu:=Status(nx,ny) nx++ nru:=Status(nx,ny) Gosub Do Return noR: na:=5 ny++ nd:=Status(nx,ny) nx-- nld:=Status(nx,ny) ny-- nl:=Status(nx,ny) ny-- nlu:=Status(nx,ny) nx++ nu:=Status(nx,ny) Gosub Do Return noLD: na:=3 nx++ nr:=Status(nx,ny) nx-- ny-- nu:=Status(nx,ny) nx++ nru:=Status(nx,ny) Gosub Do Return noD: na:=5 nx-- nl:=Status(nx,ny) ny-- nlu:=Status(nx,ny) nx++ nu:=Status(nx,ny) nx++ nru:=Status(nx,ny) ny++ nr:=Status(nx,ny) Gosub Do Return noRD: na:=3 nx-- nl:=Status(nx,ny) ny-- nlu:=Status(nx,ny) nx++ nu:=Status(nx,ny) Gosub Do Return Status(nx,ny) { global px:=xl1+1+16*(nx-1) py:=yl1+1+16*(ny-1) CoordMode pixel,relative PixelGetColor ,color,px,py if (color=0xFFFFFF) { PixelGetColor color1,xl1+7+16*(nx-1),yl1+5+16*(ny-1) PixelGetColor color2,xl1+8+16*(nx-1),yl1+11+16*(ny-1) If (color1=0x0000FF) and (color2=0x000000) { flag++ Return "flag" } Else { off++ off%off%x:=xl1+8+16*(nx-1) off%off%y:=yl1+8+16*(ny-1) Return "off" } } Else { on++ Return "on" } } Number(nx,ny) { global xl1,yl1 py:=yl1+8+16*(ny-1) px:=xl1+8+16*(nx-1) CoordMode pixel,relative PixelGetColor color,px,py if (color=0xFF0000) Return 1 if (color=0x008000) Return 2 if (color=0x0000FF) Return 3 if (color=0x800000) Return 4 if (color=0x000080) Return 5 if (color=0x808000) Return 6 if (color=0x000000) { PixelGetColor color,px-1,py-1 if (color=0xFFFFFF) { PixelGetColor color1,xl1+7+15*(nx-1),yl1+5+15*(ny-1) PixelGetColor color2,xl1+8+15*(nx-1),yl1+11+15*(ny-1) If (color1=0x0000FF) and (color2=0x000000) Return "flag" Else { ControlSend ,,{F2},扫雷 Gosub search } } } If (color=0xC0C0C0) { PixelGetColor color7,px+1,py+1 If (color7=0x000000) Return 7 } if (color=0x808080) Return 8 } Do: If (n=na-on) and (flagn) { Gosub flag done:=1 } If (n=flag) and (off > 0) { Gosub Dig done:=1 } Return Dig: ControlClick x%nnx% y%nny%,ahk_pid%pid%,,M,,NA Return Flag: Loop %off% { flagx:=off%A_Index%x flagy:=off%A_Index%y ControlClick x%flagx% y%flagy%,ahk_pid%pid%,,R,,NA } Return ifnoff(xn,yn) { global xl1,yl1 py:=yl1+8+16*(yn-1) px:=xl1+8+16*(xn-1) CoordMode pixel,relative PixelGetColor color,px,py if (color=0xC0C0C0) { PixelGetColor color,px-7,py-7 If (color=0xFFFFFF) Return "off" } }