ツムツムのハート自動送信のプログラムを徹底解説【手順を公開】

投稿日:2021年3月18日 |最終更新日:

Pocket

「ツムツムのハートの自動送信がやりたくて、FRepでプログラムを作ったけど、何か上手く動いてくれない。何が悪いのかもよくわからない…」

このような悩みにお答えします。

ハートの自動送信のプログラムの作り方、どのような考え方で作っているのかを詳しく解説しています。

自動送信で使う関数

これから解説する自動送信のプログラムでは、処理をまとめたものを関数に登録しています。関数の名前と処理の内容は、このようになっています。

  • 一番下へ
     ランキングの一番下へスクロール
  • 長いスクロール、短いスクロール
     4人分のスクロール
  • ハートオール
     ハートを受け取り、ランキングへ移動
  • ♡送信
     画面上のハートを全て送信

関数に登録している処理の詳細はツムツムのハート自動送信のプログラムで使用する関数を紹介【参考】をご覧下さい。

自動送信プログラムの作り方

自動送信プログラムの作り方を解説していきます。操作する手順をイメージしながら、作っていきましょう。

待機について
待機は、前の処理が終わる前に、次の処理が始まらなくするように、処理の間に待ちの時間を設けています。説明では、待機の時間を1.0秒としていますが、状況に応じて変更して下さい。

こちらが、今回解説する自動送信プログラムです。「マクロ送信」という名前にしています

プログラムの名前は、分かりやすい名前にしておきましょう。

このような操作の順番になるような、プログラムを作っています。

  1. 一番下までスクロール
  2. ハートをまとめて受け取る
  3. 4人分のハートの送信
  4. 4人分のスクロール
  5. 3と4を繰り返す
  6. ハートをまとめて受け取る

ハートの受け取りはなぜ2回?
この手順では、ハートの送信をする前後で、ハートの受け取りをしています。2回にしている理由は、ハートの受け取りを1回にすると、コインを全て受け取れないからです。

コインは、ハートをもらってから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:ハート送信した回数
※スクロールした回数を0に設定し直す必要があり、順序を逆にしています。後ほどハート送信の繰り返しで、解説しています。

スクロールした回数
「cnt」は、スクロールした回数を数えるのに使います。スクロールした回数を数える理由は、スクロールのズレが起こらないようにする為です。

スクロールがズレないようにする方法は【重要】ツムツムの自動送信のスクロールがズレないテクニックを解説で詳しく解説しています。

スクロールは、「長いスクロール」と「短いスクロール」の2つを用意しています。
ここで使ってるスクロールは、長いスクロールが1回と短いスクロールが2回でズレないように調整しています。つまり、3回スクロールすればズレがなくなります。

スクロールした回数を数えることで、この調整を行えるようにしています。スクロールの調整の考え方は、後ほどハート送信とスクロールで説明します。

ハート送信した回数
「var」は、ハートの送信をした回数を数えるのに使います。ハートの数ではなく、ハートの送信の操作をした数です。

ハートの送信は、スクロールも含め、このような手順となるように作っています。

  1. 4人分のハート送信
  2. 4人分のスクロール(長い)
  3. 4人分のハート送信
  4. 4人分のスクロール(短い)
  5. 4人分のハート送信
  6. 4人分のスクロール(短い)

スクロールの回数でも説明した通り、3回スクロールすれば、位置がズレません。この4人分のハート送信とスクロールを3回ずつしたものを、1つのセットしており、このセットを繰り返した回数を数えています。

つまり、4人分のハートを3回繰り返した数を入れるので、12人分のハートを送った回数になります。このハートを送った回数は、ハートを送る人数を調整するのに使っています。ハートを送る人数の調整の考え方は、後ほどハート送信の繰り返しで説明します。

変数の型を意識する!
変数には、文字型や数値型といった型の種類があります。回数を数えたい時は、数値型を使います。数字を扱う時は、特に型を意識しておかないと、想定結果が異なってしまいます。

  • 文字型:2+1=21
  • 数値型:2+1=3

文字型の場合は、数字でも文字として扱われ、文字列を結合した結果になります。

変数の初期化を忘れず!
ここで、変数に0を設定している処理を、初期化と呼びます。値に初期値を設定するという意味です。初期化をし忘れると、想定外の動きになります。理由は、前の処理の値が残り続けるからです。

