200.1 Python實現一筆畫完輔助
阿新 • • 發佈:2018-11-10
1.1構思
源:微信小程式
轉:騰訊手遊助手
- 使程式識別方塊(黑色方塊、白色方塊、起點方塊)
- 進行計算出路(利用遞迴窮舉法)
1.2 識別演算法
利用:圖片.getpixel((x,y))
獲取目標介面的顏色分佈:顏色字典
利用黑色方塊、白色方塊、起點方塊的特性
來識別並輸出到地圖
1.3 計算出路演算法
演算法:窮舉法
遞迴條件:達到滿足黑色方塊數的步數即可迴歸
2 Python具體實現
python程式碼網站:https://github.com/eternal2056/YiBiHuaWan/tree/master
按鍵精靈程式碼網站:https://github.com/eternal2056/YiBiHuaWan/blob/master/mouse.Q
2.1 包
2.1.1 win32類的包
技術文件:http://timgolden.me.uk/pywin32-docs/contents.html
作用:控制代碼
2.1.2 PIL
技術文件:https://pillow.readthedocs.io/en/5.3.x/
作用:影象處理
2.13 time
技術文件:https://docs.python.org/3/library/time.html
作用:時間控制
2.14 numpy
技術文件:http://cs231n.github.io/python-numpy-tutorial/ 作用:製作地圖
2.2 內容
2.2.1 global
全域性變數
關鍵字
在函式外 global 變數名:
宣告此變數是全域性的
在函式內 global 變數名:
宣告此變數的使用的是外部的全域性變數
使用的時候還要宣告一次,很煩!
2.2.2 控制代碼
利用Spy++
,Ctrl + F(Find Window) 獲取Class與Caption
win32gui.FindWindow(ClassName, CaptionName)
if not hwnd:
#如果hwnd沒有值,print!
print("Window not find!")
2.2.3 彈出最上面
win32gui.ShowWindow(控制代碼, win32con.SW_RESTORE)
win32gui.SetForegroundWindow(hwnd)
time.sleep(1)
#暫停一秒,使截圖更有保障!
SW_RESTORE的選擇:https://blog.csdn.net/csx66406602/article/details/54313913
2.2.4 截圖
#獲取對角X,Y
game_rect = win32gui.GetWindowRect(控制代碼)
#截圖
截到的圖(返回值) = ImageGrab.grab((game_rect[0]+xx, game_rect[1]+xx, game_rect[2]+xx, game_rect[3]+xx))
返回值 game_rect 是左上角X,左上角Y,右下角X,右下角Y
2.2.5 地圖製作
ditu(地圖變數名) = zeros((Y,X) , dtype = "str")
Y == len(ditu)
X == len(ditu[0])
dtype:ditu[Y][X]的填充物型別
#int、str、float等
2.2.6 列表新增新元素
_list = []
_list.append([x,y])
_list.append(元素)
_list[-1] #最後一個元素
2.3 函式
def 函式名():
print("牛逼")
return
#在迴圈中不能這麼用,儘量使用不同
hanshu = hanshu()
== 等於
!= 不等於
= 賦值
2.3.1 字典
#建立新的字典
zidian = {}
#新增新的值
zidian[變數的名] = 變數的值
#獲取變數名對應的值
值 = zidian.get(變數名)
2.3.2 range
range(549) #0~548
range(0,100) #0~99
range(1,100,2) #1,3,5,...,99
2.3.3 顏色獲取
src_image.getpixel((x,y))
#返回值為(R, G, B)
2.3.4 型別轉換
list(變數)
#轉化為list型別
例子:list(src_image.getpixel((x,y)))
#tuple → list
2.3.5 迴圈
#從一次迴圈跳脫出來
break
#進入下一次迴圈(不跳,還在原來的迴圈)
continue
2.3.6 算術
// : 10 // 11 == 1
% : 8 % 5 == 3
() : 最優先!
2.3.7 長度
list = [1,2,3,4,5]
len(list) == 5
2.3.8 檔案
菜鳥教程:http://www.runoob.com/python3/python3-file-methods.html
路徑用:
D:/sss/sss/sss 表示
#w+
#讀寫模式中的:裡面就算有東西也要清空重新寫
#適用於不需要之前的資料的記錄
#還有很多不同的模式,可以從教程看到
wenjian = open("D:/sss/xxx.txt", "w+")
wenjian.write(寫入的內容)
wenjian.close
2.4 遞迴
遞迴:
def digui(i):
if i == 0:
return i
else:
return digui(i-1)
這種函式裡還有函式的叫遞迴
其實我也不太懂,哈哈
領悟:
遞迴函式中每一個 判斷
與 程式碼塊
中都要有return
3 按鍵精靈實現
3.1 賦值
windows = 1
3.2 函式
Function 函式名
//
//
End Function
3.3 定義
Dim 變數名
3.4檔案
//設定fso為檔案
Set fso = CreateObject("Scripting.FileSystemObject")
//控制代碼賦值給f
Set f = fso.OpenTextFile("D:\......\xianzhuang.txt", 1)
//讀取全部內容
ReadAllTextFile = f.ReadAll
3.5 字串與陣列
//以分隔符分隔字串,返回陣列
陣列(返回值) = Split(字串, "分隔符")
//獲取陣列元素個數
數字(返回值) = UBoud(陣列, 1)
3.6 迴圈
3.6.1 For迴圈
For i = 1 To x
//
//
Next
3.6.2 While迴圈
While 條件(成立即可迴圈)
//
//
Wend