「プレイヤーから逃げる敵」です。 背景.png用に整えられています。途中の障害物は無い設定。 斜めの四方向に1回1マス進み、緑色の部分には進めない。 マス目は右にX軸、下にY軸、左上を(1,1)、右下を(11,15)に取っています。 逃げる1は追う1より複雑です。 単純にプレイヤーから遠ざかるマスへ進んでいくと、すぐマップの端にぶつかって、そこを行ったり来たりしている内にプレイヤーに捕まってしまいます。 サンプルでは、プレイヤーとある程度近くなると遠ざかり、そうでなければランダムに動くようにしました。 それでも敵の動きは不完全です。 敵の逃げ方の難度を上げたい場合は、サイトの掲示板にてお問い合わせください。 【オプション】のレイヤーの設定≠ナ、ユーザーレイヤーを2つ作っておきます。 レイヤー名は〈敵〉と〈プ〉。(「プレイヤー」の「プ」) 数値変数、文字列変数も【オプション】の変数の設定≠ナ作っておきます。 [プX][プY]…プレイヤーがいるマスが何マス目か [敵X][敵Y]…敵がいるマスが何マス目か [X][Y]…移動先のマス目、マス目から換算した座標、乱数 {番}…どちらの番か、敵の移動方法、移動可能場所 「スタートページ」「XY」「プ」「1」「2」「3」「4」「敵」「四」「4択」「乱」「12」「34」「13」「24」「14」「23」「123」「124」「134」「234」「終了」 +調整方法 「スタートページ」
最初に背景を表示し、プレイヤーと敵の初期位置を設定して、それぞれの画像を表示して、先手の敵から始めます。 サンプルでは初期位置をプレイヤー(1,1)、敵(11,15)にしています。 「XY」
プレイヤーまたは敵がいるマス目から、キャラ画像を表示する座標を換算します。 サンプルではプレイヤーも敵もプレイヤーの移動先も、一コマの中の同じ位置に表示しています。 コミメカ3の座標は左上を(0,0)として右と下に数値が増えていきます。 [X][Y]に何マス目かを入れておいて「XY」をサブルーチンコールし、座標に換算してサブルーチンから復帰します。 サンプルでは[X]←[X]×50+ 9、[Y]←[Y]×24+27にしています。 「プ」
プレイヤーの番です。 文字列変数{番}にプレイヤーの番である印に「番」と入れて、「四」をサブルーチンコール。 プレイヤーが移動場所を選択するダイナミックレイヤーを「四」で作成し、戻ります。 プレイヤーが選択するのを待ち、選択したサブルーチンコール先でその場所が何マス目かを[X][Y]に入れて、[プX][プY]に移し。 「XY」をサブルーチンコールして表示座標を換算して戻り、新しい位置に〈プ〉を移動させ、プレイヤーと敵の場所が同じであれば捕まえたので終了。 そうでなければ、次の敵の番「敵」に移ります。 「1」「2」「3」「4」
プレイヤーまたは敵から左上が「1」、左下が「2」、右上が「3」、右下が「4」です。 「敵」
敵の番です。 文字列変数{番}に「乱」と入れておいて、プレイヤーと敵の距離を計算します。 距離がX方向にもY方向にも4以内なら、プレイヤーから遠ざかるように移動する印に、{番}を「4」に変えます。 「四」をサブルーチンコールし、{番}⊆乱ならランダムに、{番}⊆4なら遠ざかるように移動先を決定して、[X][Y]に入れて戻ります。 [X][Y]を[プX][プY]に移し、「XY」をサブルーチンコールして表示座標を換算して戻り、新しい位置に〈敵〉を移動させます。 次のプレイヤーの番「プ」に移ります。 「四」
プレイヤーの番で「プ」から「四」をサブルーチンコールした時は、移動先のダイナミックレイヤーを作成します。 ![]() 移動先の座標は、「1」(左上)「2」(左下)「3」(右上)「4」(右下)をそれぞれサブルーチンコールして[X][Y]に入れます。 サンプルでは、(0,〜)(〜,0)(12,〜)(〜,16)は進めません。 左上は(0,〜)(〜,0)でない時、左下は(0,〜)(〜,16)でない時、右上は(12,〜)(〜,0)でない時、右下は(12,〜)(〜,16)でない時にダイナミックレイヤーを作成して、「プ」に戻ります。 敵の番で「敵」から「四」をサブルーチンコールした時は、四方向のマスに進めるかどうかを{番}に入れていきます。 例えばプレイヤーと離れていてランダムに行き先を決める時、四方向とも進めるなら、{番}=乱1234と入ります。 {番}に「4」が含まれている時は、四方向の内、遠ざかる方向に移動先を決めるので、「4択」に移動。 {番}に「乱」が含まれている時はランダムに移動先を決めるので、「乱」に移動します。 「4択」
プレイヤーとの位置関係から、プレイヤーから遠ざかるマス目を選んで移動します。 選び方については、移動一覧を参照してください。 {番}に四方向の内、移動可能な方向の数値が入っているので、{番}から移動可能かどうかを判断して移動します。 「乱」
乱数を4で割った余りから移動先を決め、そこが移動出来なければ残る3方向に進めるかを判断していきます。 「12」「34」「13」「24」「14」「23」
「12」は、1(左上)2(左下)が両方進めるなら、ランダムでどちらへ行くかを決めます。 1だけ進めるなら1へ、2だけ進めるなら2へ進みます。 どちらも進めなければ、3か4の2択へ移行します。 「34」「13」「24」「14」「23」も同様です。 「123」「124」「134」「234」
「123」は、1(左上)2(左下)3(右上)が全て進めるなら、ランダムでどこへ行くかを決めます。 12が進めて3が進めないなら、「12」へ移動。 {番}⊆12ではなく⊆1の時は、1○2×3○か1○2×3×なので、「13」へ移動。 {番}⊆1でない時は、1×2○3○か1×2○3×か1×2○3×なので、「23」へ移動します。 「124」「134」「234」も同様です。 「終了」
「プ」でプレイヤーが敵を捕まえたので、追いかけっこ終了です。 「スタートページ」に戻ります。 調整方法 調整のポイントは、 ・マップのマス目の数 ・キャラ画像の表示位置 ・キャラの初期位置 ・マップの形 です。 ・マップのマス目の数 座標に揃えて、一番左がX1で右に増え、一番上がY1で下に増えていくように数を割り振ると後の計算が楽です。 「プ」のオレンジ色の数値を、マップのマス目の数によって変えてください。 9行13列に取るなら、IF[X]≠10(9+1)、IF[Y]≠14(13+1)、のようにします。 ・キャラ画像の表示位置 サンプルではマス目に対して、 [X]=[X]×50+ 9 [Y]=[Y]×24+27 に表示しています。 「XY」の緑色の数値を変えてください。 (1,1)に(150,170)、(2,2)に(250,270)で表示したい時は、 [X]=[X]×100+50 [Y]=[Y]×100+70 なので、
・キャラの初期位置 サンプルのマップの場合は、 プ先手 プ(偶,偶)敵(奇,奇) プ先手 プ(奇,奇)敵(偶,偶) 敵先手 プ(偶,偶)敵(偶,偶) 敵先手 プ(奇,奇)敵(奇,奇) の4通りの内のどれかなら、敵はプレイヤーを捕まえることが出来ます。 これら以外だと、プレイヤーの近くまで行っても捕まえられません。 「スタートページ」の青文字の数値を、お好みの初期位置に変えてください。 ・マップの形 違う形の例としては、 ![]() などがあります。 この例はサンプルと同じように進められますが、初期位置は、 プ先手 プ(偶,奇)敵(奇,偶) プ先手 プ(奇,偶)敵(偶,奇) 敵先手 プ(偶,奇)敵(偶,奇) 敵先手 プ(奇,偶)敵(奇,偶) の4通りの内のどれかになります。 ・他 敵を捕まえるまで何回移動したか、を出したい時は。 数値変数[回]を作り、「スタートページ」で[回]←0にして、「プ」で「敵」に移動する前に[回]←[回]+1にしてメッセージの表示などで表示します。 |