lefmarna / NintendoSwitchControlLibrary

A library for microcontrollers that uses Arduino to automate Nintendo Switch games.
MIT License
87 stars 15 forks source link

剣盾孵化(親を途中で変更)自動化方法質問について #23

Open soryu39173917 opened 7 months ago

soryu39173917 commented 7 months ago

はじめまして、Xフォローさせていただきました。そりゅと申します。 こちらのページは初利用のため不備がありましたら申し訳ありません。 いつも勝手ながらレフマーナさん公開の剣盾自動化を使用しております。

今更ながらですが、剣盾自動化についていくつかお聞き出来ればと思います。 今剣盾にてオシャボ個体の卵受け取りを大量に予定しているのですが、 親を途中で変え大量に卵を受け取る方法がないか模索中です。 Leonardoにて非画像認識自動化を考えておりますがどこから手をつけたら良いのか悩んでいる状況です…。 Arduino言語に関して知識がなく余計な関数等をいじってしまう可能性もあり質問出来ればと思います。

以下今回の作業にて考えていること レフマーナさん公開の auto-hatch-eggs に以下処理を組み込みたいと考えてます。

1a回数卵を受け取ったら親を変える

2親を5回変えたら1BOX分Rで移動

3Rで移動したらaカウントをリセット

410BOX程度受け取ったらスリープにて終了

。 まだ、構想段階ですがこのように考えてます。 事前配置は元のプログラム+孵化する親個体の事前配置のみ考えてます。 画像詳細に関してはお返事がありましたらXまたはこちらにてお送りいたします。 個人で挑戦したい気持ちもあるのですが、可能であればご依頼という形も希望したいです。

まだまだふわふわとした状況ですが、何かしらご助言貰えるととても嬉しいです。 よろしくお願いいたします。

soryu39173917 commented 7 months ago

また、必要な情報に関してはコメントがあれば何でもお答えいたします。 まだ未撮影ではありますが、行動に関してある程度決めているで 録画してそちらをもとに既存プログラムへの追記など教えてもらえますと大変助かります。

lefmarna commented 7 months ago

soryu39173917 さん、はじめまして!

プログラムを利用いただきありがとうございます!

可能であればご依頼という形も希望したいです。

ご依頼を賜ることはできません。

私が作るプログラムは「自分でも使いたい!」が動機となっているのですが、個人的に剣盾で親を変えつつ大量に孵化を行うというシチュエーションがほとんどないため、腰があがらないです。。。

まだまだふわふわとした状況ですが、何かしらご助言貰えるととても嬉しいです。 よろしくお願いいたします。

「親を5回変えたら1BOX分Rで移動」の意味合いが掴めてないので完全にイメージでしかないのですが、親を管理するボックスをタマゴを預けだす最初のボックスの1つ左のボックスにまとめておくのは作りやすいのかなとは思ってますね。

親を入れ替えるたびに、変数をインクリメントしておいて、その変数の値に応じてカーソルの入力を制御したりすればいいのかなとは思います。

親を入れ替えたあとはボックスは常に預けだす最初のボックス位置まで戻ることを意識すると、考えることが少なくなってプログラム組みやすいと考えてます。

soryu39173917 commented 7 months ago

お返事ありがとうございます! かしこまりました、とても限定的な条件で誰もがやりたい!とはならないですもんね笑 こちらは自身にて少し挑戦してみようと思います。その上行き詰まった場合等はコメントしてもよろしいでしょうか…?

また以下の親を5回変えたら1BOX分Rで移動は画像の配置にて考えております。

またアドバイスありがとうございます。 画像添付できることを今知りまして状況の説明としてお送りいたします。

画像1 自動化開始前配置 ソーナンスの上空欄は 既に親を最初のみ預けた状態からスタートの為

画像2 卵を5回受け取った後親を回収した段階の配置

左端に最初の親配置右端に卵受け取り済みの親が自動的に配置を考えております。

IMG_1604 IMG_1603

最後にいくつか質問なのですが 公開のauto-receive-eggsにて卵を5回受け取った際にカウントをつける+親変えの際のプログラムのどこに記載すればいいか分かりません…。 基本上から下に順序ごとに書いていけばいいのでしょうか?

