天天愛消除刷分指令碼(終於打敗大毛了。。)
轉自我的獨立部落格alanslab.cn,不打算續費域名了。懶人實在不該開什麼獨立部落格。。。csdn的都嫌折騰了。。。。。。。上帝賜我一個腦機介面吧,usb相容就行。。。
注:視訊中的效果是一開始做的暴力劃螢幕的作弊效果,這裡則是嘗試分析截圖有目的的去划動。截圖實在太慢,效果還不如暴力。我是懶得繼續了搞它了,有興趣玩的可以看下frame buffer的資料,一定程度應該能緩解截圖速度的限制。
文章比較早,程式碼已丟。但是所需的東西這裡都有,抄抄改改,幾十行就完事了。
更新:睡一覺起來改寫了演算法,之前那個寫的時候腦袋有點不太清醒。。。思路就是窮舉所有可以消除的模式,跟之前一樣,不過改寫完好像正確率高了很多,看來之前那個是寫太亂漏了什麼東西。
前幾天被人鄙視了。。今早就試試看寫個小指令碼刷下分數。
視訊裡的做法非常簡單,就用了android sdk tools 裡面的monkeyrunner這一個自動測試工具。
做法就是用monkeyrunner截圖後用gimp找到卡通角色對應的位置規律,然後程式碼模擬觸控,讓其不停上上下下左左右右。。。如視訊中所見,一整個螢幕的觸控操作幾乎同時完成,效果非常給力(google養的這隻monkey相當強悍)
中間出了一次小插曲。。我的最高分被清空了一次。。不知道是網路問題還是怎樣。。。所以之後就考慮怎麼分析影象來解決這問題。好在這遊戲還算寬鬆,沒拿什麼雪花閃電的擋螢幕,在每個角色的同一位置取色對比就可以了,網上沒找著什麼合適的演算法。。就自己動手暴力編了一個(下文附上),雖然效果差很多而且老是誤判(一定有bug。。。懶得找了),今天也算是學習之餘休息休息放個假。
第一個版本(程式碼裡沒用到的那個註釋了crazy monkey的函式,不過應該用不了了)效果不錯,分分鐘打敗大毛。 第二個版本(現在這個)誤判連連(已重寫,效果還不錯,偶爾的誤判是因為處理的影象不是實時的,可以調整暫停的時間做一點有限的優化),刷分效果不是太好,但是隱蔽。。。有機會找個霸氣點的演算法看看怎麼改進一下應該也不錯。但獲取螢幕截圖的速度是個硬傷,這個思路估計再努力也到不了第一版的效果,今早本來是想寫個打飛機的指令碼,也是因為這個問題作罷。
執行方式,先裝好andorid sdk,然後複製文後的程式碼到monkey.py。 接上手機,開啟開發者模式,開啟遊戲,同時點開始按鈕和執行下面的命令,玩完關閉的話。。抱歉。。Ctrl+c吧(win是Ctrl+d好像,不行就試試Ctrl+z。。。):
[email protected] ~/adb $ ~/android-sdks/tools/monkeyrunner /path/to/monkey.py
windows的話可能是類似這樣?應該沒錯吧。。:
C:\SDK\tools\monkeyrunner C:\monkey.py
monkey.py:
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
import time
def drag(pos, dir):
tx = pos[0]
ty = pos[1]
if dir == "up":
ty -= 100
if dir == "down":
ty += 100
if dir == "left":
tx -= 100
if dir == "right":
tx += 100
device.drag(pos, (tx, ty), 0, 1)
device = MonkeyRunner.waitForConnection()
def capToFile():
screen = device.takeSnapshot()
screen.writeToFile("shot.png", "png")
def getNodePos(x, y):
width = 108
height = 108
return (60+(x*width),280+(y*height))
# crazy monkey(s)
def monkeyrun():
for y in xrange(2, 7, 2):
for x in xrange(0, 8):
drag(getNodePos(x, y), "up")
time.sleep(sleeptime)
for y in xrange(1, 6, 2):
for x in xrange(0, 8):
drag(getNodePos(x, y), "up")
time.sleep(sleeptime)
for x in xrange(0, 5, 2):
for y in xrange(0, 8):
drag(getNodePos(x, y), "right")
time.sleep(sleeptime)
for x in xrange(1, 6, 2):
for y in xrange(0, 8):
drag(getNodePos(x, y), "right")
time.sleep(sleeptime)
for y in xrange(0, 5, 2):
for x in xrange(0, 8):
drag(getNodePos(x, y), "down")
time.sleep(sleeptime)
for y in xrange(1, 6, 2):
for x in xrange(0, 8):
drag(getNodePos(x, y), "down")
time.sleep(sleeptime)
for x in xrange(2, 7, 2):
for y in xrange(0, 8):
drag(getNodePos(x, y), "left")
time.sleep(sleeptime)
for x in xrange(1, 6, 2):
for y in xrange(0, 8):
drag(getNodePos(x, y), "left")
time.sleep(sleeptime)
def getpuzzle():
screen = device.takeSnapshot()
puzzle = []
for y in xrange(0,7):
line = []
for x in xrange(0,7):
line.append(screen.getRawPixelInt(getNodePos(x,y)[0], getNodePos(x,y)[1]))
puzzle.append(line)
return puzzle
# lazy one
def trainedmonkey():
x = 0
y = 0
do = True
pr = True
puzzle = getpuzzle()
while (x < 7):
while (y < 7):
################################
# if match patterns, drag up #
################################
# o o
# 0
if ((y > 0 and x > 1 and
puzzle[y][x] == puzzle[y-1][x-1] and
puzzle[y][x] == puzzle[y-1][x-2]) or
# o o
# 0
(y > 0 and x > 0 and x < 6 and
puzzle[y][x] == puzzle[y-1][x-1] and
puzzle[y][x] == puzzle[y-1][x+1]) or
# o o
# 0
(y > 0 and x < 5 and
puzzle[y][x] == puzzle[y-1][x+1] and
puzzle[y][x] == puzzle[y-1][x+2]) or
# o
# o
#
# 0
(y > 2 and
puzzle[y][x] == puzzle[y-2][x] and
puzzle[y][x] == puzzle[y-3][x])):
if pr: print x, y, "up"
if do: drag(getNodePos(x, y), "up")
return
###################################
# if match patterns, drag right #
###################################
# o
# o
# 0
if ((y > 1 and x < 6 and
puzzle[y][x] == puzzle[y-1][x+1] and
puzzle[y][x] == puzzle[y-2][x+1]) or
# o
# 0
# o
(y > 0 and y < 6 and x < 6 and
puzzle[y][x] == puzzle[y-1][x+1] and
puzzle[y][x] == puzzle[y+1][x+1]) or
# 0
# o
# o
(y < 5 and x < 6 and
puzzle[y][x] == puzzle[y+1][x+1] and
puzzle[y][x] == puzzle[y+2][x+1]) or
# 0 o o
(x < 4 and
puzzle[y][x] == puzzle[y][x+2] and
puzzle[y][x] == puzzle[y][x+3])):
if pr: print x, y, "right"
if do: drag(getNodePos(x, y), "right")
return
##################################
# if match patterns, drag down #
##################################
# 0
# o o
if ((y < 6 and x < 5 and
puzzle[y][x] == puzzle[y+1][x+1] and
puzzle[y][x] == puzzle[y+1][x+2]) or
# 0
# o o
(y < 6 and x > 0 and x < 6 and
puzzle[y][x] == puzzle[y+1][x+1] and
puzzle[y][x] == puzzle[y+1][x-1]) or
# 0
# o o
(y < 6 and x > 1 and
puzzle[y][x] == puzzle[y+1][x-1] and
puzzle[y][x] == puzzle[y+1][x-2]) or
# 0
#
# o
# o
(y < 4 and
puzzle[y][x] == puzzle[y+2][x] and
puzzle[y][x] == puzzle[y+3][x])):
if pr: print x, y, "down"
if do: drag(getNodePos(x, y), "down")
return
##################################
# if match patterns, drag left #
##################################
# 0
# o
# o
if ((y < 5 and x > 0 and
puzzle[y][x] == puzzle[y+1][x-1] and
puzzle[y][x] == puzzle[y+2][x-1]) or
# o
# 0
# o
(y > 0 and y < 6 and x > 0 and
puzzle[y][x] == puzzle[y-1][x-1] and
puzzle[y][x] == puzzle[y+1][x-1]) or
# o
# o
# 0
(y > 1 and x > 0 and
puzzle[y][x] == puzzle[y-1][x-1] and
puzzle[y][x] == puzzle[y-2][x-1]) or
# o o 0
(x > 2 and
puzzle[y][x] == puzzle[y][x-2] and
puzzle[y][x] == puzzle[y][x-3])):
if pr: print x, y, "left"
if do: drag(getNodePos(x, y), "left")
return
y = y + 1
x = x + 1
y = 0
def testdrag(x,y):
drag(getNodePos(x, y), "up")
time.sleep(0.5)
drag(getNodePos(x, y), "right")
time.sleep(0.5)
drag(getNodePos(x, y), "down")
time.sleep(0.5)
drag(getNodePos(x, y), "left")
time.sleep(0.5)
if __name__ == '__main__':
while True:
trainedmonkey()
time.sleep(0.1)
程式碼最後記得多留一行空行,不然可能會出錯,好像是jython的一個bug還是怎樣,不太清楚
相關推薦
天天愛消除刷分指令碼(終於打敗大毛了。。)
轉自我的獨立部落格alanslab.cn,不打算續費域名了。懶人實在不該開什麼獨立部落格。。。csdn的都嫌折騰了。。。。。。。上帝賜我一個腦機介面吧,usb相容就行。。。 注:視訊中的效果是一開始做的暴力劃螢幕的作弊效果,這裡則是嘗試分析截圖有目的的去划動。截圖實
open/read/write (終於寫的長了一點。。。)
http://wiki.ubuntu.org.cn/index.php?title=%E9%A6%96%E9%A1%B5&variant=zh-cn 很有用的幫助查詢網站,中文化的,很方便,站在前人的肩膀上,容易很多,嘿嘿。 程式設計第一步就是裝編譯器。。linux一
程式設計師玩遊戲之三--天天愛消除非暴力指令碼
評論: 此款遊戲成功在其好友排名上。好友的分數超過了你無疑會增加你的鬥志。 中級策略:七手八腳多人一起點。這相當於多個CPU處理一個大任務了,哈哈。 終極策略:自動化。機器總是比人快的多。你兩個人一秒充其量點4下,而機器的數
[NOIP2016 DAY1 T2]天天愛跑步-[差分+線段樹合並][解題報告]
rip top 偏移 digi http n-1 sdi git += [NOIP2016 DAY1 T2]天天愛跑步 題面: B【NOIP2016 DAY1】天天愛跑步 時間限制 : - MS 空間限制 : 565536 KB 評測說明 : 2s D
洛谷P1600 天天愛跑步(差分 LCA 桶)
題意 題目連結 Sol 一步一步的來考慮 \(25 \%\):直接\(O(nm)\)的暴力 鏈的情況:維護兩個差分陣列,分別表示從左向右和從右向左的貢獻, \(S_i = 1\):統計每個點的子樹內有多少起點即可 \(T_i = 1\):同樣還是差分的思想,由於每個點 能對其產生的點的深度是相同
python刷課指令碼(正方教務系統)
#!/usr/bin/env python # coding=utf-8 __metaclass__=type import urllib2 import urllib import time import sys import re reload(sys) sys.setdefaultencoding
shell指令碼使用之awk按列求平均值(含最大,最小值)
使用Linux命令的awk工具 delay_avg.sh指令碼內容如下所示: #!/bin/sh RESPONSEFILE=$1 if [ $# -ne 1 ] then echo "usage: ./delay_avg.sh na
廣義圓方樹+樹鏈剖分+set(Codeforces Round #278 (Div. 1): E. Tourists)
前置:雙聯通分量、圓方樹、樹鏈剖分 什是是廣義圓方樹 圓方樹是針對於仙人掌建樹,而廣義圓方樹是針對無向圖建樹,對於一個無向圖 無向圖中的所有點 → 廣義圓方樹中的所有圓點 無向圖中的一個雙聯通分量 → 廣義圓方樹中的其中一個方點,這個方點向當
Java分散式中文分片語件 - word分詞(轉自 https //github com/ysc/word)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
CDH安裝指令碼(可用但不完善不適小白)——來自我的QQ空間
#! /bin/bash 10.2.45.81 cdh1 10.2.45.82 cdh2 10.2.45.83 cdh3 echo -e "\033[32m =======close iptables ====== \03
shell命令執行hive指令碼(hive互動,hive的shell程式設計)
Hive執行方式 Hive的hql命令執行方式有三種: 1、CLI 方式直接執行 2、作為字串通過shell呼叫hive –e執行(-S開啟靜默,去掉”OK”,”Time taken”) 3、作
leetcode刷題記錄(買賣股票的最佳時機系列問題)
開始逐步拾起C++,故以後的刷題,全用python和C++兩種語言實現。 一、買賣股票的最佳時機 I 給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。 如果你最多隻允許完成一筆交易(即買入和賣出一支股票),設計一個演算法來計算你所能獲取的最大利潤。 注
php呼叫shell指令碼(web端和客戶端同時實現)
想這個問題有一段時間了,一開始想實現的功能是在web端點選一個按鈕,然後liunx主機採集影象,在瀏覽器上顯示。於是自然而然的想到了php呼叫shell指令碼。查了很多資料。實現了。 下面開始講解。本
工作流實現分合流(多人、多部門分工處理)的介紹
分合流:顧名思義,想長江一樣,有主流河流和分支河流,有起點,有終點。 適用範圍:多人、多角色、多崗位、多部門等相互獨立審批工作、處理工作,同時又可在某個步驟中檢視工作的彙總、或者過程、或者處理結果等
django外掛-dj-pagination簡單設定實現分頁(甚至不用在view上寫paginate)
1. 概述 django真的有好多簡單方便好用的輪子!!! 這次介紹的這個是用於分頁的,django中本身提供了實現分頁的物件,但是每次都要寫一堆業務程式碼,也是神煩。 在django-awesome專案中發現了這個輪子: 文件也很簡單,三四頁的
軟件工程第二次作業(心態差點用崩了的vs2017)
工具 OS http cli ips -i cpp 問題 alt 一、開發工具的選擇 本來電腦上有eclipse,可是自己想用c++作為開發語言(想著自己也是學過c++的),就抱著試一試的心態下了visual studio 2017開發軟件。以下便是開發工具的下載安裝過程。
洛谷 P1824 進擊的奶牛 【二分答案】(求最大的最小值)
函數 邊界 TP 大於 輸入格式 要求 初始 位置 style 題目鏈接:https://www.luogu.org/problemnew/show/P1824 題目描述 Farmer John建造了一個有N(2<=N<=100,000)個隔間的牛棚,這些隔間分
bzoj 3837 (隨機過題法了解一下)
name mit rac problems ack content alt pre 大於等於 3837: [Pa2013]Filary Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 395 Solved: 74[Subm
Ants UVA - 1411(竟然讓我換了個板子)
bool print uva sqrt ostream algorithm pre 一次 lac 題意: 給出n個白點和n個黑點的坐標,要求用n條不相交的線段把它們連接起來,其中每條線段恰好連接一個白點和一個黑點,每個點恰好連接到一條線段 解析: 帶入負的歐幾裏得距
AndroidStudio Unknown attribute(在xml中沒有了程式碼提示)
問題 如上圖所示,編寫xml的時候提示:Unknown attribute in xml and Namespace not found 真的氣死人,升級到AndroidStudio3.2.1,sdk28以後問題成堆出現。 解決方案 下面是百度最多的兩個解決方案,然