12/9(月) 応用科学学会シンポジウムで自動運転に関する講演を担当します☆彡

7-20. Raspberry Piでスマホゲームの単調作業を自動化

はじめに

スマホのゲームには、レベル上げ等の単調作業がつきものです。プログラムで自動操作してしまえば良いのですが、ソフトウェアによるチートはバレやすく、アカウント停止等のペナルティが課せられる可能性が高いです。

一方で、ハードウェアによるチートは、規約的・倫理的な問題はさておき、運営にバレる可能性はぐっと低いです。やるならハードチートですね!(良い子は真似しないでください)

こちらにパズドラの自動操作の動画を引用させていただきます。ハードで正確なタップをしつつ、裏ではパズルの得点が高くなるような手順を計算しているようです。理想的なチートと言えるでしょう!

全自動パズドラロボ作ってみた/Automatic Puzzle & Dragons robot

今回はシンプルな構成で、「画面の2箇所を交互にタップし続ける」だけのマシンを作ってみましょう。

遊ぶゲーム

だんじょんクエスト」というゲームがあります。転生しながら能力やスキルを磨き、インフレする敵をガンガン倒していくRPG(?)です。

だんじょんクエスト - Google Play のアプリ
ダンジョン攻略型RPG登場! 100個を超えるエリアと、150体を超える強力なモンスターが待ちかまえるダンジョンを攻略せよ!

ただしこのゲーム、終盤になると「3ヶ月かけて1つのスキルを作成し1ステージ進む」ような展開になります(誇張表現ではありません)。レビューによれば、これを「作業」だと思う人には向いていないとのこと。ストイックなRPGです。

私もラスボスの一つ前のステージまで来ました。この前のステージでは敵を瞬殺できますが、このステージでは瞬殺されます。明らかにインフレ率がおかしいです。

攻略サイトもかなり見ましたが、もう

  • 3ヶ月(?)かけて最強スキルを作成する
  • 1ヶ月(?)かけてしょうごうのレベルを上げる

しかやれることがありません。両方とも極めて単調な作業ですが、特に後者は「画面の2箇所を交互にタップし続ける」だけの作業を数十時間?数百時間?行う必要があります。

詳細は省きますが、画面の①の部分をタップしてどうくつを選択し、②でステージに入ります。②で攻撃して4体の敵を倒し、①または②で戦闘終了後のメッセージを送ります。

スタミナの最大値は28500で、1回の攻略で10消費しますので単純計算で1日あたり2850回繰り返せます。しょうごうのレベルは、条件を満たした戦闘の終了時に極めて低確率で上昇します。確率ですから、この作業を1週間続ければよいのか、1ヶ月続ければよいのか、とにかく果てしない作業となります。

余談ですが、筆者はスマホのゲームを選ぶときは「グラフィックのショボさ」を重視します。最近のソシャゲと呼ばれるようなゲームは、グラフィックとボイスばかり豪華で、肝心のゲームシステムは・・・

用意するもの、ハードウェア

Arduinoでもできそうですが、今回はラズパイを用います。ラズパイの初期設定、SSH接続等はググって頑張ります。

  • Raspberry Pi 3(どのモデルでも良い)
  • タッチペン(100円ショップ)
  • サーボモータ(SG-90、なんでも良い)

ハードウェアの完成形はこちらです。

2つのタッチペンをクリップで挟み、グルーガン等でサーボモータに固定します。

タッチペンを扱うコツ

さて、実は、静電容量式のタッチペンは指で直接持たないと画面が反応しません。

電子工作でタッチペンを使用するときは、ペンの持ち手をアースしてやる必要があります。写真の黄色い丸のところにアース線をぶっ刺しました。金属製クリップを通して、赤い線の部分がアースされます。

タッチペンをアースした場合。

コード

こちらのサイトを参考に、「pigpiod」をインストールします。RPi.GPIOで制御してもよいのですが、サーボを制御するためのパルス波が安定しないようでチャタリングします。pigpiodならかなり安定するようです。

sudo apt-get install pigpio

pigpiodを準備します。(ラズパイを起動するたびに1回実行)

sudo pigpiod

Pythonで繰り返し処理を行います。Python2でも実行可。サーボのニュートラルポジションには個体差があるので補正値を用意しました。制御線はGPIOの14ピンに挿しています。

# -*- coding: utf-8 -*-
import time
import pigpio

#傾きの補正
hosei = 160

pi = pigpio.pi()

while 1:
    #中央で待機
    pi.set_servo_pulsewidth(14, 1500 + hosei)
    time.sleep(0.70)
    
    #右に一振り
    pi.set_servo_pulsewidth(14, 1500 + hosei + 150)
    time.sleep(0.15)
    
    #中央で待機
    pi.set_servo_pulsewidth(14, 1500 + hosei)
    time.sleep(0.70)
    
    #左に一振り
    pi.set_servo_pulsewidth(14, 1500 + hosei - 150)
    time.sleep(0.15)

無限ループですので、最後はCtrl+Cで強制終了します。

完成

傾き補正値や振り幅を微調整します。土台はセロテープ台です。

良さそうですね!

ゲームをプレイしてみます。

ほとんど最速に近いペースで攻略し続けてくれます!(ステージ終了後に1回だけロスタップがあります。)

検証開始

さて、開始時の5人のしょうごうレベルはこちらです。































ジュリア 2 2 3 2 1 3
フィオーレ 1 1 1 4 2 1
ラヴィーナ 1 1 2 2 1 1
ノルマ 1 2 1 1 1 1
エミリア 1 2 1 1 1 2
カラコール
陣形 2

黄色の部分が上がる条件を満たしています。特にエースであるジュリアちゃんとエミリアちゃんのこわしや・たくみ・テクニシャンが鍵となりますので、これらはレベル5以上になってほしいです。ついでに陣形「カラコール」のレベルも上がると嬉しいです。

検証終了

毎日12時間ほど放置、5日間くらいやってみました。現在のしょうごうレベルはこちらです。































ジュリア 2 3 5 6 1 7
フィオーレ 1 1 7 6 2 1
ラヴィーナ 1 3 7 6 1 5
ノルマ 1 2 8 8 1 1
エミリア 1 3 7 4 1 8
カラコール テスレギオー はいすいのじん かくよくのじん
陣形 9 9 9 9

オレンジが上昇した部分です。時々配置を変えたりしたので予定外の部分も上がっています。めっさ強くなりました!

また、地味にルナピースが6個→218個に増えました。ルナピースはスキル合成で消費するもので、敵がごく低確率でドロップします。これだけあればもう何回かスキル合成ができます。

SNS等でお気軽にご連絡ください

※当ブログに関することは何でもご相談・ご依頼可能です(Servicesになくても)
※TwitterはFF外の場合はDMではなく返信orメンションでお願いしますm(_ _)m

情報発信しています

質問・コメントはSlackやDiscordでお気軽に

勉強会の告知はこちらで

Raspberry Pi / Arduino
この記事を書いた人

博士(理学)。専門は免疫細胞、数理モデル、シミュレーション。米国、中国で研究に携わった。遺伝的アルゴリズム信者。物価上昇のため半額弁当とともに絶滅寸前。

この記事をシェアする
Vignette & Clarity(ビネット&クラリティ)
タイトルとURLをコピーしました