追う2は、追う1を上下左右に移動するようにした物です。 それ以外はほぼ同じです。 追う1と同じ箇所は略します。
追う1に無い数値変数 [乱] 追う1と扱いが少し違う数値変数 [X][Y]…プレイヤーと敵との距離、移動先のマス目、マス目から換算した座標
「スタートページ」「XY」「プ」「上」「左」「右」「下」「敵」「終了」 +調整方法
「スタートページ」
追う1とほぼ同じです。 サンプルでは初期位置をプレイヤー(1,1)、敵(10,8)にしています。
「XY」
追う1とほぼ同じです。 サンプルでは[X]←[X]×50+8、[Y]←[Y]×50+3にしています。
「プ」
プ
サブルーチンコール「上」 IF[Y]≠ 0 サブルーチンコール「XY」 ダイナミックレイヤーの作成 (イメージを表示=@X座標:%X%、Y座標:%Y% 画像:選択.png サブルーチンコール「上」 選択時に〜≠ノチェックする) ENDIF サブルーチンコール「左」 IF[X]≠0 サブルーチンコール「XY」 ダイナミックレイヤーの作成 (イメージを表示=@X座標:%X%、Y座標:%Y% 画像:選択.png サブルーチンコール「左」 選択時に〜≠ノチェックする) ENDIF サブルーチンコール「右」 IF[X]≠12 サブルーチンコール「XY」 ダイナミックレイヤーの作成 (イメージを表示=@X座標:%X%、Y座標:%Y% 画像:選択.png サブルーチンコール「右」 選択時に〜≠ノチェックする) ENDIF サブルーチンコール「下」 IF[Y]≠9 サブルーチンコール「XY」 ダイナミックレイヤーの作成 (イメージを表示=@X座標:%X%、Y座標:%Y% 画像:選択.png サブルーチンコール「下」 選択時に〜≠ノチェックする) ENDIF マウスの入力を待つ(クリッカブル領域のみ) [プX]←[X] [プY]←[Y] サブルーチンコール「XY」 レイヤー制御 対象レイヤー〈プ〉 (レイヤーの表示状態<`ェック無し、レイヤー位置々座標:%X%、Y座標:%Y%) 移動「敵」 |
プレイヤーの番です。 プレイヤーが移動場所を選択するダイナミックレイヤーを作成します。
 サンプルでは、(0,〜)(〜,0)(12,〜)(〜,9)は進めません。 上は(〜,0)でない時、左は(0,〜)でない時、右は(12,〜)でない時、下は(〜,9)でない時にダイナミックレイヤーを作成します。 その他は追う1とほぼ同じです。
「上」「左」「右」「下」
上
[X]←[プX] [Y]←[プY]−1 サブルーチンから復帰 |
左
[X]←[プX]−1 [Y]←[プY] サブルーチンから復帰 |
右
[X]←[プX]+1 [Y]←[プY] サブルーチンから復帰 |
下
[X]←[プX] [Y]←[プY]+1 サブルーチンから復帰 |
追う1と違い、上下左右に移動します。
「敵」
[X]←[プX]−[敵X] …X方向の距離を算出 IF[X]<0 [X]←0−[X] ENDIF [Y]←[プY]−[敵Y] …Y方向の距離を算出 IF[Y]<0 [Y]←0−[Y] ENDIF IF[X]=[Y] …等距離にいる時は乱数でどちらを優先するか決定 [乱]←[@乱数]mod2 IF[乱]=0 [Y]←0 …左右優先 ELSE [X]←0 …上下優先 ENDIF ENDIF IF[X]>[Y] …左右優先 IF[プX]>[敵X] [敵X]←[敵X]+1 …右へ ELSE …上下優先 [敵X]←[敵X]−1 …左へ ELSE IF[プY]>[敵Y] [敵Y]←[敵Y]+1 …下へ ELSE [敵Y]←[敵Y]−1 …上へ ENDIF ENDIF [X]←[敵X] [Y]←[敵Y] サブルーチンコール「XY] レイヤー制御 対象レイヤー〈敵〉 (レイヤーの表示状態<`ェック無し、レイヤー位置々座標:%X%、Y座標:%Y%) IF[プX]=[敵X] IF[プY]=[敵Y] 移動「終了」 ENDIF ENDIF 移動「プ」 |
敵の番で、よりプレイヤーに近づく方向に進むことは追うと1同じです。 追う1では斜めに移動することで、一度の移動でX方向に近づくこととY方向に近づくことを同時に出来ました。 追う2では上下左右に移動します。 つまり一度の移動では、X方向に近づいたらY方向に近づくことは出来ず、Y方向に近づいたらX方向に近づくことは出来ません。 そこで、追う2ではプレイヤーと敵とのX方向、Y方向の距離を出し、距離がある方向を優先して移動するようにします。 [X]←[プX]−[敵X] で[X]にプレイヤーと敵のX方向の距離を入れます。 IF[X]<0 [X]←0−[X] ENDIF は、プX<敵Xの時は[X]がマイナスになるので、Y方向の距離との比較をしやすくする為に、0−[X]でプラスにします。 Y方向も同様に距離を出します。 普通はこれで、距離を比べて、どちらの方向を優先するかを決めて、プレイヤーとの位置関係から移動先を決めます。 しかし、例えばプレイヤーが(9,7)、敵が(5,3)にいる時、 (プX−敵X)=(プY−敵Y)=4 になり、両方向の距離は同じです。 この時はランダムに2方向の内の片方を選ばせます。 [@乱数]mod 2で0ならX優先、1ならY優先にします。 前述の「普通」の場合で[X][Y]を比較するので、[Y]←0にすれば自動的に[X]>[Y]となって、X方向の左右を優先して移動します。 Y方向の上下優先も同様です。
「終了」
追う1と同じです。
調整方法
調整のポイントは、 ・マップのマス目の数 ・キャラ画像の表示位置 ・キャラの初期位置 です。
・マップのマス目の数 ・キャラ画像の表示位置 については、追う1と同じです。
・キャラの初期位置 大きさと形に関らず、
先手 | プ | 敵 |
プ | (奇,奇) | (偶,偶) | (奇,奇) |
(奇,偶) | (奇,偶) | (偶,奇) |
(偶,奇) | (偶,奇) | (奇,偶) |
(偶,偶) | (奇,奇) | (偶,偶) |
敵 | (奇,奇) | (奇,遇) | (偶,奇) |
(奇,偶) | (奇,奇) | (偶,偶) |
(偶,奇) | (奇,奇) | (偶,偶) |
(偶,偶) | (偶,奇) | (奇,偶) |
の16通りの内のどれかなら、敵はプレイヤーを捕まえることが出来ます。 これら以外だと、プレイヤーの近くまで行っても捕まえられません。
・他 敵に捕まるまで何回移動したか、を出したい時については、追う1と同じです。 |