「ツムツムのハートの自動送信がやりたくて、FRepでプログラムを作ったけど、何か上手く動いてくれない。何が悪いのかもよくわからない…」
このような悩みにお答えします。
ハートの自動送信のプログラムの作り方、どのような考え方で作っているのかを詳しく解説しています。
自動送信で使う関数
これから解説する自動送信のプログラムでは、処理をまとめたものを関数に登録しています。関数の名前と処理の内容は、このようになっています。- 一番下へ
ランキングの一番下へスクロール - 長いスクロール、短いスクロール
4人分のスクロール - ハートオール
ハートを受け取り、ランキングへ移動 - ♡送信
画面上のハートを全て送信
関数に登録している処理の詳細はツムツムのハート自動送信のプログラムで使用する関数を紹介【参考】をご覧下さい。
自動送信プログラムの作り方
自動送信プログラムの作り方を解説していきます。操作する手順をイメージしながら、作っていきましょう。こちらが、今回解説する自動送信プログラムです。「マクロ送信」という名前にしています
プログラムの名前は、分かりやすい名前にしておきましょう。
このような操作の順番になるような、プログラムを作っています。
- 一番下までスクロール
- ハートをまとめて受け取る
- 4人分のハートの送信
- 4人分のスクロール
- 3と4を繰り返す
- ハートをまとめて受け取る
コインは、ハートをもらってから60分以内に受け取るともらえます。このプログラムは、65分毎に繰り返す想定で作っています。
65分にしている理由は【初心者向け】Frepの基本機能を解説【これだけは覚えよう】で詳しく説明しています。
ハートの送信後にハートを受け取らなければ、前回の自動送信でハートを受け取ってから、5分経つまでのハートはコインがもらえません。
こんな感じのイメージです。
9時に自動送信を開始すると、次は65分後の10時5分に開始されます。60分以内のハートは、コインがもらえます。10時5分にハートを受け取ると、9時5分~10時5分の間のハートは、コインがもらえます。
赤色の部分の9時~9時5分の間に受け取ったハートは、60分を超えてるのでコインがもらえません。
※厳密には自動送信開始と同時にハートは受け取っていません。一番下までスクロールした後なので、その時間だけ遅くなります。5分間コインが受け取れないのは、同じです。
まずは、一番下までスクロールしてから、ハートをまとめて受け取りをします。
「一番下へ」と「ハートオール」の関数をそれぞれ呼び出して、待機を間に入れています。
続いて、「4人分のハートの送信と4人分のスクロール」を繰り返し、最後に「ハートをまとめて受け取り」をしています。
「え…?何がどうなっているのか、良く分からないんだけど…(泣)」となりますよね。
さすがにこのままでは、理解が追いつかないので、順を追って説明していきます。処理の全体の作りは、このようになっています。
変数の説明
変数とは値を入れておける「いれもの」のようなものです。変わる値を何かに使う時に利用します。この説明では、繰り返した回数を数えるのに使っています。※IT用語では、ループカウンタと呼びます。
「cnt」、「var」の2つの変数を用意します。
- cnt:スクロールした回数
- var:ハート送信した回数
スクロールがズレないようにする方法は【重要】ツムツムの自動送信のスクロールがズレないテクニックを解説で詳しく解説しています。
スクロールは、「長いスクロール」と「短いスクロール」の2つを用意しています。
ここで使ってるスクロールは、長いスクロールが1回と短いスクロールが2回でズレないように調整しています。つまり、3回スクロールすればズレがなくなります。
スクロールした回数を数えることで、この調整を行えるようにしています。スクロールの調整の考え方は、後ほどハート送信とスクロールで説明します。
ハートの送信は、スクロールも含め、このような手順となるように作っています。
- 4人分のハート送信
- 4人分のスクロール(長い)
- 4人分のハート送信
- 4人分のスクロール(短い)
- 4人分のハート送信
- 4人分のスクロール(短い)
スクロールの回数でも説明した通り、3回スクロールすれば、位置がズレません。この4人分のハート送信とスクロールを3回ずつしたものを、1つのセットしており、このセットを繰り返した回数を数えています。
つまり、4人分のハートを3回繰り返した数を入れるので、12人分のハートを送った回数になります。このハートを送った回数は、ハートを送る人数を調整するのに使っています。ハートを送る人数の調整の考え方は、後ほどハート送信の繰り返しで説明します。
- 文字型:2+1=21
- 数値型:2+1=3
文字型の場合は、数字でも文字として扱われ、文字列を結合した結果になります。
スクロールの回数が1より小さい時は、長いスクロール。1以上は、短いスクロールという作りにしています。スクロールの回数を数える変数は、3回繰り返す前に変数の初期化をしています。それは、3回繰り返すたびに、0回から数え直すという考え方にしているからです。つまり、繰り返す前の変数が0という前提で作っています。
初期化をし忘れると、このような動きになります。
【初期化なし】
- 変数に0をセット
- ■1セット目開始
- 1回目 変数:0 処理:長い 処理後の変数:1
- 2回目 変数:1 処理:短い 処理後の変数:2
- 3回目 変数:2 処理:短い 処理後の変数:3
- ■2セット目開始
- 1回目 変数:3 処理:短い 処理後の変数:4
- 2回目 変数:4 処理:短い 処理後の変数:5
- 3回目 変数:5 処理:短い 処理後の変数:6
2セット目の1回目のスクロールは、長いスクロールにしたいけど、短いスクロールになっています。スクロールの処理で、変数の初期化をし忘れると、1セット目の2回目以降はずっと短いスクロールとなってしまい、どんどんズレが大きくなってしまいます。
では、変数の初期化を入れてみましょう。
【初期化あり】
- 変数に0をセット
- ■1セット目開始
- 1回目 変数:0 処理:長い 処理後の変数:1
- 2回目 変数:1 処理:短い 処理後の変数:2
- 3回目 変数:2 処理:短い 処理後の変数:3
- 変数に0をセット(値の初期化)
- ■2セット目開始
- 1回目 変数:0 処理:長い 処理後の変数:1
- 2回目 変数:1 処理:短い 処理後の変数:2
- 3回目 変数:2 処理:短い 処理後の変数:3
2セット目の1回目のスクロールが、長いスクロールになりました。このような想定外の動きにならないように、値の初期化は、必ずしましょう。
ハート送信とスクロール
ハートの送信とスクロールを繰り返す操作をしています。繰り返す回数とスクロールの調整について解説します。処理の内容としては、4人分のハートの送信とスクロールをする操作になります。スクロールのズレを調整する為に、スクロールを使い分ける条件分岐を入れています。
- 長いスクロール
- 短いスクロール
- 短いスクロール
繰り返し回数を設定する変数は、このように変わります。繰り返す回数を数える為に、処理後に1をプラスしています。
- 処理前:0 処理後:1
- 処理前:1 処理後:2
- 処理前:2 処理後:3
スクロールをする前に、どちらのスクロールを使うのか判断するので、処理前の値で判定します。
0の時は、長いスクロール
1と2の時は、短いスクロール
このようにしたいので、変数が1より小さい時は、長いスクロール。それ以外、つまり1以上の時は、短いスクロールとなるように設定しています。1と2の時は、短いスクロール
より小さい(<)を使っていますが、以下(<=)を使っても問題ありません。「1より小さい」を「0以下」にしても同じ結果になります。どちらを使うかは、好みなのでどちらでも構いません。やりたい事が実現出来れば、問題ありません。
という事で、この4つの作り方であれば同じ結果になります。
- 1より小さい:長い それ以外:短い
- 0以下 :長い それ以外:短い
- 2より小さい:短い それ以外:長い
- 1以下 :短い それ以外:長い
同じ(==)の判定は、FRepがバグっており、正常に判定できません。使わないようにしましょう。
ハート送信の繰り返し
ハート送信の繰り返す処理について解説します。処理の内容としては、12人分のハートを送った回数が、40回以上になった時に、次の処理へ進み、それ以外は、ハート送信を繰り返すようにしています。
12人分のハートを送った回数が40回(以上)になると、ハート送信の処理を終えて次の処理になるようにしています。つまり、40回まではハートの送信を繰り返します。
12人分のハートを送った回数が40回なので、12人×40回で480人となりそうですが、正解は478人です。ランキングの一番下は3人の表示なので、マイナス1となり、さらに自分を除くので、合計からマイナス2した人数になります。
繰り返す回数に設定する値は、ランキングに表示されている人数より少なくならないようにだけ気をつけて下さい。ハートの送信漏れが発生します。
結果としては、送信できる人数は、40回に納まる人数であれば100回でも1000回でも同じです。ですが、無駄な処理が動き続けます。
実際に動かしてみると分かりますが、画面にあるハートを探してなければ、スクロールするという操作を繰り返し続けます。つまり、繰り返す回数が多すぎると、全員にハート送信が終わっているのに、ずーっとスクロールが動き続けます。繰り返す回数は、ランキングの人数に合わせるような設定にしておきましょう。
プログラムとして完成した後に、状況によって修正するのは、正直ダメです。実は、この手順には入れていませんが、繰り返す回数を変更しなくても良い方法があります。
「スクロールの後に、ランキングの1位が表示されていたら、ハート送信を終わる」という処理を追加すれば、繰り返す回数の調整は不要です。繰り返す回数は多めに100回とかにしておけば良いです。
画像認識を使えば簡単なので、お試しあれ。
ハートをまとめて受け取り
最後になりますが、ハートをまとめて受け取りをしますハート送信の繰り返した回数が、40回以上になるとハートをまとめて受け取り、処理を終了します。
まとめ
ハートの自動送信のプログラムの作り方と考え方をを紹介しましたが、いかがでしたか?結構見ごたえのあるボリュームだったと思います。できる限り分かりやすいように、解説したつもりではいますが、わからない事があれば、コメント欄に質問して下さいね。
プログラムに正解はないので、これを参考にアレンジして、オリジナルの自動送信プログラムを作って下さい。
最後までご覧頂き、ありがとうございました。
[…] では、自動送信のプログラムを作りましょう。処理の流れをイメージしながら、準備した関数を組み合わせれば、プログラム完了までもう少しです! 自動送信のプログラムの作り方はツムツムのハート自動送信のプログラムを徹底解説【手順を公開】をご覧下さい。 […]
はじめまして。質問致します。
ハート送信済み(ハートが黒くなっている時)10番のifで型エラーcntと出て止まってしまいます。
再起動したり、削除して入れなおしたりと色々試しましたがエラーがなおりません。
関数は同じように入れたのですが…。
どうしたらいいか教えてください。お願いします。
すみません。先ほどコメントしたものなのですが・・・。
別の部分の関数がcntではなくcutになっていたことに気が付きました!
こちらを修正したらすべて問題なく動作しました。
コメント削除でかまいません。お騒がせ致しました。
コメントありがとうございます。
自己解決されたようで良かったです。
変数名のミスというのはプログラミングを行う上でありがちなので、
少しずつ動作確認を行い間違っている箇所が特定出来れば良いかと思います。