1. 程式人生 > >200.1 Python實現一筆畫完輔助

200.1 Python實現一筆畫完輔助

1.1構思

源:微信小程式
轉:騰訊手遊助手

  1. 使程式識別方塊(黑色方塊、白色方塊、起點方塊)
  2. 進行計算出路(利用遞迴窮舉法)

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