戦闘を考える(その2)
作戦ボタンを押した後の処理に取り掛かります
大くくりに書き出すと
①ダミー補給
②第1部隊行動プラン
③プラン終了待機
と非常にシンプルです、スクリプトにするとチマチマ細かい作業がずらずら並ぶわけですが日頃脊髄反射でやってる内容をトレースするだけなのでさほど悩む部分は無いはずです
//第2部隊メニュー
//部隊表示で画像検索失敗するので空き家時点の結果を転用する
//部隊選択
P_adb_BTN(Px + delta_X , Py + delta_Y , 1000 + randomx(1000), "Team 2")
//部隊メニュー
P_adb_BTN(Px + delta_X , Py + delta_Y , 1000 + randomx(300), "Open menu")
while true //補給
sleep(1)
ifb chkimgx("supply.bmp",NOXid) then
break
endif
wend
//補給ボタン
P_adb_BTN(G_IMGX_X+delta_X ,G_IMGX_Y+delta_Y ,500 ,"Supply")
sleep(3)
//苦しいスクロール処理
for i = 1 to 3
Sw_X = 800 + random(30)
Sw_Y = 400 + random(20)
Mv_X = random(20)
Mv_Y = 400 + random(20)
CMD = "cd /d D:\Program Files\Nox\bin & nox_adb -s " + nox_port + " shell input touchscreen swipe " + Sw_X + " " + Sw_Y + " " + (Sw_X + Mv_X) + " " + (Sw_Y + Mv_Y) +" 350"
print "MAP scroll 1 X1:" + Sw_X + " Y1:" + Sw_Y + " X2:" + (Sw_X + Mv_X) + " Y2:" + (Sw_Y + Mv_Y)
DOSCMD(CMD) //ダメ押し
sleep(0.5)
next
while true //第1部隊選択
ifb chkimgx("1SQ_1T.bmp",NOXid,x1,y1,x2,y2,-1,15,-1) then
print "1SQ X:" + G_IMGX_X + " Y:" +G_IMGX_Y
break
endif
sleep(1)
wend
//部隊選択
P_adb_BTN(G_IMGX_X + delta_X ,G_IMGX_Y + delta_Y ,500 )
chkimgx("plan_mode.bmp",NOXid) //プランモードボタン位置
P_adb_BTN(G_IMGX_X + delta_X ,G_IMGX_Y + delta_Y ,1000 ,"PlanMode")
while true //1T目的地
sleep(1)
ifb chkimgx("dest_1T.bmp",NOXid,x1,y1,x2,y2,1,20,-1) then
print "Dstn 1T X:" + G_IMGX_X + " Y:" +G_IMGX_Y
break
endif
wend
//目的地選択
P_adb_BTN(G_IMGX_X + delta_X ,G_IMGX_Y + delta_Y ,1000 ,"Dstn 1T")
while true //目的地選択
ifb chkimgx("dest_2T.bmp",NOXid,x1,y1,x2,y2,1,20,-1) then
print "Dstn 2T X:" + G_IMGX_X + " Y:" +G_IMGX_Y
break
endif
wend
//目的地選択
P_adb_BTN(G_IMGX_X + delta_X ,G_IMGX_Y + delta_Y ,500 ,"Dstn 2T")
while true //2Tプラン開始
sleep(1)
ifb chkimgx("plan_T_OK.bmp",NOXid) then
print "Plan GO X:" + G_IMGX_X + " Y:" +G_IMGX_Y
break
endif
wend
//プラン実行
P_adb_BTN(G_IMGX_X + delta_X ,G_IMGX_Y + delta_Y ,1500 ,"Plan GO")
print "終了待ち200sec " + (loop + 1) + "/ " + (G_count + 1)
sleep(200)
print "終了待ち完了"
while true //2Tプラン終了待ち
sleep(1)
ifb chkimgx("plan_2T_END.bmp",NOXid) then
print "End 2T X:" + G_IMGX_X + " Y:" +G_IMGX_Y
break
endif
wend
//2T終了
P_adb_BTN(1100 ,880 ,1000 ,"2T END")
print "2T終了"
手こずったのはプランモードで敵司令部までルート指示する際のMAPスクロール、微妙に実際動作させるとスクロール量が安定しなかったりしたのでかなり多めに動かしてます、所要時間パラメータとか追い込めば安定するのかもしれません
思わぬタップ(クリック)動作に化けることもあるので指が走る範囲に余計なものがない領域を選んだ方が良いと思います
戦闘終了待ちに関しては単純に終了判定ループを回し続けても支障は無いはずですが変な誤動作されるのもイヤだったので最低限の待ち時間はスリープ待機させています
今回の0-2では鉄血部隊が移動しないので相手ターンでの戦闘が発生しません、なのでプランモード中の画面停止が無いので助かっています、他のMAPで相手が動く場合には相手ターン戦闘結果で一時停止する対応を織り込まないとダメでしょう
(戦果表示をトラップするか不定期定期に画面タップするかはお好みで)
これほど同じパターンの動作が続くなら関数化した方が後日の見返しはやりやすいかもですね・・・