• IoT

RPAによるゲームの自動化 ~とあるギルドマスターの挑戦

こんにちは。OSS戦略担当のわたなべです。

普段の私はOSS推進やOSSライセンスの話が多いのですが、ITアーキテクトの肩書ももっております。
ということで、アーキらしく本日のお題は「RPAによるゲームの自動化」です。

最近は年甲斐もなく、ネットゲームにはまっています。私がやっているのは、一般的にタワーディフェンス型と呼ばれるもので、キャラクターを出してお互いの城を攻撃し、先に城を落とされた方が負けというものです。

<ゲームのイメージ図>

ゲームイメージ

本来は、性格の違うキャラクターをどのように組み合わせて、どうやって様々な能力を持つ敵を倒していくかというパズル的な要素を楽しむゲームです。でも私はステージクリアの獲得ポイントを競うランキング戦に心血を注いでいます。

例えば、決められたステージを1回クリアすると1000ptがもらえます。その合計を競うわけですので、つまり如何に多くの回数ステージクリアしたかにかかっています。

で、定期的に行われるランキング戦に参戦しているわけですが、普通では勝てないんですよね。なにせ相手は自宅警備員とか、アラブの石油王かと思われるような人たちばかり。どれだけ時間をかけたら、そんな点が取れるの?という、まさにけた違いな得点を出してきます。このゲームの話ではありませんが、とある知り合い(ゲーム業界関係者)に聞いた話では、1つのゲームに3,000万円投入してくれるプラチナユーザーもいるそうです。とても信じられない世界です。

そこまでは求めませんが、私だって本当はフルタイムでやりたいところです。でも、まじめな社会人なのでそんな事できません。
そこで考えたのがゲームの自動化です(やっと本題!)。そう、今はやりの「RPA」ですね。

先に言ってしまうと、実は私、自分ではゲーム自体をプレイしていません(キリッ)。

あらかじめ設定したスケジュールに従ってゲームが起動し、指定したステージを指定回数クリアして、終わるとゲーム自体が終了します。結果は、クラウド(One Drive)に画面キャプチャとして保存されるので、私がやることはスマホでその結果を見るだけです。システム概念図は以下のようになります。

<システム概念図> (図をクリックすると大きく表示されます)

ゲーム自動クリアシステム概念図

自動化はUWSCというフリーウェアを使用しています。これは、マウス、キーボードの操作をそのまま記録し、その記録した一連の操作をまるでテープレコーダーを再生するかのごとく、そのまま再現してくれるというソフトです。

結構本格的なスクリプティング言語を内蔵しており、繰り返し処理などの制御文、サブルーチンの呼び出し、はてはクラスによるオブジェクト指向的なプログラミングもできるようになっています。惜しむらくは開発がすでにストップしているようで、さらに本格的な機能を有するシェアウエア版の公開も今はされていないようです。残念。

実際のスクリプトは、例えば次のようになります。

<スクリプト例>

Option LogPath="D:\soft\uwsc\log\uwsc.log"  // ログファイルの指定 print文で出力したメッセージはこのファイルに保存されます
Option LogFile=3  // 1:ログ出力しない, 2:日付(時分秒)付けない, 3:日付(時分秒)を付ける
 
FightCount = 5 // この例では1ターンで5回戦闘を繰り返します
print "30秒後に自動処理が開始します"
print "イベントステージ 5回"
sleep(30)
 
print "***** Chrome 起動 *****"
ChromeID = EXEC("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe --new-window --start-maximized http://xxxx.jp//game/xxxx")
 
sleep(5)
 
print "ホーム位置セット"
call .\ホーム位置セット.UWS
 
print "イベントステージ用デッキ選択"
call .\デッキ選択.UWS
 
sleep(3)
 
print "イベントステージ選択"
call .\イベントステージ選択.UWS
 
for i = 1 to FightCount
  print "ステージ攻略 " + i +"回目 start"
  call .\ステージ攻略.UWS
  print "ステージ攻略 " + i +"回目 end"
 
  KBD(VK_SNAPSHOT,CLICK,2000) // 戦闘結果の画面キャプチャ
  sleep(5)
next
 
print "報酬受け取り"
call .\イベントステージ報酬受け取り.UWS
 
print "***** Chrome 終了 *****"
KBD(VK_ALT,DOWN,1000)
KBD(VK_F4,CLICK,200)
KBD(VK_ALT,UP,200)

興味のある方はネットでUWSCを調べてみてください。

なお、普段からOSS戦略を担当しているのもあって、当然、SeleniumとかSikuliなどのOSSで実装することも考えました。でも、ゲーム自体がFlashで作成されているため、あまり合わないんですよね。

例えば、SeleniumはWindowハンドルで画面上の部品を識別しますが、Flashは全体でハンドル一つになってしまうため、個々の部品の指定ができないのです。結果、画面上の座標でボタン等を指定することになり、そのような用途で使いやすいUWSCを選ぶことになりました。ネット上にUWSCでのゲーム攻略参考サイトがあったのも大きな理由です。

このようにして自動化した結果、私が会社でまじめに働いている最中も、家でガシガシとPCがゲームをクリアしてくれています。そうです、とうとう自分ではゲーム自体をプレイしなくなってしまったのです。
それを見た奥さんからは「こんなんで、何が楽しいの?」という、ありがたいお言葉をいただいています。

これだけ頑張った結果でも、最高で4位どまりでした。上位ランカー恐るべし。ただ、個人戦のほかに、ギルドと呼ばれるチームに分かれてのランキング戦もあり、私がギルドマスターを務めるチームは大会で2回優勝しています。まあ、私の自動化が云々というよりも、個人ランキング1位を取る人達を二人も擁しているということが一番大きな勝因ですけどね。これもまあ、人徳ということで。

というわけで、あまりにゲームにはまりすぎて、とうとう自分ではゲームプレイしなくなったというお話でした。

なお、私は人間レベルでの動作しかしないように気を付けていますが、あまりにも非人間的な動作をさせると、ゲーム会社のシステムが検知して自動的にそのアカウントを無効(通称、垢BAN)にするということがあるようです。もしこの記事を読んで試してみたいと思った方は自己責任でお願いします。3,000万円つぎこんだアカウントが無効になっても責任取れませんので。

それではまた、機会がありましたらお会いしましょう!!

追伸:この原稿を書いている最中に、このゲームのサービス終了のアナウンスがありました。ショック( T △ T )!
まあ、ゲームの自動化自体グレーな部分がありますので、これを機会に本システムの運用は終了です。

関連記事

  1. ランニングコストゼロで作るスマートホームコントロール(ラズパイとNod…

  2. IoT x 料理(Raspberry Pi+Groveリレー+1wir…

  3. 金曜日に届いたFitbit Inspire HRで週末2つアプリを作っ…

  4. M5Stack(マイコン)+絶対圧センサーで応援してくれるエクササイズ…

  5. SORACOM LTE-M Buttonで飲み会に行くことを妻に通知す…

  6. コンテナに入れてみる

  7. IoT奮闘記 ~なめこから始まるIoTシステム構築~

  8. 観葉植物とお話しよう!(Wio NodeとGrove土壌水分センサ)

PAGE TOP