FRep

プログラム【Skip高速ハート送信】

2020年8月頃から、LINE友だちの名前がツムツムのゲーム内でも自分で設定した表示になりました。それにより、友だちの名前に特定のマークを付けて、「そのマークがあったら送信を飛ばす」という事が可能になりました。以前からの方法(リア友を非表示削除する・ゼロスコアのリア友をランキング送信から飛ばす)よりも確実で使いやすくなったと思います。

この【マーク飛ばし=Skip】のプログラムを作成しましたのでご紹介します。こちらはランキングからハートを送信するプログラムです。関数にしてお使いください。

プログラム【Skipハート送信】
プログラム【Skip高速ハート送信】(こちらの記事です)
■プログラム【Skip回復待ちハート送信】…coming soon

【Skipハート送信】【Skip高速ハート送信】からなるべく変数を取り除いたプログラムです。送信時間は若干長くなりますが、【Skip高速ハート送信】よりも簡単になっていると思います。
【Skip回復待ちハート送信】はskipと回復待ちを組み合わせたプログラムです。

いずれのプログラムも初心者レベルではありませんので、詳細な説明は省略して解説します。ある程度は知識が必要な為うまく動かない場合はご自身で修正出来る方にお勧めします。こちらを読んでご自分なりのプログラムに作り替えてご使用ください。

 

スポンサーリンク

概要

準備として、ツムツムのランキングに載っているがハートを送信したくない友だちに、LINEで名前の先頭にマーク飛ばし用のマークを付けておきます。お勧めは画像認識がやりやすい【□】(白い四角)です。

プログラムを実行すると、マークを付けた友だちをスキップしてハートを送信しません。このプログラムは、ハートが回復していない(青)場合はそのままスルーしてランキング送信を続けます。

■Skipした回数とハートをスルー(自分&ハートが回復していない)した回数もカウントします。但しスルーとSkip両方が該当する場合にはスルーのみをカウントします。また、エラーがあった際は重複してカウントする場合もあります。

■Skipする為には、ハートとSkipマークを確実に画像認識する必要があります。スワイプにズレがあると同じ段でのハートとSkip両方の画像認識ができません。その為、スワイプは1人ずつとしました。4人スワイプで変数を使用して4段分を分ける事も可能ですが、プログラムがより複雑になる事、裏画像認識を使用すれば速度は落ちない事により1人スワイプを採用しました。


(1)ズレ無し。ハートとSkip両方見える
(2)この程度のズレならば両方見える
(3)ハートは見えるがSkipマークが見えない
(1)と(2)は良いが(3)ではSkipプログラムが正確に動かない。つまり(3)にならない様にズレ補正スワイプが必須。

ズレ補正スワイプについてはこちらをご覧ください。

裏画像認識

裏画像認識とは…

実際に画像認識での判定が必要な場面ではなく、前もって画像認識をしておくことを指します。

送信の流れは「ハート送信→OK→ミッションタップ→スワイプ→」で、通常はハート送信前にハートの画像認識を行いますが、これを「ハート送信→OK」の間、「OK→ミッション」の間に行うのが裏画像認識です。

理由は時間の短縮です。「ハート送信→OK」の間と「OK→ミッション」の間は端末の処理待ち通信待ちの時間です。この時間を短縮するには「もっと速い端末を使う」「もっと速い通信と契約する」しかありません。つまり、普通は黙って待つしかない時間です。

一方FRepプログラムでは、画像認識処理・その画像認識のスクショを撮る為に若干の時間(1秒前後)が掛かります。プログラム制御や変数の計算はほんの僅かな時間(0.001秒程度)です。※掛かる時間は端末の性能により違います。

通常の送信の流れでは、ハート送信前にFRepでの画像処理時間が掛かり、その後にOK→ミッションタップ→スワイプの時間が掛かりますが、FRepでの処理時間を端末と通信の処理待ち時間に済ませてしまうというのが裏画像認識です。【高速ハート送信Hv2】でも、1回のスクショを使いまわすことで裏画像認識をしています。

裏スクショ

ハート送信の様子をよく観察すると、「OK→ミッション」の間に一瞬ハートが見えるのがわかります。送信後のハートもまだ桃色のままの状態です。

裏スクショでは「OK→ミッション」の間にハートの画像認識用のスクショを撮ります。これが出来ると格段に速くなります。これを教えて下さったのも本職プログラマーのHさんです。

お使いの端末で裏スクショが出来るかどうか、テストプログラムを作成実行してみて下さい。ハートがある状態で1つ送信するプログラムです。ハートのあるランキング画面が撮れたら成功です。

FRepプログラム裏スクショ裏画像認識

筆者の端末では、4.待機が0秒では【OK】が残ったスクショになりました。そこで待機を少しずつ増やして0.3秒でハートのあるランキング画面が撮影出来ました。実際のプログラムでは余裕をもって0.5秒で設定しています。

この裏スクショは、端末が別の処理等で動いていると【OK】や【ハートをプレゼントしました!】の画像が撮れる可能性もあります。ハートの画像失敗=ハートが無いとはなりませんので、失敗した場合にリカバリできる様なプログラムにする必要があるでしょう。

 

