YAPC::Asia Tokyo 2011 で Acme::MineChan を発表してきました

毎年恒例のPerlの大祭YAPC::Asia Tokyo 2011ですが、今年はちょっと趣向を変えて「Acme::MineChan」というマインスイーパを自動で解くプログラムを発表してきました。

お急ぎの方はこちらLT版の録画を

最終日2日目のLightning Talksの一番最後に少し時間をもらって簡単なデモをさせていただきました。

Perlで無理ゲーム攻略(1秒でマインスイーパを解く)

以下の録画の9:00ぐらいからデモを開始していて、途中1秒でマインスイーパを解けていますが、これはたまたま(マグレ)です。事前にいくら試しても早くて3秒2秒ぐらいだったので、本番で運が良かっただけでした。

元々応募していたのは「Perlで無理ゲーム攻略」という20分の発表で、Win32::GuiTest や Win32::Screenshot などのモジュールを利用して、Windows上で動作するゲームを自動でプレイするPerlプログラムを作成する方法について解説しました。
Windowsには元々キーボードやマウスを操作するAPIがあるので、それをPerlから利用してアプリケーションの操作を自動化しよう、という趣旨の発表でした。
スクリーンキャプチャを利用すれば、どんなアプリでも自動化できる、ということで、一番わかり易そうな例としてWindows付属ゲームのマインスイーパを攻略してみました。

マインスイーパの上級(爆弾99個)を37秒でクリアしたときのスクリーンショットです。

minesweeper hard mode (37sec)

Windows付属のMinesweeperにはXyzzyという有名なチート方法があるのですが、今回それは利用していません。
純粋にスクリーンキャプチャからパネルの状態を画像マッチで判別して、どの場所をクリックして解いていけばよいかをプログラミングしています。

ベストトーク賞2位(副賞:Mac mini)

I got a Mac mini!
Mac mini (Core i5 + OS X Lion)

YAPC::Asia 2011 ベストトーク賞2位の副賞として Mac mini をいただきました
今まで Mac の環境自宅で使ったことなかったので、WindowsだけでなくMac環境も自動化するべくしっかり活用させていただきたいと思います。ありがとうございます。
しかし事前に公表されていた副賞のスペックは2.7GHz Dual-Core Intel Core i7、8GBメモリ、HDD 500GB、MacBook Air SuperDrive付
ということだったのですが、当日受け取ったMac miniはCore i5のモデルでした。詳細を確認しようかと思ったのですが、最近はAppleは細かいモデル番号からスペックを検索できなくなってるんですね。
おかしいなーと思って中身を確認してみたら、ちゃんとCore i7が入っていました!すみません!一番いい装備で頼まれていました!どうやらパッケージの印刷がCore i5だけだったようです。私の勘違いでお騒がせしました。

モニターは自宅のLCD2690WUXI2が使えそうだったので、細かいことは気にせず、新しくMac用のキーボードとワイヤレスマウスを入手できたので、活用させていただきたいと思います。
今まで自宅でMac環境を使ったことがなかったので本当に嬉しいです!

VNC::MineChan (by gugod)

Hackathonで一緒になったgugodは、自分でVNCプロトコルをハックして
Auto-solve Minesweeper via VNC を開発していました。
台湾の繁体字バージョンのMinesweeperの画面です。

動画はMacからVNC経由で操作しているデモです。使っている画像マッチモジュールが違うため少し動作は遅いようですが、理論上Win32以外のOSでもVNC Serverが動けばリモートで自動化することができることがわかりました。

Acme::MineChanの公開について

Acme::MineChanは部品の画像を元にマッチングしてパネルの状態を把握しているのですが、それにマインスイーパをキャプチャした画像ファイルが含まれているため再配布は一旦停止しています。
gugodにはHackathonでその件を聞かれたので個別にソースコード一式を手渡しました。一番大変だったのは8のパネルの画像を出すことでした。あと、Windows7のマインスイーパはまだ攻略していません。
画像にグラデーションの処理がかかっているので、厳密な画像マッチでは対応できないためでした。
今回攻略したのはWindows95/XP付属のマインスイーパと、チート対策が施されたMinesweeper Clone 2007です。
今後、時間があれば曖昧マッチで画像位置を割り出せるようなPerlモジュールの開発をしてみようかと思います。
興味のある人は声をかけてください。

素敵なまとめ(英語)

こうして世界中のPerlハッカー達と技術交流できるYAPC::Asiaは大変素晴らしいイベントだと思います。運営・発表・参加していただいた皆さん、本当にありがとうございました!

コメントは受け付けていません。