范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

用Python玩微信跳一跳

  使用指南
  测试PC安装ADB调试工具,用于和Android设备交互,主要完成截图,截图下载,进行按压屏幕模拟。
  下载后放到合适的位置解压,不要安装。在Win10中,系统目录和之前有所不同,所以旧的安装方法是无效的。
  Android设备通过USB连接到测试PC,Android 设备开启调试模式,需要保证ADB能正常和Android连接。
  在命令行中进入解压后的目录,输入Adb devices如果看到CMD显示一串字符,后面还有一个"device"的字样,那就说明安卓机已经成功以USB调试的形式连接到了Win10中。
  Android 进入微信跳一跳小程序开始游戏。
  在PC上运行脚本程序,脚本程序正常运行,输入y,开始自动游戏。
  主要代码 def   _get_screen_size  ()  :
  """
  获取手机屏幕分辨率
  :return:
  """
  size_str = os.popen("adb shell wm size"  ).read()
  print(size_str)
  if   not   size_str:
  print("请安装 ADB 及驱动并配置环境变量"  )
  sys.exit()
  m = re.search(r"(d+)x(d+)"  , size_str)
  if   m:
  return   "{height}x{width}"  .format(height=m.group(2  ), width=m.group(1  ))
  def   init  ()  :
  """
  初始化
  :return:
  """
  # 获取屏幕分辨率
  screen_size = _get_screen_size()
  config_file_path = "config/{0}/config.json"  .format(screen_size)
  print(config_file_path)
  if   os.path.exists(config_file_path):
  with   open(config_file_path, "r"  ) as   f:
  print("Load config file from {}"  .format(config_file_path))
  return   json.load(f)
  else  :
  with   open("config/default.json"  , "r"  ) as   f:
  print("Load default config"  )
  return   json.load(f)
  def   get_screenshot  ()  :
  global   SCREENSHOT_WAY
  if   SCREENSHOT_WAY == 2   or   SCREENSHOT_WAY == 1  :
  process = subprocess.Popen("adb shell screencap -p"  , shell=True  , stdout=subprocess.PIPE)
  screenshot = process.stdout.read()
  if   SCREENSHOT_WAY == 2  :
  binary_screenshot = screenshot.replace(b"r "  , b" "  )
  else  :
  binary_screenshot = screenshot.replace(b"rr "  , b" "  )
  with   open("autojump.png"  , "wb"  ) as   f:
  f.write(binary_screenshot)
  elif   SCREENSHOT_WAY == 0  :
  os.system("adb shell s creencap -p /sdcard/autojump.png"  )
  os.system("adb pull /sdcard/autojump.png ."  )
  def   check_screenshot  ()  :
  global   SCREENSHOT_WAY
  if   os.path.isfile("autojump.png"  ):
  os.remove("autojump.png"  )
  if   SCREENSHOT_WAY < 0  :
  print("暂不支持当前设备"  )
  sys.exit()
  get_screenshot()
  try  :
  Image.open("autojump.png"  ).load()
  except   Exception as   e:
  print(e)
  SCREENSHOT_WAY -= 1
  check_screenshot()
  def   find_piece_and_board  (img, con)  :
  w, h = img.size
  # 棋子的底边界
  piece_y_max = 0
  scan_x_side = int(w / 8  ) # 扫描棋子的左右边界减少开销
  scan_start_y = 0   # 扫描起始y坐标
  # 图片像素矩阵
  img_pixel = img.load()
  if   not   LOOP: # 是否循环游戏
  if   sum(img_pixel[5  , 5  ][:-1  ]) < 150  : # 根据屏幕黑色
  exit("游戏结束!"  )
  # 以50px 步长,尝试探测 scan_start_y
  for   i in   range(int(h / 3  ), int(h * 2   / 3  ), 50  ):
  first_pixel = img_pixel[0  , i]
  for   j in   range(1  , w):
  # 如果不是纯色,说明碰到了新的棋盘,跳出
  pixel = img_pixel[j, i]
  if   pixel[0  ] != first_pixel[0  ] or   pixel[1  ] != first_pixel[1  ] or   pixel[2  ] != first_pixel[2  ]:
  scan_start_y = i - 50
  break
  if   scan_start_y:
  break
  # 从上往下开始扫描棋子,棋子位于屏幕上半部分
  left = 0
  right = 0
  for   i in   range(scan_start_y, int(h * 2   / 3  )):
  flag = True
  for   j in   range(scan_x_side, w - scan_x_side):
  pixel = img_pixel[j, i]
  # 根据棋子的最低行的颜色判断,找最后一行那些点的平均值
  if   (50   < pixel[0  ] < 60  ) and   (53   < pixel[1  ] < 63  ) and   (95   < pixel[2  ] < 110  ):
  if   flag:
  left = j
  flag = False
  right = j
  piece_y_max = max(i, piece_y_max)
  if   not   all((left, right)):
  return   0  , 0  , 0  , 0
  piece_x = (left + right) // 2
  piece_y = piece_y_max - con["piece_base_height_1_2"  ] # 上调高度,根据分辨率自行 调节
  # 限制棋盘扫描横坐标
  if   piece_x < w / 2  : # 棋子在左边
  board_x_start = piece_x + con["piece_body_width"  ]//2
  board_x_end = w
  else  :
  board_x_start = 0
  board_x_end = piece_x - con["piece_body_width"  ]//2
  # 从上往下扫描找到棋盘的顶点
  left = 0
  right = 0
  num = 0
  for   i in   range(int(h / 3  ), int(h * 2   / 3  )):
  flag = True
  first_pixel = img_pixel[0  , i]
  for   j in   range(board_x_start, board_x_end):
  pixel = img_pixel[j, i]
  # 20是色差阈值可以调节
  if   abs(pixel[0  ] - first_pixel[0  ]) + abs(pixel[1  ] - first_pixel[1  ]) + abs(pixel[2  ] - first_pixel[2  ]) > 10  :
  if   flag:
  left = j
  right = j
  flag = False
  else  :
  right = j
  num += 1
  # print(left, right)
  if   not   flag:
  break
  board_x = (left + right) // 2
  top_point = img_pixel[board_x, i+1  ] # i+1去掉上面一条白线的bug
  # 从上顶点往下 + con["hight"] 的位置开始向上找颜色与上顶点一样的点,为下顶点
  # if num < 5:
  # # 说明是方形
  # if abs(top_point[0] - 255) + abs(top_point[1] - 228) + abs(top_point[2] - 226) < 5:
  # print("唱片图案")
  # top = 0
  # bottom = 0
  # for k in range(i, i + con["hight"]):
  # pixel = img_pixel[board_x, k]
  # # 根据唱片中的红色部分判断
  # # if (155 < pixel[0] < 180) and (141 < pixel[1] < 165) and (113 < pixel[2] < 116):
  # # print(pixel[0], pixel[1], pixel[2])
  # if (abs(pixel[0] - 239) < 3) and (abs(pixel[1] - 118) < 3) and (abs(pixel[2] - 119) < 3):
  #
  # if not top:
  # top = k
  # else:
  # bottom = k
  # # print(top, bottom)
  # board_y = (top + bottom) // 2
  # return piece_x, piece_y, board_x, board_y
  # 这种方法对所有纯色平面和部分非纯色平面有效
  # print(top_point)
  for   k in   range(i + con["hight"  ], i, -1  ):
  pixel = img_pixel[board_x, k]
  # print(pixel)
  if   abs(pixel[0  ] - top_point[0  ]) + abs(pixel[1  ] - top_point[1  ]) + abs(pixel[2  ] - top_point[2  ]) < 10  :
  break
  board_y = (i + k) // 2
  if   num < 5  :
  # 去除有些颜色比较多的误差
  if   k - i < 30  :
  print("酱红色433----》》》"  )
  board_y += (k - i)
  # 去掉药瓶
  if   top_point[:-1  ] == (255  , 255  , 255  ):
  print("药瓶图案"  )
  board_y = (i + board_y) // 2
  # 去掉唱片
  if   num == 3  :
  if   top_point[:-1  ] == (219  , 221  , 229  ):
  print("唱片"  )
  top = 0
  bottom = 0
  for   k in   range(i, i + con["hight"  ]):
  pixel = img_pixel[board_x, k]
  # 根据唱片中的红色部分判断
  # if (155 < pixel[0] < 180) and (141 < pixel[1] < 165) and (113 < pixel[2] < 116):
  # print(pixel[0], pixel[1], pixel[2])
  if   pixel[:-1  ] == (118  , 118  , 118  ):
  if   not   top:
  top = k
  else  :
  bottom = k
  # print(top, bottom)
  board_y = (top + bottom) // 2
  return   piece_x, piece_y, board_x, board_y
  if   not   all((board_x, board_y)):
  return   0  , 0  , 0  , 0
  return   piece_x, piece_y, board_x, board_y
  def   jump  (distance, point, ratio)  :
  press_time = distance * ratio
  press_time = max(press_time, 200  ) # 最小按压时间
  press_time = int(press_time)
  cmd = "adb shell input swipe {x1} {y1} {x2} {y2} {duration}"  .format(
  x1=point[0  ],
  y1=point[1  ],
  x2=point[0  ] + random.randint(0  , 3  ),
  y2=point[1  ] + random.randint(0  , 3  ),
  duration=press_time
  )
  print(cmd)
  os.system(cmd)
  return   press_time
  def   run  ()  :
  oper = input("请确保手机打开了 ADB 并连接了电脑,然后打开跳一跳并【开始游戏】后再用本程序,确定开始?y/n>>:"  )
  if   oper != "y"  :
  exit("退出"  )
  # 初始化,获取配置
  config = init()
  # 检测截图方式
  check_screenshot()
  while   True  :
  # 获取截图
  get_screenshot()
  # 获取棋子,棋盘位置
  img = Image.open("autojump.png"  )
  piece_x, piece_y, board_x, board_y = find_piece_and_board(img, config)
  ntime = time.time()
  print(piece_x, piece_y, board_x, board_y, "------->"  )
  distance = math.sqrt((board_x - piece_x) ** 2   + (board_y - piece_y) ** 2  )
  # 生成一个随机按压点,防止被ban
  press_point = (random.randint(*config["swipe"  ]["x"  ]),
  random.randint(*config["swipe"  ]["y"  ]))
  jump(distance, press_point, config["press_ratio"  ])
  if   DEBUG:
  debug.save_debug_screenshot(ntime, img, piece_x, piece_y, board_x, board_y)
  debug.backup_screenshot(ntime)
  time.sleep(random.randrange(1  , 2  ))
  def   test_scrennshot  ()  :
  img = Image.open("autojump.png"  )
  con = init()
  res = find_piece_and_board(img, con)
  print(res)
  # def test_time_ratio():
  # config = init()
  #
  #
  # get_screenshot()
  # img = Image.open("autojump.png")
  # piece_x, piece_y, board_x, board_y = find_piece_and_board(img)
  # print(piece_x, piece_y)
  # point = (random.randint(*config["swipe"]["x"]),
  # random.randint(*config["swipe"]["y"]))
  # t = 600
  #
  # cmd = "adb shell input swipe {x1} {y1} {x2} {y2} {duration}".format(
  # x1=point[0],
  # y1=point[1],
  # x2=point[0] + random.randint(0, 3),
  # y2=point[1] + random.randint(0, 3),
  # duration=t
  # )
  # print(cmd)
  # os.system(cmd)
  # time.sleep(2)
  # get_screenshot()
  # img = Image.open("autojump.png")
  # piece_2x, piece_2y, board_2x, board_2y = find_piece_and_board(img)
  #
  # print(piece_2x, piece_2y)
  # print(t/math.sqrt((piece_x-piece_2x)**2+(piece_y-piece_2y)**2))
  if   __name__ == "__main__"  :
  run()
  # test_time_ratio()
  # test_scrennshot()
  # get_screenshot()