実際の送信の様子

マーク飛ばしSkipハート送信

※音量にご注意ください

こちらは録画の為にAPI→BMPに変更してプログラムを実行しました。しかし裏画像認識を採用している為ほとんどスピードは落ちていません。

【送信時間の目安】
■【Skipハート送信】BMP :H291+S16+T4=合計311件で18分5秒
■【Skipハート送信】API :H291+S16+T1=合計308件で16分33秒
■【Skip高速ハート送信】BMP:H292+S16+T1=合計309件で14分2秒
■【Skip高速ハート送信】API:H294+S16+T1=合計311件で14分4秒

送信時間は端末により違いますので参考程度にお考えください。

 

変数

このプログラムで使用した変数です。
err,delay,Hcntは関数から戻ったフルオートプログラムでも使用します。

変数内容
skip0今回skip無
100今回ハートをskip
1次のハートをskip
101今回Skip、次skip
end91ランキング最下段送信
92最下段2番目送信
100最下段3番目~ランキング2位
101次が1位
1021位
9991位確認
err0エラー無し(本プログラムで設定済)
1エラー有(ここでは不使用)
2エラー有、途中で終了
3エラー有、遅延
stmスタート時間
Hcntハート送信カウント
Scntskipカウント
Ecntエラー処理したカウント
Tcntハート無しでスルーしたカウント
Werrログに書くエラー文字列
delay遅延(秒数)
Hposiハートの位置

 

座標

このプログラムで使用する座標です。端末ごとに座標は変わりますので自分の端末に当てはめて考えてください。

このプログラムではランキング4人分を1~4段目として考える

※解像度:720×1280の端末使用の場合:画像認識の作り方とスクショの位置によって座標は変わる

■1段目ハートの画像認識位置→y:422
■2段目ハートの画像認識位置→y:557
■1段目と2段目の差:557-422=135
■ランキング枠2段目の画像認識位置→y:532
■ランキング枠と2段目の差:557-532=25

ハートが無くてランキング枠や自分画像認識をした際には差分を足すことでスワイプ判定に使える。つまり、ランキング枠2段目+25=2段目ハート位置となる

 

プログラム

FRepプログラム

移動元No.プログラム概要判定移動先補足
 1変数最初に0設定 ※1
 2待機   
733区分【91】最下段ハート送信   
 4画像認識ハート画像認識成功53段目
   失敗7 
45画像認識skip画像認識成功63段目
   失敗10 
56変数Scnt+1 , skip=100(skip有) 13 
47画像認識ランキング[枠]画像認識成功93段目→2段目でもOK
    失敗8 
78画像認識自分画像認識成功93段目→2段目でもOK([枠]と同じ検索範囲にする)
    失敗69失敗はエラー処理へ
7,89変数Tcnt+1 , skip=100(skip有) 13 
510タッチ操作ハートタップ 画像認識の結果をタップ
 11変数Hcnt+1 , skip=0(skip無) エラー処理から戻っても、ここでskip=0にする
 12タッチ操作OKタップ  
6,913区分裏画像認識  
 14変数end=92 , var=@now ここを起点に、画像認識で何秒かかっても待機時間を一定にする
7315画像認識ハート画像認識成功162段目 この前に待機を入れてもよかったか?
    失敗19 
1516変数Hposi=num:@lastmatch.y Hposi=ハートの位置
 17画像認識skip画像認識成功182段目
    失敗22 
1718変数Scnt+1 , skip=num:skip∔1(skip有)22変数skipが1又は101になる
1519画像認識ランキング[枠]画像認識成功212段目
    失敗20 
1920画像認識自分画像認識成功212段目
    失敗69失敗はエラー処理へ
1921変数Tcnt+1 , skip=num:skip∔1(skip有)変数skipが1又は101になる
17,1822IF ≧10027Skip中ならミッションタップしない
     
 23変数待機時間を計算 ※2 変数varより待機時間を決定する
 24区分裏画像認識  
 25待機変数で設定した時間を待機  
 26タッチ操作ミッションタップ  
2227変数end=100 55スワイプなし
 28区分【91】最下段ハート送信  
5629区分1人ハート送信  
 30タッチ操作ハートタップ 横600,縦Hposi位置
 31変数Hcnt+1  
 32タッチ操作OKタップ  
5733区分裏画像認識  
 34変数 var=@now ここを起点に、画像認識で何秒かかっても待機時間を一定にする
7335待機  画像認識のスクショ撮る前に待機を追加
 36画像認識ハート画像認識成功371段目
    失敗40 
36,7337変数Hposi=num:@lastmatch.y+135Hposi=ハートの位置を2段目にする
 38画像認識skip画像認識成功391段目
    失敗42 
3839変数Scnt+1 , skip=num:skip∔1(skip有)42変数skipが1又は101になる
3640画像認識ランキング[枠]画像認識成功412段目
    失敗69失敗はエラー処理へ
40,7341変数Tcnt+1 , skip=num:skip∔1(skip有),Hposi=…※3
38,3942画像認識1位画像認識成功431段目
    失敗44 
