最近我相信很多人都在玩微信的跳一跳小遊戲,前面幾天,很多人在朋友圈曬「跳一跳」人工智慧開掛教程:如何讓電腦自己玩微信跳一跳。
很多朋友表示不太懂這是什麼。
首先,這不是一個「破解插件」安裝教程,而是一個「破解軟體」製作教程,要靠自己用代碼一點點寫出來,你需要有一定的編程基礎,這裡用的是 Python 語言,所以一定的 Python 語法基礎是必備的。
其次,你需要一部Android 手機,iPhone 手機是無法實現的。
對於掌握了基本 Python 語法但有些迷茫不知道該怎麼用的同學,這個小項目會很適合你,能夠幫你找回對 Python 的熱愛!
整個教程的框架是這樣子:
這裡先簡單講下解決問題的思路。因為整個遊戲的背景是純色的,分數和退出的位置是固定的,只有到了小人兒和起跳位置才出現了顏色的分隔,那麼代碼只需要判斷檢測到哪一行的顏色不一樣,那就說明 get 到了目標位置。
簡單來說,只要找到顏色出現區隔的地方,就可以得到了跳躍平面的頂點式,但是如何確定可以安全跳躍的目標點呢?
通過觀察發現,遊戲中需要跳躍的平面不是長方形就是圓形或者菱形,形狀都是對稱的。所以一旦找到頂點,不需要更改 x 軸,只需要順著頂點往下面探索即可。
當然這裡有一個難點就是跳躍點的上頂點和下頂點的背景顏色看似一樣但不完全一樣,略微有些漸變,所以在工程實現的時候需要注意這一點。
總結下,確定目標位置的整個思路就是先找到跳躍平面的頂點,再找到終點,把這兩個點連成一條線,然後取1/2或者1/3的地方,就是安全的落腳目標點。
但僅僅知道目標位置的點是不夠的,我們還需要知道小人兒所在的地方。確定這個是比較難的。因為它的頭部會落在純色背景色上面,就像上圖所示,但是腳部卻會出現在跳躍平面上的任意一點,而跳躍平面的顏色又總是在變化。
不過還好,小人兒本身的顏色是不會變的。我們只需要取出類似上圖小人一個點的顏色,然後遍歷整個圖像上每一個點,找出哪個點的顏色值和之前所取的顏色值最相近,那個點就是小人兒所在位置。
到目前為止,我們已經確定了起跳點和落腳點,接下來要做的就是計算兩點之間的距離。
這裡只需要用到初中幾何知識:勾股定理。通過兩點的坐標,得出直角三角形底邊和高,然後算出斜邊的長度,就是兩點間的距離。
最後,我們根據距離計算出需要多少秒跳過去,然後模擬出點擊,就可以實現整個自動跳的過程。
以上就是跳一跳實現自動跳的基本原理和思路。具體要怎麼通過代碼實現、中間需要注意的小細節以及如果出現錯誤應該如何去處理。
以上大概的教程已經分析出整體的思路,有想法的朋友可以試著做一下。
在前面的文章中,我給大家分享了Python的類和正則式的表達,後面4期文章,我給大家講下Python裡的異常處理。
要想寫出穩定健壯的程序,必須要學會異常處理來保護程序,儘量讓程序不要crash,Python的異常處理到底長啥樣呢,有哪些是初學者特別容易犯的錯呢,不要急,我都給你總結好了~~
要點:
異常實例:
1基本的語法介紹
Python中有一套異常處理機制,來幫助我們進行錯誤處理,語法也比較簡單:
1)try-except語句:
try:
do something
except Exception, e:
handle error
else:
pass
try 語句是用來捕獲異常
except語句是用來處理不同的異常,Exception是異常的種類,分很多種,不清楚的可以看看上一篇裡面例舉的9種.
e表示異常的信息
else 表示若沒有發生異常,當try執行完畢之後,就會執行else
2)try-except-finally語句:
try:
do something
except Exception:
handle error
finally:
do finally
若try語句是用來捕獲異常,若沒有發生錯誤,執行try代碼之後,直接執行finally
若try語句捕獲到異常,首先執行except部分處理錯誤,然後才是執行finally
其實finally語句是表示無論是否檢測到異常,都會執行finally代碼,因此一般我們都會把一些清理的工作,比如關閉文件或者釋放資源,放在finally裡面.
2猜數字的遊戲#處理單個異常
先看一下最簡單的猜數字的遊戲,隨機取1-10,然後讓你猜:
>>
Enter 1~10:5
guess Bigger: 5
Enter 1~10:3
guess Bigger: 3
Enter 1~10:2
guess Bigger: 2
Enter 1~10:1
Great,You guess correct.Game Over
這個是沒有異常保護的,若正常輸入沒有問題,但是若你惡意輸入aa,或者是非數字,那就會有問題了:
Enter 1~10:aa
ValueError: invalid literal for int() with base 10: 'aa'
所以我們要加入異常處理.
3.文件讀取,處理多個異常
我們在處理文件讀取的時候,可能會遇到多個異常,我們分步來解釋
Step1:假如我們當前目錄下沒有123.txt文件,然後執行下面的代碼
Step2:我們在當前目錄下裡面新建一個123.txt文件,並且把裡面的寫一個100
|----123.txt---
100
再運行我們的代碼,這下沒有問題了
Step3:我們把123.txt裡面的100改成字符串'aa',會出現什麼情況
|----123.txt---
aa
再運行step2的代碼,就會報錯這是一個ValueError,但是我們的代碼只捕捉了IOError,沒有捕捉ValueError,所以沒有處理我們except部分,我們繼續改代碼
Step4:加入多個異常處理,加入處理ValueError
這樣就捕捉到了ValueError,Python在異常處理裡面是可以捕捉多個異常,也就是說我們若發生了IOError,就執行IOError裡面的異常處理,若發生了ValueError,就執行ValueError裡面的異常,哎呦不錯哦.
也許有同學會問,太麻煩了,有的時候我們也不知道異常的類型,能不能捕獲所有的異常,有的你只要 except Exception 就可以了.
最後還是要推薦下小編的Python學習群:399288541,不管你是小白還是大牛,小編我都歡迎,不定期分享乾貨,包括小編自己整理的一份2017最新的Python和0基礎入門教程,歡迎初學和進階中的小夥伴。
每天晚上20:00我都會開直播給大家分享Python知識和路線方法,群裡會不定期更新最新的教程和學習方法(進群送2017Python學習教程),大家都是學習Python的,或是轉行,或是大學生,還有工作中想提升自己能力的Python黨,如果你是正在學習Python的小夥伴可以加入學習。最後祝所有程式設計師都能夠走上人生巔峰,讓代碼將夢想照進現實,非常適合新手學習,有不懂的問題可以隨時問我,工作不忙的時候希望可以給大家解惑。