下記プログラムの for (int egg_num = 0; egg_num < 5; egg_num++) {
はどのような処理をしているのでしょうか? 以下auto-receive-eggsの1部記載になります。

// 実際にループ内で呼び出す関数 void receiveEggs(int box_line) { // 手持ちが1体の状態から、卵受け取り→孵化を繰り返していく for (int egg_num = 0; egg_num < 5; egg_num++) { moveToInitialPlayerPosition(); getEggFromBreeder(); pushButton(Button::X, 500); moveToInitialPlayerPosition(); // 野生ポケモンとのエンカウントを避けるため初期位置から少し移動する tiltLeftStick(Stick::MAX, Stick::NEUTRAL, 500); runAround(INTERVAL); pushButton(Button::X, 500); } よろしければお返事お待ちしております。

lefmarna commented 7 months ago

その上行き詰まった場合等はコメントしてもよろしいでしょうか…?

実際に動作確認や検証をしなくても済むレベルの内容で、かつ簡単に返せるものであれば大丈夫です。動作確認求められるもの等、負荷が高いものは厳しいです。

最初なので濃いめに回答いたしますが、質問は1行2行で返せるような内容で想定しています。

下記プログラムの for (int egg_num = 0; egg_num < 5; egg_num++) { はどのような処理をしているのでしょうか?

剣盾の孵化の仕様がぱっと思い出せないのでうろ覚えではあるのですが、タマゴを5個受け取る記述だったはずです。( 5回受け取りを試みるだけで、タマゴができていないときは受け取れないです)

moveToInitialPlayerPosition() -> 空を飛ぶ getEggFromBreeder() -> 預かりやからタマゴ受け取り pushButton(Button::X, 500) -> メニュー開く moveToInitialPlayerPosition() -> 空を飛ぶ // 野生ポケモンとのエンカウントを避けるため初期位置から少し移動する tiltLeftStick(Stick::MAX, Stick::NEUTRAL, 500); runAround(INTERVAL); -> ぐるぐる回る pushButton(Button::X, 500); -> メニュー開く

1回あたり1個で、これを5回(炎の体以外の手持ち分が5つなので)ループします。

下記のコードと合わせて6×5で1ボックス単位で処理を行います。

    for (int box_line = 0; box_line < 6; box_line++) {
        receiveEggs(box_line);
    }

このコードだと6×5の意識をする必要はないのですが、他のコードから流用したためこのような形になっていたという背景があったはずです。

公開のauto-receive-eggsにて卵を5回受け取った際にカウントをつける+親変えの際のプログラムのどこに記載すればいいか分かりません…。 基本上から下に順序ごとに書いていけばいいのでしょうか?

上記よりカウンター自体はすでにありそうですね。egg_numをうまく活用すればいけるかなと思います。

ボックスレベルのカウントはなさそうなので必要なら用意する必要がありますが、egg_numが手持ちのタマゴの数、ボックスの預ける列はbox_lineって感じだったはずです。(今回のコードではbox_lineは使ってないのですが、値として機能はしているので、そちらも参照いただけると思います)

soryu39173917 commented 7 months ago

お返事ありがとうございます。 1部改変しコンパイルエラーが出ないところまで出来ましたが想定外の動きばかりして苦戦中です。 上の説明を再度確認し今後頑張ってみようかと思います。 また、それでも不明な点があれば今後はできる限り簡略化しお聞き致します。 この度はありがとうございました!

soryu39173917 commented 7 months ago

お世話になっております。先日はご返信ありがとうございました。 返答+レフマーナ様のページ等を見ながら挑戦したところ時間はかかりましたが、無事完成し解決いたしました。卵受け取りの処理のみの用意なので+孵化はレフマーナ様公開の以下ブログの自動化を拝借して孵化を予定しております。

https://pokemonit.com/swsh-hatch-eggs-in-the-box/

egg_num のご説明を元に参考にしwhileを複数使用し処理が出来ました!

レフマーナ様含め他の自動化公開者さんのコードも一部使用してる為公開の予定はありません。文章が汚いという点もあり恥ずかしいという理由もありますが…。

今後も個人の範囲で使用のみ予定しております。

Arduino Leonardにて初めて事前設定以外に触れてみてとても良い経験をできました。

また、先日は一方的に質問をし大変申し訳ありませんでした。ご対応頂きありがとうございました。 今後もブログ等参考にし自動化ライフを満喫いたします!