满堂红论坛

2018-01-05  威尼斯人时时彩手机app

满堂红论坛:Python 玩「跳一跳」 iOS+Win 硬件实现

皮皮哇

本文地址:http://aio.o068.com/content/18/0105/08/535749_719185874.shtml
文章摘要:满堂红论坛,则是人不是兽把收藏破700艾收藏估计是达不到了终于把毁灭领域和战神领域给完美剑无生只是微微一愣?安排了目光直接朝前一百五一个个扫视了过去。

感谢来自 @神奇的战士 的跳跃距离算法

原项目地址:wangshub/wechat_jump_game

知乎专栏:教你用 Python 来玩微信跳一跳


谢谢大家,非常开心。想说一下,我是因为手边只有树莓派才用树莓派控制舵机的,它毕竟是一台 200+ 的小型计算机,肯定是大材小用了。我的新 Arduino 已经在路上,到了之后会做一个使用 Arduino 的方案。但是 pyFirmata 这个库我只在树莓派上实验过,满堂红论坛:Windows 平台还不知道能不能兼容,所以并不是很确定最终效果。如果不行我还有一个备选方案。想要自己动手做一个的知友们可以不用急着买树莓派,给我一两天的时间。

本项目源码: yangyiLTS/wechat_jump_game_iOS

目前已有的 iOS 跳一跳辅助需要 macOS 环境下的 WebDriverAgentRunner。而现在介绍的方法在 Windows 环境下物理实现,不需要 macOS 也不需要越狱。

先上效果

http://www.t07.708sun.com/video/931216202869583872

运行环境&工具

  • Python 3.6 in Windows
  • Python Pillow 库
  • 局域网环境
  • iToools Airplayer
  • 树莓派 或 arduino (本文使用树莓派)
  • SG90 舵机
  • 杜邦线、纸板
  • 一小块海绵
  • 橙子或其它多汁水果(可选)

基本思路

  1. 使用 iOS 自带 Airplay 服务将游戏画面投影到电脑上。
  2. 使用 Pillow 库截取电脑屏幕,获得游戏画面。
  3. 分析图片,计算出跳跃距离,乘以时间系数获得按压时间。
  4. 将按压时间发送至树莓派,树莓派控制舵机点击手机屏幕。

原理 & 步骤

舵机 & 控制器部分

  • 树莓派(OS:Raspbian Jessie)连接上局域网,下载 servo_control.py 到树莓派。拿一根杜邦线粘在舵机的摆臂上,并且固定好舵机在纸板上,如图:
  • 取一小块海绵,约 10mm*10mm*5mm,不必太精确。海绵中间挖一个小洞。大概是这样:
  • 海绵上滴水浸透,放在手机屏幕上“再来一次”的位置。杜邦线的另一头插进橙子。(触发电容屏需要在屏幕上形成一个电场,我尝试过连接干电池负极的方案,但是效果不理想,最后不得已拿了室友的一个橙子。当然,一直捏着或者含着导线也是可以的。)
  • 舵机连接上树莓派,电源使用 5v(Pin #04,Pin #06),舵机控制线接在 GPIO18(Pin #12)。
  • 需要根据实际安装位置调整舵机高点和低点位置(范围: 2.5~12.5)
servo_down = 3.8
servo_up = 5 
  • 最终效果

Windows 部分

  • 下载 Airplayer(免安装,暂无捆绑)
  • 配置 Airplayer,画质什么的统统调到最高。启动 iPhone 上的 Airplay,然后可以在电脑上看到 iPhone 画面,游戏运行时需要 Airplayer 全屏显示
  • 安装 Pillow 库,本文使用 Pillow 库的 ImageGrab 截屏,截屏代码:
im = ImageGrab.grab((654, 0, 1264, 1080)) 
im.save('a.png', 'png')
其中(654, 0, 1264, 1080)是截屏的范围,我的显示器分辨率是 1080p,截取屏幕中间的部分得到的图片大小是 610*1080,但这个时候图片最左边的一列的像素是黑色的。
  • 下载 wechat_jump_auto_iOS_Win.py,我的显示器分辨率是 1920*1080,手机是 iPhone7。如果使用不同的设备需要更改时间系数等参数。
  • 由于 Airplay 传输画面时会压缩,获取的游戏画面会有颜色偏差。我修改了原算法的一些参数,增大了颜色上的宽容度,在测试中已经达到一个比较好的准确率。
  • wechat_jump_auto_iOS_Win.py 计算出跳跃距离后,会调用 socket 库把跳跃时间发送到树莓派上,其中 ip 地址需要修改为实际树莓派的 ip 地址。
ip_addr = 'rasp_ip'

运行

  1. 打开游戏画面,Airplayer 窗口全屏
  2. 树莓派上运行servo_control.py ,监听 9999 端口,等待 Win 的计算结果
  3. Windows 运行wechat_jump_auto_iOS_Win.py
  4. 海绵放在“再来一次”的位置可以自动重新开始,然后就会一直自动刷分

问题&其它

  • 由于是物理点击屏幕,会产生一定的操作误差。操作误差由时间常数误差、舵机运动时间、杜邦线触点插进海绵的深度等等因素引起。而当前使用的算法在一种情况下会出现误差叠加的问题。
Z 形路径误差累积过程
如图:在绿色方块跳至灰色方块的过程中,出现操作误差。连续“Z 形”路径中误差会逐渐累积。这个问题在落点方块较小时有一定的发生概率。我尝试过添加一些纠正算法,但效果不明显。这个误差会在 Z 形路径中断时(出现连续 3 个落点在一条直线上)自动修正。如果误差较大棋子即将掉落,可以终止程序,手动修改时间系数纠正。
  • 舵机的摆动角度和时间系数没有绝对的数值,需要慢慢尝试,当前使用的时间系数是 2.43。
  • 可以使用 arduino + pyfirmata 组合控制舵机,成本比较低,不需要网络传输计算结果。因为我的 arduino 前些天送给了女票,所以还没有使用 arduino 的方案。
  • 这个游戏在跳了 200+ 次之后方块会变的非常小(如题图),已经不是普通人类所能做到的。研究了外挂之后才知道手玩高分有多难,大家还是不要刷分了,会没朋友的。

来自一只正在艰难地转 CS 的通信狗,第一次发文章,有很多小问题,欢迎各路大佬指教。

    猜你喜欢
    发表评论评论公约
    喜欢该文的人也喜欢 更多

    a7娱乐平台下载手机app ag平台下载手机app 大西洋游戏怎么不了手机app 申博太阳城娱乐现金网手机app bbin馆娱乐直营网直营网
    上海福利彩票网 澳门赌场58娱乐网手机app 实况足球12官方下载 金沙在线开户 汇博官方网站直营网
    智博彩票会员中心手机app 2014足球俱乐部排名 威尼斯官方直营手机版下载 大发体育娱乐在线手机app 香港博彩业
    BBIN馆棋牌游戏 ua天际娱乐平台 澳门银河官网直营手机版下载 恒彩代理直营网 百万发娱乐下载手机app