見出し画像

【Arduino Leonardo】ポケモン自動逃がし【ポケモンSV】

はじめに

Arduino LeonardoでポケモンSVのボックス内のポケモンを逃がす動作を自動化しました。
ライブラリはNintendoSwitchControll-masterを使用しています。導入方法等はこちらでは説明しませんのでリンク先や他サイトを参考にしてください。
ポケモンSVは処理落ちやエラー落ち等発生する場合があるため長時間放置するのは自己責任でお願いいたします。

プログラムについて

ライブラリ内のプログラムをSV用にアレンジしたものです。メニューを閉じた状態から指定ボックス分のポケモンを逃がします。

設定、初期位置

話のはやさは「はやい」にしてください。ボックスを開いた時に逃がすボックスの1つ目になる状態でプログラムを実行してください。該当ボックスは全て逃がせるポケモンで埋めた状態にしてください。

この状態でボックスを閉じる

プログラム(コード)

以下コピペしてください。逃がすボックスの数は1としています。お好みで変更してください。
※sleepGAME関数がごっそり抜けていたので修正しました。そんなバカなことある???(自分はスリープさせない派だから判定コード自体消してて気づかなかったっぽい)

#include <auto_command_util.h>

int release_box_set = 1;//逃がすボックス数
int sleepGAMEset = 1 ;//プログラム終了後スリープする場合は1、しない場合は0

void setup() {
  pushButton(Button::ZL, 500, 5);//switchに認識させる為に無駄打ちをしておく
}

//メニューを開きボックスを開く
void BoxOpen(bool first_time = false){
  pushButton(Button::X, 1200);
  if(first_time){//初回のみ実行する
    pushHatButton(Hat::RIGHT, 500);
    pushHatButtonContinuous(Hat::UP, 1500);
    pushHatButton(Hat::DOWN, 500);
  } 
  pushButton(Button::A, 4000);
}

//ポケモンを逃がす選択
void release_pokemon(){
  pushButton(Button::A, 500);
  pushHatButton(Hat::UP, 500, 2);
  pushButton(Button::A, 1000);
  pushHatButton(Hat::UP, 500);
  pushButton(Button::A, 1000);
  pushButton(Button::A, 350, 4);
}

//本体スリープ
void sleepGAME(){
  SwitchController().pressButton(Button::HOME);
  delay(1500);
  SwitchController().releaseButton(Button::HOME);
  delay(200);
  pushButton(Button::A, 500);
}

void loop() {
  BoxOpen(true);//ボックスを開く
  for(int i=0; i<release_box_set; i++){
    for(int release_poke_num = 0; release_poke_num < 30; release_poke_num++){
      // ポケモンを逃がす
      release_pokemon();
      // カーソルを次のポケモンの場所に移動させる
      pushHatButton(Hat::RIGHT, 500);
      if(release_poke_num%6 == 5){
        pushHatButton(Hat::DOWN, 500);
        pushHatButton(Hat::RIGHT, 500);
      }
    }
    //次のボックスに移動する
    pushHatButton(Hat::DOWN, 500, 2);
    pushButton(Button::R, 2000);
  }
  if(sleepGAMEset){ sleepGAME(); }//本体スリープ
  while(1){ delay(10000); }
}

//本体スリープ
void sleepGAME(){
  SwitchController().pressButton(Button::HOME);
  delay(1500);
  SwitchController().releaseButton(Button::HOME);
  delay(200);
  pushButton(Button::A, 500);
}

その他(解説など)

大まかな動きは問題ありませんが入力漏れが発生した場合は謎行動をしてしまうので様子を見ながら行ってください。



この記事が気に入ったらサポートをしてみませんか?