爆冷出局!伊藤美诚又哭了!她想要1打5中国女乒队并夺冠成笑话爆出大冷门!出局!伊藤美诚又哭了!她想要1打5中国女子乒乓球队并夺冠成了笑话!世界排名第三却惨遭排名第67的华裔选手逆转!无缘八强!北京时间三月十六日,WTT新加坡乒乓球冠军赛,女微软突破技术限制,实现拓扑量子位元微软AzureQuantum计划取得重大进展,该公司展示了拓扑量子位元(TopologicalQubits)构建模块,这项技术是目前最有望,能构建出真正具有量子优势的量子计算机。A冯巩加入冯巩大战男足爱吃海参,浑身是刺,其实挺软的澎湃新闻记者祁东近期,巩汉林和国足前队长冯潇霆的冯巩大战引发网友关注,而在16日中午,一则冯巩本人近期的短视频被网友扒出。据悉,这则视频拍摄于2月底,这也被网友戏称为冯巩本人提前参平流层通信载荷分析之谷歌Loon项目人类从1957年发射第一颗人造卫星开始探索太空,已经取得了丰硕的成果,在太空边缘,地球表面之上,有一个尚未开发潜力巨大的地方平流层。平流层的1824km高度处,存在一个基本无垂直对祝贺辽篮,周琦续约3点原因不得不回国打CBA,李洪庆或成赢家北京时间3月16日,昨天CBA第三阶段比赛辽宁队对战四川队当中,辽宁队以12185击败四川队,同时在单节比赛当中轰下50分的爆裂表现,辽宁队的这场比赛也展现了这个赛季排名第一球队的宜居行星的发现让逐梦太空不只是梦逐梦太空撰文亭川支持NASA20世纪60年代,一位名叫张福林(FranklinChangDiaz)的哥斯达黎加少年被苏联成功发射人类第一颗人造卫星伴侣号(Sputnik)的消息深深冯巩总结男足一句话上热搜第一,球迷惹讲小品的干什么?中国足坛近日与小品界出现了隔空对话,冯潇霆与巩汉林的冯巩之争引发了热议。近日,冯巩的一则小品段子突然在网络上流行,内容谈到了中国男足,直接让冯巩冲上了热搜榜第一名,也是令不少冯巩的一颗体型为英国大本钟5倍的岩石与地球擦肩而过据英国每日星报近日报道,一颗体型为英国大本钟5倍的小行星正在加速接近地球轨道,并将从地球经过。这颗名为2015DR215的岩石,于2015年2月18日首次被科学家们发现,美国宇航局蜜月期结束?!恩比德发声暗指哈登不如西蒙斯本赛季交易截止日即将到来前,费城76人和布鲁克林篮网完成了一笔地震级的压哨交易,76人送出了本西蒙斯小库里安德烈德拉蒙德以及未来两个首轮选秀权从篮网那里得到了詹姆斯哈登和保罗米尔萨都是09进NBA,库里601次,509次,4049次,30213次,那哈登呢库里和哈登都是09年进入NBA的,在得分效率地方可以说是现役顶级的,库里职业生涯得到60一共1次,50一共9次,40一共49次,30一共213次,哈登表现可以说比库里还牛,哈登60太空出差三人组下一站,地球家园站中数昼夜地上方一天转眼间航天员翟志刚王亚平叶光富已在中国宫度过了150天在那里他们的身体失重心却从未失重时时刻刻被地球吸引着4月中旬太空出差三人组将踏上归途回到地球家园这150天
新游预告12月第一周21款手游开测,二次元的春天周一红姐的新游预告,准时到达!12月第一周,有超过21款手游开测,一起来看看吧!梦入云山游戏开发商益世界上线时间11月28日小规模删档内测游戏关键词角色扮演开放世界修仙游戏简介国风妊娠期高血压小知识一妊娠期血压的生理变化特征血压在妊娠期有特殊的变化规律,了解和掌握这些变化规律对于判断妊娠期血压是否异常,以及管理血压至关重要。以妊娠20周为分界点,正常孕妇妊娠期的血压呈现先降后去海南过冬详,用纬度温度湿度风度说明哪里适合您海南省共有19个县市,其中有4个地级市海口市三亚市儋州市三沙市5个县级市文昌市琼海市万宁市五指山市东方市10个县,其中4个县澄迈县临高县屯昌县定安县,6个自治县昌江黎族自治县白沙黎卡塔尔世界杯是一场气候灾难当世界足球管理机构国际足球联合会(FIFA)宣布2022年卡塔尔世界杯将是一场完全碳中和的赛事时,环保主义者发出的集体欢声笑语本可以为风电场提供动力。非营利环保组织碳市场观察(Ca地球的南极和北极各是一个怎样的世界呢?地球的南极和北极,在很多人看来,也许除了一个在地球南端,一个在地球北端之外,它们大同小异,都是气候寒冷冰天雪地,但实际上,它们有着天壤之别。1一个是陆地,一个是海洋南极是被海洋环绕冬天中老年人怎么吃水果?这些水果煮熟,比生吃更养人水果中含有各种人体所需维生素矿物质等营养元素,是人体中不可或缺的。但是很多中老年朋友都面临一个问题吃了凉水果就容易胃痛腹泻,特别是冬天天冷之后,更不敢吃了。这个问题其实也好解决,咱银屑病治疗不及时,肝肾可要受罪了银屑病加重肝肾受累,往往在银屑病患者检测结果中,肝肾功能指标并不理想。有一部分患者就是因为本身的肝肾功能异常,导致病情一再反复加重。肝肾功能受损不仅是银屑病发生发展的诱因,银屑病有人的衰老都有哪些表现?1。当你变老时,你的皮肤会变薄,弹性更小,会更容易出现瘀痕。2。皮肤油产量减少,让你的皮肤变得更加干燥。3。皱纹开始形成,特别是在脸上和手臂上。4。皮肤上有更多的老年斑。5。你的头盘点四川小金县5个旅游主要景点头条创作挑战赛小金,藏名攒拉,为小河之滨或凶神之意,清代称其地为小金川,因沿河地带产沙金得名。小金县隶属于四川省阿坝藏族羌族自治州,位于四川省西北部,阿坝藏族羌族自治州南端,东邻汶科普如何快速入睡?背景随着时代的变迁,科技的进步,人们在晚上的活动时间也变得越来越长,随着睡不着的现象,也就是失眠也越来越常见,日积月累的失眠,也会导致我们产生的焦虑。正文随着时代的变迁,科技的进步学刮痧治疗现代文明病颈椎病颈椎病虽不是致命的险症,却是非常恼人的顽疾。多见于中老年人,但是现在有年轻化的趋势,长期低头伏案工作的人易患此病。颈椎病高居现代文明病排行榜的榜首。无论在电脑前办公桌旁驾驶室内,到