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

用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()

2020智慧屏白皮书发布华为联合多方开启中国电视产业3。0时代7月24日,2020智慧屏白皮书发布会在京召开,由中国电子技术标准化研究院(电子四院)华为长虹美的京东方等机构和企业共同组成的智慧屏白皮书工作组,于会上发布了2020智慧屏白皮书。华为麦芒9高清图赏,高清大屏高颜值,是不是你的菜?继华为P系列nova系列新品陆续发布之后,近日,作为华为和中国电信的合作品牌,麦芒也迎来了升级,全新麦芒9正式发布。超大高清屏幕,6400万像素高清摄影,超大电池,标配大内存之外,高端制造者?小米电视大师系列为何紧随华为站队OLED阵营说到小米电视,大家首先想到的便是极致性价比,为发烧而生!不过7月2日,在小米品牌整体上探的大策略下,小米电视也开始冲击高端市场,正式推出了旗下首款高端电视小米电视大师系列65英寸O中国云计算市场头部阵营再变阵,华为云超越腾讯百度跃居第二近日,英国调研机构Canalys发布的2020年第一季度中国公共云服务市场报告显示,华为云排名位居中国云计算市场第二,市场份额(IaaSPaaS)扩大至14。1,超越了腾讯云AWS华为畅享20Pro发布,不到2000元的华为5G手机香不香?2020年6月19日,华为畅享20Pro正式发布。其配备6。5英寸90Hz高刷新率,180Hz触控采样率,对于游戏玩家来说很香分屏多任务处理,209比例,91。2屏占比则让娱乐办公深挖华为MateBookX,这样的第三代移动办公你喜欢吗?随着互联网的高速发展,以及社会节奏的日益加快,移动办公已经成为了很多人的主流工作形态,于此同时,人们对于移动办公工具的需求也越来越高。8月19日,为满足第三代移动办公需求而生的华为感受手机摄影魅力,华为P40系列超感知影像影像展开幕8月16日,华为P40系列超感知影像艺术共创影像展在北京今日美术馆盛大启幕,著名时尚策划人史焱知名摄影师黎晓亮及三纯,以及多位明星艺人等亲临现场,共同开启一场时尚与艺术盛宴。通过极华为MatePad10。8高清图赏,华为给大学生的一份特别礼物工作学习和生活均进入更高效的移动时代,全场景互联也成为时代趋势。借助一台科技装备提高自己学习工作的效率,成为很多大学生以及职场人士选择。面对大家的这一需求,华为近日推出了一款全新的细品华为FreeBudsPro无线耳机智慧动态降噪到底多强在智能手机高速发展的同时,耳机行业也迎来了一场变革,凭借着摆脱线缆束缚带来的自由体验,TWS耳机逐步取代有线耳机占据主力市场,而经过两年的发展,TWS耳机在提升佩戴舒适度音质连接和潮玩设计5G闪充手机realme真我V5正式发布,1399元起可是你的菜?2020年8月3日中国深圳全球成长最快智能手机品牌realme真我于今日召开3分钟闪充奥利给潮玩线上新品发布会,正式带来旗下V系列首款产品闪充奥利给真我V5。作为新一代5G闪充手机华为畅享20Plus图赏,天圆地方设计,更有满满亮点近几年,虽然国产手机品牌推出了不少叫好又叫卖的机型,但是说到有自己设计语言,外观极具辨识度的,或许只有华为Mate系列。尤其近两年,无论是华为Mate20的四眼车灯式摄像头设计,还
HarmonyOS(鸿蒙系统)加持下荣耀(Play4)又推送更新上线OS随着华为国产系统(鸿蒙OS)的研发成功推送上线,华为的国产OS分布式操作系统,真正的实现了万物互联的应用场景。笔者自从用华为品牌的手机以来,华为上线推送(鸿蒙OS)后,就更新了这款马上三月份,即将发布的几款手机,华为荣耀苹果均有新品2月份的发布会热潮结束了,什么红米K50电竞版oppofindX5等等,但是上半年的新机还没有结束,接下来还有更令人激动的华为荣耀苹果等发布会,我们一起来看看都有哪些手机吧。第一款华为隐藏大招!全新麒麟5G芯片出现,两款两千档廉价新机齐发虽然遭到了史无前例的打压导致华为不保昔日的国产手机一哥地位,但很明显华为并不想在今年碌碌无为,还是希望能够继续维持运转,坚持到拨开云雾见青天的那一天。这段时间国产厂商纷纷发布新机,教你19种关闭小米手机广告方法本内容来源于什么值得买APP,观点仅代表作者本人作者薄荷有点凉其实哪个安卓手机品牌多少都有广告投放,只是形式不同而已,关键是如何关掉广告。由于这两年一直用小米手机,手机安装好需要的8个压箱底的宝藏App,实用又强大,手机秒变黑科技突然想问大家一个问题,你们的手机上都有哪些好用的App?今天我就来推荐8个压箱底的宝藏App,实用又强大,让你的手机秒变黑科技。01秒启动特色1秒启动手机应用。现在的很多App启动vivox20手机可以用几年?如果是从寿命上来讲,应该是属于因人而异的事情,都能看到不少爱护的好的人的手机,用个四五年的都大有人在,还有些爱护不好的,基本上几个月就歇菜,当然,这也取决于手机厂商的用料质量问题,在美国硅谷工作的码农,有什么工作上的烦恼?估计大家都认为在硅谷做软件工程师是非常幸福的事情,拿着令人艳羡的高薪享受着各种各样的免费福利,不过这些福利的背后要付出的努力却是大家不知道的。那些令人艳羡的高薪和福利作为世界科技之面对智能手表的独立化课题,手机厂商走出了四种路线新年伊始,苹果放出了一则广告片。公路海洋农场,镜头从高空俯视,缓慢推进,并依次切换。广袤而平坦的地面,被渲染了一层阴暗的色调,一直延伸到天际。广告片时长一分钟,但直到结束,画面中都百度屏蔽了中国裁判文书网,这事没那么简单近日,在百度身上发生了一件匪夷所思的事儿。2月21日上午,有人在百度搜索中国裁判文书网相关词条,搜索结果显示,没有找到与中国裁判文书网相关的网页,而搜狗必应等搜索引擎均可正常搜索。聊两个最具潜力的板块昨天聊了三个大家关心的板块,今天说说当下最具投资潜力的板块!我说的机会是什么机会呢?是那种足以实现财富自由,实现你下一代财富,人生自由的板块!1,芯片半导体!不论电动汽车,光伏新能AirPods怎么选?入手前这些细节须知悉可以看到,去牛秋季不仅全新发布了AirPods3,苹果还悄悄的将AirPodsPro的充电盒更新为了MagSafe充电盒,支持磁吸充电。这样对比三款耳机的区别,你就会发现相比前代,