4243変数end+1 1位ならendを101or102にする
4244IF≧10049Skip中ならミッションタップしない
     
 45変数待機時間を計算 ※2 変数varより待機時間を決定する
 46区分裏画像認識  
 47待機変数で設定した時間を待機  
 48タッチ操作ミッションタップ  
4449SW end=10052※4
    end=10150 
    end≧10259 
4950IF次がSkipなら、Scnt+1して1位確認へ59※5
      
 51変数1位は1段目の送信をする ※6
4952IF長短スクロールどちらか?>54553ハート位置・枠位置から決定
    ≦54554ジャストは557だがスワイプ精度により長めを多くした
 53記録1人分短めスクロール 55 
 54記録1人分長めスクロール 55 
27,53,5455IF次Skip有無skip=1or10157Skip有
    56Skip無
5556 Skip無なら、skip=0して 1人送信へ29 
5557 Skip有なら、skip=100して 裏画像認識へ33 
 58区分1人ハート送信  
49,5059ループ1位送信確認  ミキピョン用に確認
 60変数終了フラグ end=999  
 61待機  画像認識前に待機を追加
 62画像認識ランキング画像認識成功 
    失敗70 
7363画像認識skip画像認識成功811段目
    失敗 
 64画像認識ハート画像認識成功1段目
    失敗81 
 65タッチ操作OKタップ  
 66タッチ操作ミッションタップ  
 67ループ1位送信確認  
 68スクショスクリーンショット 8115回ループでも復帰出来なければ諦める
8,4069ループエラー処理ループ  
6270変数Ecnt+1 , skip=100(skip有) ループから戻った時はミッションタップ不要なので今回Skip扱いにする
 71画像認識ランキング画像認識成功72枠ではない
    失敗75 
7172画像認識自分画像認識成功732段目
    失敗74 
7273画像認識ハート画像認識成功371段目
    失敗41 
7274SW復帰先を選択end=999631位送信確認へ  ※7
    end≧10035裏画像認識へ
    end=913最下段ハート送信へ →この場合のみskip=100ではないが11で0になる
    end=9215下から2段目ハート送信へ
7175画像認識OKリトライ画像認識成功77 
    失敗 
 76画像認識とじる画像認識成功77 
    失敗 
75,7677タッチ操作ミッションタップ  
 78ループエラー処理ループ 69,↓ 
 79 スクリーンショット 10回ループでも復帰出来なければ諦める
 80変数err=2 エラー有、途中で終了
63,64,6881区分送信完了 ログ作成  
 82変数送信前待機の時間を記録 ※8
 83変数送信ログ作成 ※9
 84IF送信前待機190秒以上はエラーdelay<19085通常180秒
    delay≧19086 
8485変数遅延ゼロにする delay=0 87 
8486変数遅延秒数設定 エラー文字列設定87※10
85,8687クリップボード 完了 
 88区分送信完了 ログ作成 完了 

 

FRepプログラム

FRepプログラム

FRepプログラム

FRepプログラム

FRepプログラム

FRepプログラム

FRepプログラム

FRepプログラム

※1
FRepプログラム

※2
1.6秒を待機する為の変数
FRepプログラム

※3
Tcnt+1 , skip=num:skip∔1(skip有),
Hposi=lastmatch.y+25:スワイプ判定用に+25して、ランキング枠のy値→2段目ハート位置に
FRepプログラム

※4
プログラム戻り位置を制御
FRepプログラム

※5
変数Skipが1又は101の場合は、【変数セットScnt+1】してから1位送信確認へ
※行き先に[v]があると変数がセットされている。
FRepプログラム
FRepプログラム
この位は変数セットしてもいいかな…とした例。やっぱり見えにくい…後で直すかも?

※6
1位はスワイプ出来ないので1段目で送信だが、Hposiは2段目のハート位置にしてあるので[-135]して再び1段目位置にセット
スワイプのプログラムを飛ばし、skip=0してから1人送信プログラムへFRepプログラム

※7(プログラムスクショは74)
プログラム戻り位置を制御
FRepプログラム

※8(プログラムスクショは82
ログ作成でstmの値が変わる前に送信前待機の時間を記録
FRepプログラム

※9(プログラムスクショは83)
送信ログ作成
FRepプログラム

FRepプログラム
FRepプログラム

出来た送信ログがこちら

※10(プログラムスクショは86)
遅延があったなら[err=3]をセットし(フルオートプログラムで使用)、送信ログに遅延秒数を追加
FRepプログラム

 

まとめと修正情報

なんとか纏めましたがミスがあったらすみません。半分は自分自身の忘備録となっております。記入漏れ・説明不足等は大目に見て下さい。

 

※忘備録:基本的に制御設定(画像認識やSwitch・IF等)での行き先指定での変数セットはしない。そこで変数をセットすると指定した変数が見え難く修正時にわかりにくい。どうしても変数セットする場合にはラベルにその旨表示してわかりやすくしておく。

※このプログラムでは1ヶ所(プログラム50)のみ制御設定(IF)で変数セットがあります。

コメント

スポンサーリンク
タイトルとURLをコピーしました