スクロールの回数が1より小さい時は、長いスクロール。1以上は、短いスクロールという作りにしています。スクロールの回数を数える変数は、3回繰り返す前に変数の初期化をしています。それは、3回繰り返すたびに、0回から数え直すという考え方にしているからです。つまり、繰り返す前の変数が0という前提で作っています。

初期化をし忘れると、このような動きになります。

【初期化なし】
  1. 変数に0をセット
  2. ■1セット目開始
  3. 1回目 変数:0 処理:長い 処理後の変数:1
  4. 2回目 変数:1 処理:短い 処理後の変数:2
  5. 3回目 変数:2 処理:短い 処理後の変数:3
  6. ■2セット目開始
  7. 1回目 変数:3 処理:短い 処理後の変数:4
  8. 2回目 変数:4 処理:短い 処理後の変数:5
  9. 3回目 変数:5 処理:短い 処理後の変数:6

2セット目の1回目のスクロールは、長いスクロールにしたいけど、短いスクロールになっています。スクロールの処理で、変数の初期化をし忘れると、1セット目の2回目以降はずっと短いスクロールとなってしまい、どんどんズレが大きくなってしまいます。

では、変数の初期化を入れてみましょう。

【初期化あり】
  1. 変数に0をセット
  2. ■1セット目開始
  3. 1回目 変数:0 処理:長い 処理後の変数:1
  4. 2回目 変数:1 処理:短い 処理後の変数:2
  5. 3回目 変数:2 処理:短い 処理後の変数:3
  6. 変数に0をセット(値の初期化)
  7. ■2セット目開始
  8. 1回目 変数:0 処理:長い 処理後の変数:1
  9. 2回目 変数:1 処理:短い 処理後の変数:2
  10. 3回目 変数:2 処理:短い 処理後の変数:3

2セット目の1回目のスクロールが、長いスクロールになりました。このような想定外の動きにならないように、値の初期化は、必ずしましょう。

ハート送信とスクロール

ハートの送信とスクロールを繰り返す操作をしています。繰り返す回数とスクロールの調整について解説します。


処理の内容としては、4人分のハートの送信とスクロールをする操作になります。スクロールのズレを調整する為に、スクロールを使い分ける条件分岐を入れています。

繰り返す回数
3回スクロールすれば、位置がズレないスクロールを使っているので、3回繰り返すようにしています。長いスクロールが2回、短いスクロールが3回でズレないスクロールを使うのであれば、5回繰り返すようにして下さい。

スクロールの調整
長いスクロールを1回と短いスクロールを2回したいので、このような順番になる作りにしています。

  1. 長いスクロール
  2. 短いスクロール
  3. 短いスクロール
※スクロールの話なので、一旦ハート送信の処理は除外しています。

繰り返し回数を設定する変数は、このように変わります。繰り返す回数を数える為に、処理後に1をプラスしています。

  1. 処理前:0 処理後:1
  2. 処理前:1 処理後:2
  3. 処理前:2 処理後:3

スクロールをする前に、どちらのスクロールを使うのか判断するので、処理前の値で判定します。
0の時は、長いスクロール
1と2の時は、短いスクロール
このようにしたいので、変数が1より小さい時は、長いスクロール。それ以外、つまり1以上の時は、短いスクロールとなるように設定しています。

より小さい(<)を使っていますが、以下(<=)を使っても問題ありません。「1より小さい」を「0以下」にしても同じ結果になります。どちらを使うかは、好みなのでどちらでも構いません。やりたい事が実現出来れば、問題ありません。

という事で、この4つの作り方であれば同じ結果になります。

  • 1より小さい:長い それ以外:短い
  • 0以下   :長い それ以外:短い
  • 2より小さい:短い それ以外:長い
  • 1以下   :短い それ以外:長い
長いスクロールと短いスクロールの順番が逆になっても、問題はありません。結果的に長いスクロールが1回と短いスクロールが2回動けば良いです。

同じ(==)の判定は、FRepがバグっており、正常に判定できません。使わないようにしましょう。

ハート送信の繰り返し

ハート送信の繰り返す処理について解説します。


処理の内容としては、12人分のハートを送った回数が、40回以上になった時に、次の処理へ進み、それ以外は、ハート送信を繰り返すようにしています。

変数の初期化
ハート送信をする前に、スクロールした回数を初期化したいので、6の処理へ戻しています。7の処理へすると、スクロールした回数が初期化されません。5の処理へすると、ハート送信した回数が0になってしまい、処理が終わらなくなります。間違えないように注意しましょう!

