原項(xiàng)目地址:wangshub/wechat_jump_game
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信平臺(tái)小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了漠河免費(fèi)建站歡迎大家使用!
教你用Python來玩微信跳一跳
本項(xiàng)目源碼:yangyiLTS/wechat_jump_game_iOS
目前已有的iOS跳一跳輔助需要macOS環(huán)境下的WebDriverAgentRunner。而現(xiàn)在介紹的方法在Windows環(huán)境下物理實(shí)現(xiàn),不需要macOS也不需要越獄。
先上效果
運(yùn)行環(huán)境工具
Python 3.6 in Windows
Python Pillow庫
局域網(wǎng)環(huán)境
iToools Airplayer
樹莓派或arduino (本文使用樹莓派)
SG90 舵機(jī)
杜邦線、紙板
一小塊海綿
橙子或其它多汁水果(可選)
基本思路使用iOS自帶Airplay服務(wù)將游戲畫面投影到電腦上。使用Pillow庫截取電腦屏幕,獲得游戲畫面。分析圖片,計(jì)算出跳躍距離,乘以時(shí)間系數(shù)獲得按壓時(shí)間。將按壓時(shí)間發(fā)送至樹莓派,樹莓派控制舵機(jī)點(diǎn)擊手機(jī)屏幕。原理步驟
舵機(jī) 控制器部分
樹莓派(OS:Raspbian Jessie)連接上局域網(wǎng),下載servo_control.py到樹莓派。拿一根杜邦線粘在舵機(jī)的擺臂上,并且固定好舵機(jī)在紙板上,如圖:
取一小塊海綿,約10mm*10mm*5mm,不必太精確。海綿中間挖一個(gè)小洞。大概是這樣:
海綿上滴水浸透,放在手機(jī)屏幕上“再來一次”的位置。杜邦線的另一頭插進(jìn)橙子。(觸發(fā)電容屏需要在屏幕上形成一個(gè)電場(chǎng),我嘗試過連接干電池負(fù)極的方案,但是效果不理想,最后不得已拿了室友的一個(gè)橙子。當(dāng)然,一直捏著或者含著導(dǎo)線也是可以的。)
舵機(jī)連接上樹莓派,電源使用5v(Pin #04,Pin #06),舵機(jī)控制線接在GPIO18(Pin #12)。
需要根據(jù)實(shí)際安裝位置調(diào)整舵機(jī)高點(diǎn)和低點(diǎn)位置(范圍: 2.5~12.5)
servo_down = 3.8 servo_up = 5
最終效果
Windows 部分
下載Airplayer(免安裝,暫無捆綁)
配置Airplayer,畫質(zhì)什么的統(tǒng)統(tǒng)調(diào)到最高。啟動(dòng)iPhone上的Airplay,然后可以在電腦上看到iPhone畫面,游戲運(yùn)行時(shí)需要Airplayer全屏顯示。
安裝Pillow庫,本文使用Pillow庫的ImageGrab截屏,截屏代碼:
im = ImageGrab.grab((654, 0, 1264, 1080)) im.save('a.png', 'png')
下載wechat_jump_auto_iOS_Win.py,我的顯示器分辨率是1920*1080,手機(jī)是iPhone7。如果使用不同的設(shè)備需要更改時(shí)間系數(shù)等參數(shù)。
由于Airplay傳輸畫面時(shí)會(huì)壓縮,獲取的游戲畫面會(huì)有顏色偏差。我修改了原算法的一些參數(shù),增大了顏色上的寬容度,在測(cè)試中已經(jīng)達(dá)到一個(gè)比較好的準(zhǔn)確率。
wechat_jump_auto_iOS_Win.py 計(jì)算出跳躍距離后,會(huì)調(diào)用socket庫把跳躍時(shí)間發(fā)送到樹莓派上,其中ip地址需要修改為實(shí)際樹莓派的ip地址。
ip_addr = 'rasp_ip'
運(yùn)行打開游戲畫面,Airplayer窗口全屏樹莓派上運(yùn)行servo_control.py?,監(jiān)聽9999端口,等待Win的計(jì)算結(jié)果Windows運(yùn)行wechat_jump_auto_iOS_Win.py海綿放在“再來一次”的位置可以自動(dòng)重新開始,然后就會(huì)一直自動(dòng)刷分問題其它
由于是物理點(diǎn)擊屏幕,會(huì)產(chǎn)生一定的操作誤差。操作誤差由時(shí)間常數(shù)誤差、舵機(jī)運(yùn)動(dòng)時(shí)間、杜邦線觸點(diǎn)插進(jìn)海綿的深度等等因素引起。而當(dāng)前使用的算法在一種情況下會(huì)出現(xiàn)誤差疊加的問題。
Z形路徑誤差累積過程
舵機(jī)的擺動(dòng)角度和時(shí)間系數(shù)沒有絕對(duì)的數(shù)值,需要慢慢嘗試,當(dāng)前使用的時(shí)間系數(shù)是2.43。
可以使用arduino + pyfirmata組合控制舵機(jī),成本比較低,不需要網(wǎng)絡(luò)傳輸計(jì)算結(jié)果。因?yàn)槲业腶rduino前些天送給了女票,所以還沒有使用arduino的方案。
這個(gè)游戲在跳了200+次之后方塊會(huì)變的非常?。ㄈ珙}圖),已經(jīng)不是普通人類所能做到的。研究了外掛之后才知道手玩高分有多難,大家還是不要刷分了,會(huì)沒朋友的。
無敵代碼。
1、無敵代碼:Runner.instance_.gameOver=function(){}。
2、疾跑代碼(括號(hào)內(nèi)的參數(shù)可以修改):Runner.instance_.setSpeed(50)。
3、高跳代碼(括號(hào)內(nèi)的參數(shù)可以修改):Runner.instance_.tRex.setJumpVelocity(20)。
微信公司平臺(tái)帳號(hào)注冊(cè)后官方首頁很簡(jiǎn)單,沒有導(dǎo)航欄目頁面新建等功能。需要通過三方軟件與微信接口做二次開發(fā)。首先要在現(xiàn)在微信開個(gè)接口,這是要工商局認(rèn)證的。
最近一個(gè)項(xiàng)目用手機(jī)上的瀏覽器(不是微信瀏覽器)瀏覽html5網(wǎng)頁時(shí),看到有的網(wǎng)站點(diǎn)擊“微信支付”時(shí),直接打開了微信進(jìn)行支付(也就是在瀏覽器直接調(diào)用微信),這個(gè)是怎么做到的?
比如頁面上有個(gè)文字鏈接:微信支付,點(diǎn)擊之后就自動(dòng)調(diào)取微信APP了,而且我不是用微信瀏覽器打開的網(wǎng)頁。最新實(shí)用的微信H5手機(jī)網(wǎng)站支付源碼實(shí)例。
效果圖片如下:
完整代碼如下:即使在Safari中,也是可以點(diǎn)擊一個(gè)鏈接到達(dá)微信支付界面,只是用戶支付完了以后,目前還沒有方法再返回到Safari。?如果是自己開發(fā)的app,當(dāng)然更沒有任何問題了,可以實(shí)現(xiàn)和native?app一樣的效果。
源碼如下:
html
head
meta?http-equiv="content-type"?content="text/html;charset=utf8"/
meta?id="viewport"?name="viewport"?content="width=device-width;?initial-scale=1.0;?maximum-scale=1;?user-scalable=no;"?/
body,p,ul,li,h1,h2,form,input{margin:0;padding:0;}
h1,h2{font-size:100%;}
ul{list-style:none;}
body{-webkit-user-select:none;-webkit-text-size-adjust:none;font-family:Helvetica;background:#ECECEC;}
html,body{height:100%;}
a,button,input,img{-webkit-touch-callout:none;outline:none;}
a{text-decoration:none;}
.hide{display:none!important;}
.cf:after{content:".";display:block;height:0;clear:both;visibility:hidden;}
a[class*="btn"]{display:block;height:42px;line-height:42px;color:#FFFFFF;text-align:center;border-radius:5px;}
.btn-blue{background:#3D87C3;border:1px?solid?#1C5E93;}
.btn-green{background-image:-webkit-gradient(linear,?left?top,?left?bottom,?color-stop(0,?#43C750),?color-stop(1,?#31AB40));border:1px?solid?#2E993C;box-shadow:0?1px?0?0?#69D273?inset;}
.charge{font-family:Helvetica;padding-bottom:10px;-webkit-user-select:none;}
.charge?h1{height:44px;line-height:44px;color:#FFFFFF;background:#3D87C3;text-align:center;font-size:20px;-webkit-box-sizing:border-box;box-sizing:border-box;}
.charge?h2{font-size:14px;color:#777777;margin:5px?0;text-align:center;}
.charge?.content{padding:10px?12px;}
.charge?.select?li{position:relative;display:block;float:left;width:100%;margin-right:2%;height:150px;line-height:150px;text-align:center;border:1px?solid?#BBBBBB;color:#666666;font-size:16px;margin-bottom:5px;border-radius:3px;background-color:#FFFFFF;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;}
.charge?.price{border-bottom:1px?dashed?#C9C9C9;padding:10px?10px?15px;margin-bottom:20px;color:#666666;font-size:12px;}
.charge?.price?strong{font-weight:normal;color:#EE6209;font-size:26px;font-family:Helvetica;}
.charge?.showaddr{border:1px?dashed?#C9C9C9;padding:10px?10px?15px;margin-bottom:20px;color:#666666;font-size:12px;text-align:center;}
.charge?.showaddr?strong{font-weight:normal;color:#9900FF;font-size:26px;font-family:Helvetica;}