#はじめに
前回の記事では、スマホゲームを自動化するための環境構築を行いました。
今回はSikuliXに記述するサンプルコードを記載していきます。
#注意事項
スマホゲームによっては、利用規約でマクロ等を用いたプレイ行為が禁止されています。
動作させる場合はスマホゲームの利用規約を確認し、自己責任で使用してください。
#サンプルコード
#########################################
# 検索設定
#########################################
IMGS = [検索したい画像を設定]
#########################################
# 動作設定
#########################################
# 最小一致閾値
Settings.MinSimilarity = 0.85
# マウス移動のディレイ:0 = アニメーションなし
Settings.MoveMouseDelay = 0.3
# 検索範囲対象のウインドウを探してRegion(検索範囲)に設定
app = App.focus("BlueStacks")
reg = Region(App.focusedWindow())
#########################################
# 処理
#########################################
# ループ
while True:
# 検索
ms = reg.findAnyList(IMGS)
# 結果msはIMGSの順で見つかったものが格納される
for m in ms:
# タップ
click(m)
# 1秒待機
sleep(1)
#解説
サンプルコード上にコメントを残していますが、簡単に解説します。
今回はBlueStacksを使用した例です。
サンプルコード | 説明 |
---|---|
IMGS = [検索したい画像を設定] | カッコ内に検索したい画像を設定します。 カンマ区切りで複数設定することも可能です。 スクリーンショット等で画像を挿入してください。 |
Settings.MinSimilarity = 0.85 | この値が高いほど、画像一致率を求められます。 画像をうまく認識できないときは値を調整してください。 |
Settings.MoveMouseDelay = 0.3 | マウスの移動を開始するまでの時間を遅らせるときに使用します。 ※基本的に値を変更する必要はありません。 |
app = App.focus("BlueStacks") reg = Region(App.focusedWindow()) |
検索範囲対象を指定しています。 この記述がない場合は画面全体を検索するため、BlueStacksのウィンドウのみ指定しています。 |
ms = reg.findAnyList(IMGS) | IMGSの中から画面に表示されている画像を検索し、一致した画像をmsに代入します。 |
click(m) | 見つかった画像をタップします。 |
#実行するとき
SikuliX右上の実行ボタンで実行できます。
#停止するとき
alt+shift+cで停止できます。
<参考>
Sikuliの永久ループを止める方法
#まとめ
今回は周回操作などの単純作業を自動化するSikuliXスクリプトを紹介しました。
実際には以下の操作を繰り返しているだけです。
- クリックする箇所(画像)を探す
- クリックする箇所が見つかればタップする
ただし、スクリプト自体は単純であっても無駄があれば処理速度は遅くなります。
検索対象の画像の並びを調整する等して、無駄なく動作するよう設定をしてみてください。