お金を集めました。
ポケモンDX - Log
きのみを集めました。
ポケモンDX2 - Log
バトルに向けて最後の課題。テラスタルです。テラピースはお金で解決できません。今回はこれを集めます。マイコンが。
方針。
- 星3と星4のテラレイドバトルをおこなう*1
- ↑を一生繰り返す
星4までのテラレイドバトルであればテツノカイナのインファイト連打で勝てます。星5以上になると弱点を付くなり、補助技を使うなり、工夫する必要がでてくるかと。それにはプログラムを組むのにも時間がかかるし、何より処理が失敗するリスクが増えてしまいます。また、レイドバトルの時間も増えそうです。結局、星4以下を刈り取る方がトータルで効率的だと思います。
というわけでメイン処理。
star3 | star4 |
---|---|
# レイドを調べる self.press(Button.A, wait=2.0) while not self.isContainTemplate('Raid/star3.png', 0.8, use_gray=False) \ or not self.isContainTemplate('Raid/star4.png', 0.8, use_gray=False): print('raid not found') self.press(Button.B, wait=1.0) self.change_date() self.wait(2.0) self.press(Button.A, wait=2.0) # 「ひとりで挑戦」を選択してレイドバトル self.press(Hat.BTM, wait=1.0) self.press(Button.A, wait=1.0) self.raid_battle()
use_gray
はデフォルトでTrueですが、誤検知が発生したためFalseとしています。
レイドがない場合はchange_date
で日付を変更します。
datetime_settings |
---|
print('change date') # ホーム画面 > 設定 > 本体 self.press(Button.HOME, wait=1.0) self.press(Hat.BTM) self.press(Hat.RIGHT) self.press(Hat.RIGHT) self.press(Hat.RIGHT) self.press(Hat.RIGHT) self.press(Hat.RIGHT) self.press(Button.A, wait=1.5) self.press(Hat.BTM, duration=2.0, wait=1.0) self.press(Button.A, wait=1.0) # 日付と時刻の設定を探す while not self.isContainTemplate('Raid/datetime_settings.png', 0.8): self.press(Hat.BTM, wait=1.0) self.press(Button.A, wait=1.0) # 日付を1日進めてゲーム画面に戻る self.press(Hat.BTM) self.press(Hat.BTM) self.press(Button.A, wait=1.0) self.press(Hat.RIGHT) self.press(Hat.RIGHT) self.press(Hat.TOP) self.press(Button.A) self.press(Button.A) self.press(Button.A) self.press(Button.A) self.wait(0.5) self.press(Button.HOME, wait=1.0) self.press(Button.HOME, wait=1.0)
さて、最後に実際の対戦部分ですが、これはインファイト(先頭の技)を連打するだけです。
battle_menu | get_pokemon |
---|---|
print('raid battle start') self.wait(10.0) while True: # 技選択画面 if self.isContainTemplate('Raid/battle_menu.png', 0.8): print('atack') self.press(Button.A, wait=0.5) self.press(Button.A, wait=0.5) self.press(Button.A, wait=0.5) # 勝利画面 if self.isContainTemplate('Raid/get_pokemon.png', 0.8): print('win') # つかまえない self.press(Hat.BTM, wait=0.5) self.press(Button.A, wait=0.5) # 報酬を受け取って終了 self.wait(5.0) self.press(Button.A, wait=1.0) break # 負けることはない # if self.wait(3.0) print('raid batlle end')
…待てよ?インファイトはゴーストには効かない…?そう思ってしばらく対戦を眺めていたら、味方が倒してくれていました。CPUって役に立つんだ。
待機時間は例のごとくsegmentation faultが発生しないようisContainTemplate
の処理回数を抑えるために入れています。ここで朗報。リアルタイム表示をオフにすることでsegmentation faultの発生を抑えられる気がしてきました。その場合、現在の画面が見えないので困っちゃいそうですが、HDMI分配器で別のディスプレイに出力することで解決しました。
またハードウェアを買ったので今日の食費はないし、そもそもご飯を食べるスペースがありません…
1回のレイドバトルで大体3個くらいテラピースが手に入ります。1時間で10戦くらいはこなしてくれるので、全18タイプを999個集めるには600時間くらいかかる計算です。1ヶ月くらい。先は長いぜ。
何日か走らせてみたところこんな感じ。
たまに失敗するので要介護ですが、リモートワークなので問題ありません。とくに修正するつもりなし。
それではまた1ヶ月後に👋
*1:ストーリークリア後は星3以上のレイドしか出現しないようでした。