The Color! (中文: 看你有多色) : http://game.ioxapp.com/color/
最近在FB上面頗紅
是一個用來測試視力的遊戲
玩法就是給你60秒的時間,找出不同顏色的方塊,找到越多分數越高
看到許多朋友分享自己的分數
之後看到有人用外掛刷到300多分
就想說自己也來嘗試看看=w=
其中一種方法就是寫 JavaScript 去掃它網頁上的元素
比較無腦的就是所有方格都按一次
當然也是可以利用檢查 RGB 的方式來加快點擊的效率與準確度
不過其實靠第一種方法將程式碼丟到 Chrome 的Console 裡面跑
就可以刷到近 2000 分了
不過在這之前一直想玩一下 Sikuli
一種結合 CV ( Computer Vision, 電腦視覺 ) 的 IDE
讓 programmer 可以利用 Python 或是 Java 來處理 computer vision 的東西
簡單來說,我可以利用 Sikuli 讓電腦自己玩 The Color! (自己判斷哪個方塊顏色與眾不同,並自己移動滑鼠點它)
Sikuli 有點像按鍵精靈,不過個人認為比按鍵精靈更有彈性
可以更方便得透過程式讓電腦模擬人類操作電腦的行為
Sikuli 本身是用 Java 開發成的 IDE,因此在安裝之前須要先安裝 JRE
此外他也有用到 OpenCV 的東西,所以還需要再安裝 OpenCV
以下是我的開發環境 :
* OS : Ubuntu 14.04
* Browser : Firefox 31.0
* Sikuli 1.0.1
* Java 7
* OpenCV 2.4.9
* Python 2.7.6
全部裝好之後就可以開始開發了
這裡我是用 Python 開發
就解 The Color! 來說, 其實並不難寫
一開始先透過偵測開始按鈕來開始遊戲
之後設定座標,讓 Sikuli 知道要從哪裡開始偵測與眾不同的方塊
外面那個將所有方塊包起來的正方形大小為 500 * 500
裡面每個方塊的大小均為相同
假設是 2*2 的關卡
則方塊大小則為 500/2 * 500/2 = 250 * 250
如果是 3*3 的關卡
則方塊大小則為 500/3* 500/3 = 167 * 167 (大概)
依此類推
我們可以以最左上角的方塊為起點
偵測方塊中心處的 pixel 值
記錄在一個 dictionary 裡面, 像這樣
{RGB : point}
RGB 是一個 tuple , 裡面記了三個值 (r, g, b)
point 也是一個 tuple, 記錄了座標 (x, y)
之後就可以寫判斷式去判斷哪個座標的 RGB 與眾不同
再用滑鼠去那個座標點擊即可
基本上沒遇到什麼大問題
比較困難的地方是本來想動態偵測方塊的起始點
結果一直失敗
使用了 find, match 之類的函式都無法獲得正確的起始座標
最後只好無耐的將起始點寫死
也使得整份程式少了那麼點彈性
一但螢幕大小有變整份程式就會失效
算是比較不足的地方
另外破關的速度也沒有很快
我想是因為光是要用 OpenCV 去偵測 RGB 這點就夠花時間了
還得移動滑鼠去點擊
這點就只能使用 "Settings.MoveMouseDelay = 0.01" 來加快滑鼠的動作
撇開缺點不談
是有享受到開發的過程就是了
一直覺得這種東西還蠻好玩的
雖然速度有點慢,一分鐘最多破個 101 關 ( 視當時CPU的負載而定 )
不過寫出來就是爽啊 =w=
github page : https://github.com/bruce30262/color-solver
DEMO:
留言列表