ブラウザゲームのマクロ作ってみた
最近ブラウザゲームの「かんぱに☆ガールズ」ってのやり始めたんだが、カード収集ゲームにしては珍しくゲームっぽくて面白い。
のだが、素材収集とかレベル上げとか作業感が強い。
そこで、ゲームのマクロ作成に初挑戦してみた。
言語は慣れたPerlで。
この手のゲーム操作自動化は、スクリーンキャプチャ取って画像解析してクリック。
って感じだとは思ったが、
スクリーンキャプチャの画像をメモリで扱えればいいんだが、Perlで簡単にやる方法が見つからなかったんでImageMagick経由でTIFF画像作成。
TIFF形式は初めて使ったが、Linuxで使う.bmpみたいなもん?
最初は全画面から判別用の領域画像をサーチして座標を求めようとしたが、
ゲーム画面に透過箇所が多く、ほぼ全体が常時微妙にアニメーションしてるようで領域比較は難しかったのでピンポイントの1x1px画像を比較して判別するようにした。
importコマンドは-cropオプションで特定位置の画像を取れるが、helpや公式サイト見てもわかりにくい。
-cropオプションに続いて「サイズ」又は「サイズ+位置」を指定で、位置指定する場合の書式は「横幅x縦幅+横位置+縦位置」となる。
領域画像の判別が困難だったから、一度画面解析せずにタイマーのみで自動化する処理を作ったんだが、タイマーだけだとやっぱ誤差が出てダメな感じ。
Imagerモジュールで画像比較は、
my $img=Imager->new(file=>"判別用画像");
my $cap=Imager->new(file=>"キャプチャ画像");
って感じで2ファイル読み込んで、
画像が両方共1pxなんで座標は0x0。
X11::GUITestモX11::GUITestモジュールは、
キーボード操作なんかもできる。
最初、入力デバイスの自動操作ってどうやるんだ?
ってわけでググったが、Win32の情報がでてきてLinux用のこれ見つけるのに苦労した。
そんなわけで、「かんぱに☆ガールズ」の夢幻の迷宮とメインクエのループ作業自動化ができた。
食料確認して迷宮とメインクエを自動で分けるように作ったが、
できれば社員解雇や素材売却、自動カンカンなんかもできるようにできるといいが、難しいかな。
まあ、メインクエ1回行くのに迷宮2回として計10分以上かかるから、社員枠が10あれば3時間位動けるかな?
初めてゲーム用マクロ作ったが、今回の応用で他ゲームのも作れそう。
のだが、素材収集とかレベル上げとか作業感が強い。
そこで、ゲームのマクロ作成に初挑戦してみた。
言語は慣れたPerlで。
この手のゲーム操作自動化は、スクリーンキャプチャ取って画像解析してクリック。
って感じだとは思ったが、
- ImageMagickのimportコマンドで画面キャプチャ。
- Imagerモジュールで画像比較。
- X11::GUITestモジュールでマウス移動とクリック。
スクリーンキャプチャの画像をメモリで扱えればいいんだが、Perlで簡単にやる方法が見つからなかったんでImageMagick経由でTIFF画像作成。
TIFF形式は初めて使ったが、Linuxで使う.bmpみたいなもん?
`import -window root -crop 1x1+横座標+縦座標 capture.tif`;
って感じに。最初は全画面から判別用の領域画像をサーチして座標を求めようとしたが、
ゲーム画面に透過箇所が多く、ほぼ全体が常時微妙にアニメーションしてるようで領域比較は難しかったのでピンポイントの1x1px画像を比較して判別するようにした。
importコマンドは-cropオプションで特定位置の画像を取れるが、helpや公式サイト見てもわかりにくい。
-cropオプションに続いて「サイズ」又は「サイズ+位置」を指定で、位置指定する場合の書式は「横幅x縦幅+横位置+縦位置」となる。
領域画像の判別が困難だったから、一度画面解析せずにタイマーのみで自動化する処理を作ったんだが、タイマーだけだとやっぱ誤差が出てダメな感じ。
Imagerモジュールで画像比較は、
my $img=Imager->new(file=>"判別用画像");
my $cap=Imager->new(file=>"キャプチャ画像");
って感じで2ファイル読み込んで、
if($img->getpixel(x=>0,y=>0)->equals(other=>$cap->getpixel(x=>0,y=>0))){
一致
}
って感じ。一致
}
画像が両方共1pxなんで座標は0x0。
X11::GUITestモX11::GUITestモジュールは、
X11::GUITest::MoveMouseAbs(横座標,縦座標);
X11::GUITest::ClickMouseButton(X11::GUITest::M_LEFT);
って感じでマウス移動と左クリックができる。X11::GUITest::ClickMouseButton(X11::GUITest::M_LEFT);
キーボード操作なんかもできる。
最初、入力デバイスの自動操作ってどうやるんだ?
ってわけでググったが、Win32の情報がでてきてLinux用のこれ見つけるのに苦労した。
そんなわけで、「かんぱに☆ガールズ」の夢幻の迷宮とメインクエのループ作業自動化ができた。
食料確認して迷宮とメインクエを自動で分けるように作ったが、
できれば社員解雇や素材売却、自動カンカンなんかもできるようにできるといいが、難しいかな。
まあ、メインクエ1回行くのに迷宮2回として計10分以上かかるから、社員枠が10あれば3時間位動けるかな?
初めてゲーム用マクロ作ったが、今回の応用で他ゲームのも作れそう。