1. ホーム
  2. スクリプト・コラム
  3. パイソン

クリックのシミュレーションのためのPythonによるゲームランタイムスクリプト

2022-01-28 13:52:41

この記事は、前回の記事に続くものです Pythonを使ってゲームランタイムスクリプトを開発する(I) Desertプラグインをうまく呼び出すために

前回の記事では、pythonを実装してDaimlerプラグインを呼び出し、バージョン番号を出力するだけでしたが、次にやりたいことは、Daimlerプラグインを通してマウスクリックやキーボードの文字入力をシミュレートすることです。近年の人気ゲームは基本的に携帯ゲーム機なので、ゲームスクリプト開発でも携帯ゲーム機を例に挙げて説明します。Desertプラグインは、Windowsプラットフォーム用のマウスキーボードシミュレーション+グラフィックファインダライブラリです。
このように、ハンディスクリプト開発を実現するための第一歩は、Androidエミュレータをダウンロードし、Androidエミュレータ上でマウスとキーボードをシミュレートしてゲームスクリプトを自動化することなのです。

I. Androidエミュレータの選択

  • 夜神月エミュレータ、雷電エミュレータ、Tencent Handy Assistant、NetEaseのMumu Emulatorなど、現在多くのAndroidエミュレータが市場に出回っています。これらのエミュレータは、携帯ゲームとの相性や砂漠プラグインへの対応など、それぞれ一長一短がありますので、特定の携帯ゲームに応じて、ご自身の判断でご利用ください。
  • ここでは夜神月エミュレータを選びましたが、原理は同じなので、他のものを選んでも確かに大丈夫です。エミュレータを選択後、ダウンロードとインストールを行い、無事に開くと、夜神月エミュレータのメインページが表示されますが、ここでは夜神月エミュレータの解像度を【640*360 / dpi = 240】に変更しました。

次に、desertプラグインを使用して、特定のウィンドウにバインドします。

Windows の場合、デスクトップ上に表示されるものはすべて実際には Windows のウィンドウが次々と表示されており、Android エミュレータも例外ではありません。Daimler API のドキュメントによると、マウスクリックやキーボードのキーストロークをシミュレートするには、まず Daimler プラグインの API を呼び出して特定のウィンドウをバインドしなければならず、それには Daimler API の一部が関わっています(特定の API に関しては Daimler Plugin の API ドキュメントを参照してください)。

import win32com.client

# Create a desert instance object
def createDMInstance():
   dm = win32com.client.Dispatch('dm.dmsoft') # Call the DAM plugin, get the DAM object
   print("DMSoft plugin version number: " + dm.ver()) # output version number
   return dm

# Find the window, return the window handle found
def findWindow(dm, windowClass, windowTitle):
   windowHandle = dm.FindWindow(windowClass, windowTitle)
   print("Found window handle = " + str(windowHandle)) # output window handle ID
   return windowHandle

# Bind a window
def bindWindow(dm, windowHandle):
   isBindSuccess = dm.BindWindow(windowHandle, "normal", "normal", "normal", "normal", 0)
   print("whether bindSuccess = " + str(isBindSuccess)) # whether bindSuccess
   return isBindSuccess # whether the bind is successful

if __name__ == '__main__':
   dm = createDMInstance()
   windowHandle = findWindow(dm, "", "Night Simulator")
   isBindSuccess = bindWindow(dm, windowHandle)

  • DesertプラグインのAPI [FindWindow]を呼び出して、夜神月エミュレータのウィンドウハンドルを検索し、ウィンドウハンドルの番号を出力する
  • API [BindWindow]を呼び出して、見つかったウィンドウハンドルをバインドし、バインド結果を出力する。

III. マウスシミュレーションの実行

ウィンドウのバインドに成功したら、そのウィンドウ、つまりナイトシミュレータで好きなことができるようになります!
ここでは、Daimler プラグインの API [MoveTo(x, y)] を呼び出して特定の座標点(全体の座標系は Android エミュレータの左上を原点として右下に展開しています)にマウスを移動させ、次に [LeftClick()] を呼び出し、クリックのシミュレーションに成功しています。


pythonが起動した瞬間に、マウスがx=136, y=161の位置に自ら移動し、アプリを開くクリックをトリガーしているので、最初のマウスシミュレーションクリックがあることがわかりますね。

Pythonを使ってクリックをシミュレートするゲームランタイムスクリプトを開発するお話は以上です。Pythonによるシミュレーションの詳細については、スクリプトハウスの過去記事を検索するか、以下の記事を引き続きご覧ください。