繰り返す回数
繰り返す回数は、40としていますが、ここはハートを送る人数によって調整します。
12人分のハートを送った回数が40回(以上)になると、ハート送信の処理を終えて次の処理になるようにしています。つまり、40回まではハートの送信を繰り返します。

ハート送信する人数は?
繰り返した回数が40回の時は、何人までハート送信ができるでしょうか?

12人分のハートを送った回数が40回なので、12人×40回で480人となりそうですが、正解は478人です。ランキングの一番下は3人の表示なので、マイナス1となり、さらに自分を除くので、合計からマイナス2した人数になります。

繰り返す回数に設定する値は、ランキングに表示されている人数より少なくならないようにだけ気をつけて下さい。ハートの送信漏れが発生します。

繰り返す回数が多いのはダメ?
繰り返す回数が少ないとハートの送信ができない人が出てきます。それならいっその事、40回とかじゃなく、100回とか1000回にしたらいいのでは?

結果としては、送信できる人数は、40回に納まる人数であれば100回でも1000回でも同じです。ですが、無駄な処理が動き続けます。

実際に動かしてみると分かりますが、画面にあるハートを探してなければ、スクロールするという操作を繰り返し続けます。つまり、繰り返す回数が多すぎると、全員にハート送信が終わっているのに、ずーっとスクロールが動き続けます。繰り返す回数は、ランキングの人数に合わせるような設定にしておきましょう。

繰り返す回数の調整が面倒!
ランキングの人数が変わるたびに、ハート送信の繰り返す回数を設定し直すのは面倒ですよね。プログラムの作りとしては、良くないです。

プログラムとして完成した後に、状況によって修正するのは、正直ダメです。実は、この手順には入れていませんが、繰り返す回数を変更しなくても良い方法があります。

「スクロールの後に、ランキングの1位が表示されていたら、ハート送信を終わる」という処理を追加すれば、繰り返す回数の調整は不要です。繰り返す回数は多めに100回とかにしておけば良いです。

画像認識を使えば簡単なので、お試しあれ。

ハートをまとめて受け取り

最後になりますが、ハートをまとめて受け取りをします


ハート送信の繰り返した回数が、40回以上になるとハートをまとめて受け取り、処理を終了します。

まとめ

ハートの自動送信のプログラムの作り方と考え方をを紹介しましたが、いかがでしたか?結構見ごたえのあるボリュームだったと思います。

できる限り分かりやすいように、解説したつもりではいますが、わからない事があれば、コメント欄に質問して下さいね。

プログラムに正解はないので、これを参考にアレンジして、オリジナルの自動送信プログラムを作って下さい。

最後までご覧頂き、ありがとうございました。

Pocket

スポンサーリンク


    -ツムツム

    関連記事


    1. […] では、自動送信のプログラムを作りましょう。処理の流れをイメージしながら、準備した関数を組み合わせれば、プログラム完了までもう少しです! 自動送信のプログラムの作り方はツムツムのハート自動送信のプログラムを徹底解説【手順を公開】をご覧下さい。 […]

    2. さら より:

      はじめまして。質問致します。
      ハート送信済み(ハートが黒くなっている時)10番のifで型エラーcntと出て止まってしまいます。
      再起動したり、削除して入れなおしたりと色々試しましたがエラーがなおりません。
      関数は同じように入れたのですが…。

      どうしたらいいか教えてください。お願いします。

    3. さら より:

      すみません。先ほどコメントしたものなのですが・・・。
      別の部分の関数がcntではなくcutになっていたことに気が付きました!
      こちらを修正したらすべて問題なく動作しました。
      コメント削除でかまいません。お騒がせ致しました。

      • ほそめパパ より:

        コメントありがとうございます。

        自己解決されたようで良かったです。

        変数名のミスというのはプログラミングを行う上でありがちなので、
        少しずつ動作確認を行い間違っている箇所が特定出来れば良いかと思います。

    さら へ返信する コメントをキャンセル

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    スポンサーリンク

    プロフィール

    【プロフィール】

    仕事に役立つ考え方やコミュニケーション力をアップする情報を発信しています。

    本ブログは、記事を執筆している私の実体験をもとにわかりやすい内容にしています。少しでも読者さんのお役にたてれば嬉しい限りです!