1. 程式人生 > >超牛!用Python自動玩轉2048遊戲

超牛!用Python自動玩轉2048遊戲

本篇作者:BlueDamage

近來在折騰selenium自動化, 感覺配合爬蟲很有意思, 大多數以前難以模擬登入的網站都可以爬了,折騰了這麼久,於是想自動玩個2048遊戲!嘿嘿, 我是一個不擅長玩遊戲的人, 以前玩2048就經常得了很低的分,每每想起都”痛心疾首”, 所以我打算拿2048開刀, 通過幾種方式, 讓程式幫我玩!

環境: python 3.5

用到的庫: re, random, time, selenium

2048網頁版:http://2048.oubk.com

本篇用到了selenium,執行前需要提前安裝selenium和chromedriver的驅動

先看一下效果圖

第一步: 瀏覽網頁確定需求

可以發現, 此網頁能註冊登入, 還有各個時間段的積分排行榜, 遊戲的玩法是按鍵盤的方向鍵,在遊戲結束後, 會彈出這麼一個框

於是我在想, 這個頁面能否自動成功登入和退出呢,還希望把4*4方塊轉為對應的矩陣列表,並且在遊戲結束後, 能自動點選再玩一次

試試看說不定可以呢,我們一起來分析一下吧.

第二步: 按需分析目標網站

需求1:登入指定賬號

進入開發者模式定位到”登入”這元素:

selenium庫提供了很多獲取網頁中元素的方法, 個人喜歡通過XPath的方式來獲取, 於是複製其xpath路徑

在點選登入後, 會有一個彈窗:

採用同樣的方式, 獲取賬號輸入框 密碼輸入框 登入 的xpath路徑

需求2:再玩一次

當遊戲結束時, 會有此提示

同樣的, 也獲取 再玩一次 的xpath的路徑

需求_3: 獲取矩陣

接下來, 我們需要將4*4方塊轉為矩陣, 先定位到任意的一個數字方塊

容易發現, 第一個數字是方塊上的數值, 之後數字為: 列 行, 後面若還接英文串, 則說明此方塊是新生成或新合併出的.採用通過正則獲取

需求_4: 模擬方向鍵

在selenium中, 通過send_keys()方法, 把鍵值傳送至元素

需要注意的是, 方向鍵是傳送給body元素, 而不是4**4方塊所在的的div

第三步: 如何玩遊戲

方法一:隨機移動

在遊戲未結束前, 上下左右隨意移動, 分數什麼的, 就隨緣吧

方法二:每次最優

在遊戲未結束前, 每次移動, 都選擇得分最高的方向,這個比較複雜(具體可以看文末的原始碼)

第四步: 執行程式看結果

1).用js程式碼註冊

借用來自網上的一段用js進行post提交的程式碼, 成功實現了註冊

2).開始玩遊戲

我寫了個分析函式, 傳入次數, 在遊戲結束後輸出平均分

次數我設定為3, 執行程式,就會出現開頭的效果圖.

加群943752371即可獲得更多免費電子書和原始碼資料