UWSCで自動化 その2

投稿日: カテゴリー: PCゲーム

前回よりももう少ししっかりとした内容になったので、2パターン記載する。
ほぼ操作手順が一定の繰り返しのパターンと、操作分岐が多いパターン。

まずは手順がほぼ決まってるループの場合。

手順が決まっている場合は、上記のように順番にマウス操作させる。
無限ループする場合はwhile-wend,回数決める場合はfor-nextを追加する。止まりやすい所では、sleep()でインターバルを取ると改善することもある。
なるべく後々まで流用したいので、今回は操作ごとにuwsファイルを分け、使い回しし易い(多分)ようにした。ファイルが多くなってしまったので、フォルダを分けて整理した。

各uwsファイルの一例。画像を認識するまでwhile-wendをループし続ける。認識したら所定位置をクリックする、といった内容。何秒後、何分後とか気にする必要がないので、手順が決まっている場合はこれを並べるだけで十分動作する。
そして、chkimgxのパラメータも追加した。画像ファイル後のパラメータは[ID,x1,y1,x2,y2,番号,判定閾値,着目する色]。
IDは思うように設定できなかったので、使っていない。
次の4つは検索範囲。設定すると認識精度も捜査時間も向上する。
判定閾値は1-10%くらいの範囲で設定するのがよさそう。通常は5%で問題ない。
パラメータ設定が必要なのかわからないが、chkimgxは文字の画像認識が思い通りに動作しないことが多かった。ランプが5個並んでいて、1個点灯、2個点灯・・・の違いを認識させる場合は、1%設定のほうがうまく認識した。
クリック後のmmvのカーソル移動はこの後の操作でマウスカーソルが邪魔にならないように、検索範囲外に移動させている。

次は分岐が多い場合。

上記は載せきらなかったが、以下elseif文が10くらい続く。操作手順が複雑になる場合、このようにifb,elseifですべての操作に対応させるのがいいと思う。ブラウザゲームなので、複雑といってもそれほど操作種類は多くないから。
1つ目のWhile trueは無限ループ用。回数制限するならfor-nextに変更
2つ目のwhile trueはif文のいずれかを実行するまでループさせる。if文は上から順番に実行するため、優先順位の高い操作を上に書いていくことが大切。各操作が終わったら、一旦breakでループから抜けることが分かりやすくていいと思う。
各操作の後にmmvで微妙にカーソル位置をずらしているのは、どこで止まったか分かりやすくするため。デバックで便利しただけなので無くてもいい。
if文だけでは処理できない場合は上記のようなcall文で対応すれば、大抵の操作は出来る気がする。
chkimgxを毎回starup/shutdownで処理しているが、試行錯誤した結果なので、一番最初にstartup,一番最後にshutdownを入力するだけでいいのかもしれない。

100周くらいは止まらないようにUWSCで出来ないか、と試行錯誤してたら、UWSCでマクロ作るほうがゲームするより面白くなってしまった。まだまだ改善の余地はあるし、ゲーム側のバグだったり、予想外のことで止まってしまうことはある。が、順調なら一晩くらいは止まらなくなったので、ちょっと満足。