微信跳一跳次日

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

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

1 獲取小人的全部像素點中y座標的最大值shell

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

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

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

 

 

2. 尋找目標座標

獲取目標座標的y值

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

 

 

咱們會發現,目標格子的邊沿(x=563,y=978)和這個是差很少的(y的誤差是18,x的誤差是23.blog

之後每次跳動的時候,假如已經知道目標格子的邊沿,和目標座標的x值,就能夠很輕鬆計算出目標座標的y值。ip

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

左:(563,847)input

右:(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)

 

 

 

 

 

 

 

 

 

 

相關文章
相關標籤/搜索