2章のおさらいです。
//**初期設定*********************************************//
//攻撃キー
public ATTACK1 = VK_1
//HP回復のタイミング
public hpkaifuku = 7
//MP回復のタイミング
public mpkaifuku = 10
//**プログラム開始***************************************//
//敵のHPのX座標とY座標
public hpx = 190//←パーティーメンバーのHPと誤認識を防止
public hpy = 0
//ウインドウをアクティブ化
public id = GETID("DIVINA Ver. ")
ACW(id, STATUS(id, ST_X), STATUS(id, ST_Y))
//メインループ
count = 1
while 1
//敵選択ループ
while 1
//TABキーを押す
KBD2(VK_TAB)
//0.3秒待つ
sleep(0.3)
//まだ倒していないターゲットが表示されたら抜ける
if hpcheck() = 2 then break
wend
//攻撃ループ
while 1
//攻撃キーを押す
KBD2(ATTACK1)
//敵のHPが0か確認(1秒ごと)
sleep(1)
if hpcheck() = 0 then break
sleep(1)
if hpcheck() = 0 then break
sleep(1)
if hpcheck() = 0 then break
sleep(1)
if hpcheck() = 0 then break
wend
ifb count MOD hpkaifuku = 0 then
//HP回復アイテムを使う
KBD2(VK_6)
sleep(15)
endif
ifb count MOD mpkaifuku = 0 then
//MP回復アイテムを使う
KBD2(VK_7)
sleep(15)
endif
//カウント増加
count = count + 1
wend
//敵のHPチェック
FUNCTION hpcheck()
sw = STATUS(id, ST_WIDTH)
sh = STATUS(id, ST_HEIGHT)
//敵のHPバー認識
ifb CHKIMG("HP.bmp", 1, hpx, hpy, sw, sh) then
hpx = G_IMG_X
hpy = G_IMG_Y
else
//↓プレイヤーがHPバーを動かした時に対応
//座標の初期化
hpx = 190
hpy = 0
//少し待ってTABキー押し直す、関数の再帰呼び出し
sleep(0.3)
KBD2(VK_TAB)
RESULT = hpcheck()
EXIT
endif
//HP最大値、最小値チェック
c = PEEKCOLOR(hpx + 1, hpy + 4)//←指定座標の色を拾う
cr = c and $FF//←R(赤)成分を抽出
ifb cr <= 205 then
RESULT = 1
c = PEEKCOLOR(hpx + 95, hpy + 4)
cr = c and $FF
if cr <= 205 then RESULT = 2
else
RESULT = 0
endif
FEND
//ボタンを押して話す
PROCEDURE KBD2(vk)
KBD(vk,DOWN)
sleep(0.067)
KBD(vk,UP)
FEND
メインループで敵を選択する部分も「敵選択ループ」としてループさせるよう改良しました。これは画面内に敵が沸いていない時に無意味に攻撃ボタンを押すのを防止するためです。敵を倒す→新しい敵を探す流れを続けていくと敵が居なくなる時もありえるためです。
これで敵を探して倒すという単純なループを確実に行えるようマクロが組上がりました。
次の章ではさらに自分のHPやMPを読み取って最適なタイミングでHPやMP回復が行えるようマクロを拡張していきます。