Python玩“跳一跳” iOS+Win 硬件实现(python跳一跳游戏代码)

网友投稿 708 2022-08-21

Python玩“跳一跳” iOS+Win 硬件实现(python跳一跳游戏代码)

Python玩“跳一跳” iOS+Win 硬件实现(python跳一跳游戏代码)

感谢来自 wangshub 的跳跃距离算法

原项目地址:wangshub/wechat_jump_game

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

本项目知乎专栏:python玩“跳一跳” iOS+Win版

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

运行环境&工具

Python 3.6 in Windows

Python Pillow库

局域网环境

iToools Airplayer

树莓派 或 arduino (本文使用树莓派)

SG90 舵机

杜邦线、纸板

一小块海绵

橙子或其它多汁水果(可选)

基本思路

使用iOS自带Airplay服务将游戏画面投影到电脑上

使用Pillow库截取电脑屏幕,获得游戏画面

分析图片,计算出跳跃距离,乘以时间系数获得按压时间

将按压时间发送至树莓派,树莓派控制舵机点击手机屏幕

原理 & 步骤

舵机 & 控制器 部分

1.树莓派(OS:Raspbian Jessie)连接上局域网,- servo_control.py到树莓派;

2.拿一根杜邦线粘在舵机的摆臂上,并且固定好舵机。如图:

4.海绵上滴水浸透,放在手机屏幕上“再来一次”的位置。杜邦线的另一头插进橙子(触发电容屏需要在屏幕上形成一个电场,我尝试过连接干电池负极的方案,但是效果不理想,最后不得已拿了室友的一个橙子。当然一直捏着或者含着导线也是可以的)。

5.舵机连接上树莓派,电源使用5v,舵机控制线接在GPIO18, 如图

6.需要根据实际安装位置调整舵机高点和低点位置servo_down = 3.8 servo_up = 5(范围: 2.5~12.5)

7.最终效果

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,但这个时候图片最左边的一列的像素是黑色的。

4.-wechat_jump_auto_iOS_Win.py,我的显示器分辨率是1920*1080,手机是iPhone 7。如果使用不同的设备需要更改时间系数等参数。

5.由于Airplay传输画面时会压缩,获取的游戏画面会有颜色偏差。我修改了原算法的一些参数,增大了一些颜色上的宽容度,在我的测试中达到一个比较好的准确率。

运行

打开游戏画面,Airplayer窗口全屏

树莓派上运行servo_control.py

Windows运行wechat_jump_auto_iOS_Win.py

存在问题

由于是物理点击屏幕,会产生一定的操作误差。操作误差由时间常数误差、舵机运动时间、杜邦线触点插进海绵的深度等等因素引起。而当前使用的算法在一种情况下会出现误差叠加的问题。

舵机的摆动角度和时间系数没有绝对的数值,需要慢慢尝试,当前使用的时间系数是2.43。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Android跨进程IPC通信AIDL(android跨线程通信方式)
下一篇:OAuth 2.0 理解(oauth token获取失败)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~