マイコン ティアキン ミネルの素材増殖コード

Ver1.1.1以前のミネルゴーレムの増殖をマイコンで動かすためのコードを書いておきます

下準備
・全素材を5個以上確保(1素材201ループのため素材2個以上あれば大丈夫かも)
・赤い月が来ない地下にいく(精錬ゴーレムがいる廃坑あたりがおすすめ)
・素材並び替えを種類順にしてメニューを閉じる
・ゴーレムに搭乗
・回収の邪魔になりそうな他の秘石はオフにしてゴーレムだけにしておく

やっていること
メニューを閉じるときに並び替え変更でカーソルが左上にリセットされるのだが、アイテムを拾うと拾ったアイテムにカーソルが設定される
しかし1素材201ループでカンストすると拾えなくなりカーソルは左上にある状態になる
201ループが終わったタイミングでカーソルを合わせることをしている
カーソルは下に移動するようにしている

ちなみに201ループで13分33秒を要する
素材は全部集めると1列目が51行
2列以降は50行になる(多分)

懸念点
カンバリカブトとツルギカブトは3~4個しか回収できない挙動のため、条件分岐しないとずれるので別に対応が必要

私だけの環境かもしれないがモニターの出力切り替えをしたタイミング?でゴーレムから降りる現象が起こった
setup()が発火しているのだろうか、謎だ
そのためモニターはつけっぱなしにして半日起きに1列ずつ走らせた

メモリ?キャッシュ?のリセットは赤い月で行っているらしい噂を聞いた
ポケモンなどは長時間起動しているだけでソフトが強制終了するので
それが怖く5列一気にはやらなかった


1列目で実際に動かしたコード
3行目のyは任意に設定

 #include  <NintendoSwitchControlLibrary.h>
int cnt = 0;
int y = 0;
void setup() {
pushButton(Button::B, 1000, 3);
}

void loop() {
pushButton(Button::A, 50);
pushButton(Button::A, 50);
pushButton(Button::A, 50);
pushButton(Button::A, 50);

  pushButton(Button::PLUS, 200);

  if(cnt > 200){
y++;
pushHat(Hat::DOWN, 300, y);
cnt = 0;
}

  pushButton(Button::A, 100);
pushHat(Hat::DOWN, 100);
pushButton(Button::A, 50);
pushButton(Button::A, 50);
pushButton(Button::A, 50);
pushButton(Button::A, 50);
pushButton(Button::A, 50);

  SwitchControlLibrary().pressButton(Button::Y);
SwitchControlLibrary().pressButton(Button::B);
SwitchControlLibrary().sendReport();

  delay(50);

  SwitchControlLibrary().releaseButton(Button::Y);
SwitchControlLibrary().releaseButton(Button::B);
SwitchControlLibrary().sendReport();

  delay(500);
cnt++;pushButton(Button::A, 50);

}


実際に動かしたコード(2列目以降)
4行目のxを書き換えて1列を一括で増殖

 #include  <NintendoSwitchControlLibrary.h>
int cnt = 0;
int y = 0;
int x = 1;
void setup() {
pushButton(Button::B, 1000, 3);
}

void loop() {
pushButton(Button::A, 50);
pushButton(Button::A, 50);
pushButton(Button::A, 50);
pushButton(Button::A, 50);

  pushButton(Button::PLUS, 200);

  if(cnt > 200){
y++;
pushHat(Hat::RIGHT, 300, x);
pushHat(Hat::DOWN, 300, y);
cnt = 0;
}

  pushButton(Button::A, 100);
pushHat(Hat::DOWN, 100);
pushButton(Button::A, 50);
pushButton(Button::A, 50);
pushButton(Button::A, 50);
pushButton(Button::A, 50);
pushButton(Button::A, 50);

  SwitchControlLibrary().pressButton(Button::Y);
SwitchControlLibrary().pressButton(Button::B);
SwitchControlLibrary().sendReport();

  delay(50);

  SwitchControlLibrary().releaseButton(Button::Y);
SwitchControlLibrary().releaseButton(Button::B);
SwitchControlLibrary().sendReport();

  delay(500);
cnt++;pushButton(Button::A, 50);

}

左上スタートで理論上、全素材999にするコード
実際に動かしておらず
2日半かかるためコードの調整できない人は非推奨

 #include  <NintendoSwitchControlLibrary.h>


int cnt = 0;
int y = 0;
int x = 0;
int limit = 200;
void setup() {
  pushButton(Button::B, 1000, 3);
}

void loop() {
  pushButton(Button::A, 50);
  pushButton(Button::A, 50);
  pushButton(Button::A, 50);
  pushButton(Button::A, 50);
  
  pushButton(Button::PLUS, 200);

  if(cnt > limit){
    y++;
    if(!x){
      if(y > 50){
        y = 0;
        x = 1;
      }
    }
    if(x){
      if(y > 49){
        y = 0;
        x++;
      }
      pushHat(Hat::RIGHT, 300, x);
    }
    if(y){
      pushHat(Hat::DOWN, 300, y);
    }

    if((y == 20 && !x) || ((y == 19) && (x == 4))){
      limit = 299;
    } else {
      limit = 200;
    }
    cnt = 0;
  }
  
  pushButton(Button::A, 100);
  pushHat(Hat::DOWN, 100);
  pushButton(Button::A, 50);
  pushButton(Button::A, 50);
  pushButton(Button::A, 50);
  pushButton(Button::A, 50);
  pushButton(Button::A, 50);

  SwitchControlLibrary().pressButton(Button::Y);
  SwitchControlLibrary().pressButton(Button::B);
  SwitchControlLibrary().sendReport();

  delay(50);

  SwitchControlLibrary().releaseButton(Button::Y);
  SwitchControlLibrary().releaseButton(Button::B);
  SwitchControlLibrary().sendReport();

  delay(500);
  cnt++;

  pushButton(Button::A, 50);

}

カーソル移動のテスト用コード(やる必要なし)
上のコードのカーソルが列を切り替えて移動するか、ガンバリカブト、ツルギカブトで条件分岐できているかの挙動確認
2列目までは走らせてみて問題なく動いたので上のも動くと思う

 #include  <NintendoSwitchControlLibrary.h>

int cnt = 0;
int y = 0;
int x = 0;
int limit = 200;
void setup() {
  pushButton(Button::B, 1000, 3);
}

void loop() {

    y++;
    if(!x){
      if(y > 50){
        y = 0;
        x = 1;
      }
    }
    if(x){
      if(y > 49){
        y = 0;
        x++;
      }
      pushHat(Hat::RIGHT, 300, x);
    }
    if(y){
      pushHat(Hat::DOWN, 300, y);
    }

    if((y == 20 && !x) || ((y == 19) && (x == 4))){
      limit = 299;
      pushButton(Button::PLUS, 200);
      pushButton(Button::PLUS, 200);
      pushButton(Button::PLUS, 200);
      pushButton(Button::PLUS, 200);
      pushButton(Button::PLUS, 200);
      pushButton(Button::PLUS, 200);
    } else {
      limit = 200;
    }
  
  pushButton(Button::Y, 100);
  pushButton(Button::Y, 100);
  pushButton(Button::Y, 100);

}

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