1. 程式人生 > >微信跳一跳第二天

微信跳一跳第二天

inf AI pla 假設 span adb pad 比例 src

1. 尋找關鍵坐標——起跳坐標

算法策略:獲取小人的底座中心點的值作為起跳點。

1 獲取小人的所有像素點中y坐標的最大值

2 在小人y坐標的最大值那些像素點中,計算出x的平均值,作為小人底座的x的值。

3 y坐標的最大值減去一個偏移值,就作為小人底座的y值。(註意:該偏移值不同的設備是不同的,同一臺設備不同場景下是一樣的)

比如教師機的設備中最低點的值是(337,1131),中心值是 (337,1113),從而計算出偏移值為1131-1113=18

技術分享圖片

2. 尋找目標坐標

獲取目標坐標的y值

取屏幕寬和高的一半(x=540和y=960)

技術分享圖片

我們會發現,目標格子的邊沿(x=563,y=978)和這個是差不多的(y的偏差是18,x的偏差是23.

以後每次跳動的時候,假如已經知道目標格子的邊沿,和目標坐標的x值,就可以很輕松計算出目標坐標的y值。

註意:每個格子的寬和高的比例是相同的。

左:(563,847)

右:(1015,847)

上:(788,720)

下:(788,978)

中:(788,847)

高和寬的比例:(978-720)/(1015-563) =258/452。假設該值為p

技術分享圖片

已經知道目標坐標的x值,求目標坐標的y值

技術分享圖片

3. 控制屏幕進行跳動

operation.py

# 控制屏幕進行跳動

def jump(self, src, dst, press_time):

press_time = int(press_time)

cmd = "adb shell input swipe %d %d %d %d %d" % (

int(src[0]), int(src[1]),

int(dst[0]), int(dst[1]),

press_time

)

print(cmd)

os.system(cmd)

main.py

def test_jump():

algorithm = Algorithm()

op = Operation()

im = op.screen_cap()

start_x, start_y, end_x, end_y = algorithm.find_point(im)

start_point = (start_x, start_y)

end_point = (end_x, end_y)

distance = algorithm.euclidean_distance(start_point, end_point)

press_time = algorithm.distance_to_time(distance)

op.jump(start_point, end_point, press_time)

技術分享圖片

微信跳一跳第二天