PowerAutomateでゲーム操作の自動化

某女子高生が戦車に乗って撃ち合うハートフルストーリーアニメ(ガールズ&パンツァー(GIRLS und PANZER)|公式サイト (girls-und-panzer.jp))がベースとなったスマホゲーム(以下「戦車道大作戦」)に参加してまうす。

(※スマホゲームといいつつわたくしはAndApp経由でWindowsPCにてプレイしています)

 

この戦車道大作戦にはスマホゲームにありがちな毎日やるべきお作業がございます。それが下記動画。部隊を一つ用意して試合を十回こなすというもので、ひたすらマウスをポチポチするだけの作業です。

 

youtu.be

 

で、これを毎日手作業でするのはめんどくさいなーと思っていたのでPowerAutomateDesktopで自動化しちゃいました(先の動画は自動化した状態で作成しています)。

 

下準備(武芸連戦に臨む部隊の設定)は初日に手作業でやっておかなければなりませんが以後はフローを実行するだけなので楽ちん。

 

で、その便利なフローを公開!・・・しよかと思いましたが、サブフロー多い(12個)し画像が含まれているのでコードコピペではどうにもならないので当該フローを作成してて感じたことをメモ。

 

 

①フローでやってることは

クリックしたい「画像を待機」して「マウスを画像に移動します(&マウスの移動後にクリックを送信します)」

の繰り返しなので気合いと根性でつくりましょー。

 

②若干めんどくさいなーと思ったのは待機する画像を変数で指定できないことかな。

下記コード例の下線部分を変数KaisenIndexから生成して画像を指定することができればSWITCHが消えてすっきりするのだけどなあ。このあたりはGUI限定の開発環境ではしかたないか。

f:id:turkey_pc:20211208111208p:plain

(コード例)

SWITCH KaisenIndex
    CASE = 1
        WAIT (UIAutomation.WaitForImage.ToAppearOnForegroundWindow Images: [imgrepo['第1回戦']] (以下略
    CASE = 2
        WAIT (UIAutomation.WaitForImage.ToAppearOnForegroundWindow Images: [imgrepo['第2回戦']](以下略

 

③「画像を待機」や「マウスを画像に移動します」はデフォルトだとユニークな変数を生成して座標(X,Y)を設定してくれるのですが、不要であることがわかっているなら生成しないほうがいいでせう。使いまわしてもかまわないと判断できるなら使いまわしましょう。フロー変数欄がすっきりします。

f:id:turkey_pc:20211208111403p:plain

 

④理屈では正しいはずなのになぜがエラーがでる。そんなときはWaitをいれると解消されるかも。VB6でいうDoEventsみたいな兵器です。

 

⑤残念なことにローカル変数ありません。サブフロー(サブルーチンみたいな)に引数を渡すということもできません。すべてがグローバルです。MSX-BASIC時代を思い出しました。開発環境が変数を管理してくれる(フロー変数欄がある。変数名の変更が安全に行える)だけましかな。

 

⑥ClassやStructはありませんが「JSONをカスタムオブジェクトに変換」でStructぽいものは作れるかな。ただしIntelliSenseが効くわけありませんので値がひとまとまりになるという効能しかありません。

Variables.ConvertJsonToCustomObject Json: $'''{\"X\":%ImageX%,\"Y\":%ImageY%}''' CustomObject=> KaisenPosition

 

以上。