歡迎光臨
每天分享高質量文章

Python製作回合制手游外掛,輕鬆幫你完成游戲人物

作者:`Rest探路者`
源自:`https://www.cnblogs.com/Java-Starter/p/9571919.html`

引入:

每次玩回合制游戲的時候,反反覆復的日常任務讓人不勝其煩

玩問道的時候,我們希望能夠自動刷道,玩夢幻希望能自動做師門、捉鬼等等

說明:

該外掛只能模擬滑鼠鍵盤操作,並不能修改游戲資料

我這裡使用的python2.7

開發工具是PyCharm

前期知識準備:

首先下載autopy包,我這裡PyCharm可以直接匯入autopy包

或者用利用pip進行安裝:pip install autopy

滑鼠移動

#coding=utf-8

import time
import autopy

#quick move
autopy.mouse.move(1,1)

#smooth move
#autopy.mouse.smooth_move(1370,120)

會發現滑鼠瞬間移動到坐標(1,1)的位置,我的電腦是1920*1080的,最右下角的坐標就是(1920,1080)。

將move換成smooth_move,會發現滑鼠慢慢地移動到指定坐標

官方文件的解釋:

autopy.mouse.move(x: float, y: float)

    Moves the mouse to the given (x, y) coordinate.

    Exceptions:

            ValueError is thrown if the point is out of index.

autopy.mouse.smooth_move(x: float, y: float)

    Smoothly moves the mouse to the given (x, y) coordinate in a straight line.

    Exceptions:

            ValueError is thrown if the point is out of index.

坐標超過解析度會報異常

滑鼠點擊

運行代碼,發現當前位置產生了點擊操作

#coding=utf-8

import autopy

autopy.mouse.click() # 單擊

鍵盤操作

下麵時一些常見的鍵值碼和鍵的對應:

   字母和數字鍵   數字小鍵盤的鍵      功能鍵          其它鍵
      鍵   鍵碼      鍵   鍵碼          鍵   鍵碼        鍵          鍵碼
      A   65          0   96            F1   112       Backspace      8 
      B   66          1   97            F2   113       Tab            9 
      C   67          2   98            F3   114       Clear          12 
      D   68          3   99            F4   115       Enter          13 
      E   69          4   100           F5   116       Shift          16 
      F   70          5   101           F6   117       Control        17 
      G   71          6   102           F7   118       Alt            18 
      H   72          7   103           F8   119       Caps Lock      20 
      I   73          8   104           F9   120       Esc            27 
      J   74          9   105           F10  121       Spacebar       32 
      K   75          *   106           F11  122       Page Up        33 
      L   76          +   107           F12  123       Page Down      34 
      M   77        Enter 108                          End            35 
      N   78          -   109                          Home           36 
      O   79          .   110                          Left Arrow     37 
      P   80          /   111                          Up Arrow       38 
      Q   81                                           Right Arrow    39 
      R   82                                           Down Arrow     40 
      S   83                                           Insert         45 
      T   84                                           Delete         46 
      U   85                                           Help           47 
      V   86                                           Num Lock       144
      W   87                                                             
      X   88      
      Y   89      
      Z   90      
      0   48      
      1   49      
      2   50       
      3   51       
      4   52       
      5   53       
      6   54       
      7   55       
      8   56       
      9   57

這裡需要win32api包

呼叫win32api的keybd_event方法,用過要釋放按鍵

#coding=utf-8

import time
import win32api


win32api.keybd_event(18,0,0,0)  #alt鍵位碼是18

win32api.keybd_event(9,0,0,0)  #tab鍵位碼是9

time.sleep(0.5)

win32api.keybd_event(13,0,0,0)  #enter鍵位碼是13


win32api.keybd_event(18,0,win32con.KEYEVENTF_KEYUP,0#釋放按鍵

win32api.keybd_event(9,0,win32con.KEYEVENTF_KEYUP,0)

win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0)

time.sleep(2)

 可以看到,完成了切換視窗的操作,相當於我們按alt+tab,然後回車進入

開始製作外掛:

這裡以問道手游為例(回合制手游類似)

需要夜神模擬器,併在模擬器上安裝問道

我試過藍疊和MuMu模擬器,我用autopy移動滑鼠到模擬器時滑鼠就消失了,不能完成後續的自動操作,後來百度了

說有的模擬器不受win視窗的控制。不管那麼多,我們先用夜神模擬器吧!

進入游戲,打開“活動”

我們以“競技場”活動舉例說明

 這裡我們要用到截圖工具,我用的是PicPick

 個人用戶免費,我主要用它來測量坐標

 記錄下競技場前往的坐標(1358,504)

記錄下競技場按鈕的坐標(1332,650)

製作回合制腳本首先得要熟悉任務流程

然後點擊競技場,走完這個任務流程,依次記錄按鈕的坐標

競技場任務一天可以做五次,我們對步驟迴圈五次

戰鬥時間我們需要自己來計時,不同門派,土豪或者平民玩家時間都不一樣

我是平民玩家,大概耗時60s,點擊過挑戰讓代碼延遲60s再繼續執行

#coding=utf-8

import autopy
import time
import win32api
import win32con

#競技場
win32api.keybd_event(18,0,0,0)  #alt鍵位碼是18
win32api.keybd_event(9,0,0,0)  #tab鍵位碼是9
time.sleep(0.5)

win32api.keybd_event(13,0,0,0)  #enter鍵位碼是13
win32api.keybd_event(18,0,win32con.KEYEVENTF_KEYUP,0#釋放按鍵
win32api.keybd_event(9,0,win32con.KEYEVENTF_KEYUP,0)
win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0)
time.sleep(2)

def mousemove_click(x,y):
    autopy.mouse.smooth_move(x, y)
    autopy.mouse.click()

mousemove_click(771203)  # 活動的坐標
mousemove_click(1358,504)  # 競技場"前往"的坐標
time.sleep(20)#從天墉城城中心/其他地圖走到競技使者花費20s
mousemove_click(1334650)  # 競技使者對話框中的競技場的坐標

#挑戰完畢會出現對話視窗
for i in range(1,6,1):
    mousemove_click(664,706#挑戰試煉童子
    mousemove_click(1082,578#確認
    mousemove_click(1530794)  # 戰鬥自動
    time.sleep(60)#挑戰試煉童子預計60s

 效果如下:

PS:因為公眾號最高圖片為5MB,所以可能這個動態圖不會很清晰!!!

赞(0)

分享創造快樂