プログラムの中身を詳しくみてみよう
爆弾ゲームのスクリプトについてスプライトごとに解説します。
プレイヤー
主な動き
- 上(↑)、下(↓)、左(←)、右(→)の矢印キーで動かします。
- スペースキーを押すと爆弾を置きます。
- ペンギンや炎に当たってしまうとGAME OVERとなります。
- 爆弾は一度に4つまで置くことができます。
- 左折や右折をした際には、曲った後の道の中央に位置するように座標を微調整します。
「Start」を受け取ったとき
-
- 説明
上下左右の矢印キーでPlayerを動かし、スペースキーで爆弾を置きます。
ペンギンや炎に触れてしまったらダメージを受けた演出をし、 GAME OVERを送って終了します。
- コードの詳細
各変数の値、コスチューム、座標を初期化します。
ペンギンまたは炎に触れるまでAの処理をくり返します。
- A :
押されたキーによって対応したスクリプトを実行します。
ペンギンまたは炎に触れたら以下のように ダメージを受けたを実行して終了します
(ダメージを受けたの中で game overを送ります)。
爆弾を置く
-
- 説明
Playerがいる場所に爆弾を置きます。
ただし、1つ前の爆弾を置いた直後であったり、 最大数(4つ)の爆弾をすでに置いてしまっていたりする場合は爆弾を置きません。
- コードの詳細
爆弾使用不可が0(爆弾が使用可能)かつ 使用中の爆弾数が4 (同時に使用できる爆弾の数)より少ない場合のみAの処理をして爆弾を置きます。
- A :
爆弾のクローンを作ります。
使用中の爆弾数を1増やします。
爆弾使用不可を1にします。
爆弾設置を送ります。
爆弾設置を受け取ったとき
- 1秒待ってから爆弾使用不可 を0にします(爆弾使用不可の状態を解除します)。
ダメージを受けた
-
- 説明
ペンギンまたは炎に触れてダメージを受けたときの演出をし、 game overを送ります。
- コードの詳細
コスチュームをダメージにします。
meow(猫の鳴き声)の音を鳴らします。
以下のAの処理を40回くり返します。
- A :
y座標 を2ずつ変えます(上方向に2だけ動かします)。
ghostの効果を3ずつ変えます (少しずつ薄くなって消えていくようにします)。 game overを送ります。
右へ移動
-
- 説明
右方向へ移動します。ただし右側に壁がない場合のみ移動します。
- コードの詳細
向きを右方向(90度)にします。
Playerが右端にいなければ(x座標< 右端なら) 横方向を実行して右に2だけ移動します。
ただしx座標= 右端-1である場合は右に1だけ移動します。
左へ移動
-
- 説明
左方向へ移動します。ただし左側に壁がない場合のみ移動します。
- コードの詳細
向きを左方向(-90度)にします。
Playerが左端にいなければ(x座標> 左端なら) 横方向を実行して左に2だけ移動します。
ただしx座標= 左端+1である場合は左に1だけ移動します。
上へ移動
-
- 説明
上方向へ移動します。ただし上側に壁がない場合のみ移動します。
- コードの詳細
Playerが上端にいなければ(y座標< 上端なら) 縦方向を実行して上に2だけ移動します。
ただしy座標= 上端-1である場合は上に1だけ移動します。
下へ移動
-
- 説明
下方向へ移動します。ただし下側に壁がない場合のみ移動します。
- コードの詳細
Playerが下端にいなければ(y座標< 下端なら) 縦方向を実行して下に2だけ移動します。
ただしy座標= 下端+1である場合は下に1だけ移動します。
横移動
-
- 説明
横方向の道の中央から上下にそれぞれ一定の幅(9)の中に Playerのy座標がある場合のみ横の方向へ移動します。
横の方向へ移動する際には、Playerのy座標 をずらして横方向の道の中央へ合わせます
(y座標が横方向へ移動できる範囲にあるかどうかの判定と横方向の道の中央へ合わせるために y座標をずらす量の計算は道通過判定でおこないます)。
移動量が+の値であれば右へ、-の値であれば左へ移動します。
- コードの詳細
y座標に対して 道通過判定を実行します。
横方向の道の中心からの y座標のズレが通れる幅におさまっていない場合は 座標をずらす量に( 通れる幅の半分 (9)+1)が入ってくるので、その場合は次の処理(横への移動)へ進まずにスクリプトを終了します。
ズレが通れる幅におさまっている場合は以降の処理を実行します。
Playerのy座標を 座標をずらす量だけ変えて、横方向の道の中央に合わせます。
x座標を移動量の分だけ変えて横に移動させます。
x座標を渡して 歩く演出を実行します。
縦移動
-
- 説明
縦方向の道の中央から左右にそれぞれ一定の幅(9)の中にPlayerのx座標がある場合のみ縦の方向へ移動します。
縦方向へ移動する際には、Playerの x座標をずらして縦方向の道の中央へ合わせます
(x座標が縦方向へ移動できる範囲にあるかどうかの判定と縦方向の道の中央へ合わせるために x座標をずらす量の計算は 道通過判定でおこないます)。
移動量が+の値であれば上へ、-の値であれば下へ移動します。
- コードの詳細
x座標に対して道通過判定を実行します。
縦方向の道の中心からのx座標のズレが通れる幅におさまっていない場合は 座標をずらす量に( 通れる幅の半分(9)+1)が入ってくるので、 その場合は次の処理 (縦への移動)へ進まずにスクリプトを終了します。
ズレが通れる幅におさまっている場合は以降の処理を実行します。
Playerのx座標を 座標をずらす量だけ変えて、縦方向の道の中央に合わせます。
y座標移動量の分だけ変えて縦に移動させます。
y座標を渡して 歩く演出を実行します。
道通過判定
-
- 説明
進行方向の道の中央からのPlayerの位置のズレが通れる幅の半分(9)の 中にある場合のみ進行方向への移動可と判定します。
また進行方向へ移動する際には、 Playerの位置をずらして進行方向の道の中央へ合わせます。そのずらす量( 座標をずらす量)もこのスクリプト内で計算します。
進行方向の道の中央からのPlayerの位置のズレが大きく、 通過できないと判定した場合は 座標をずらす量を 通れる幅の半分(9)+1としておきます。
- コードの詳細
座標を 道の中心の間隔(64)で 割った余りを計算します。
進行方向の道の中央からのズレの大きさを計算しています。
割った余りの大きさに応じて以下のA、B、Cのいずれかを実行します。
- A :
割った余りが 通れる幅の半分(9)以下である場合
(進行方向の道の中央に対するPlayerのプラス方向へのズレが 通れる幅の半分(9)以下である場合)
-割った余りを 座標をずらす量にします
(座標をマイナス方向に 割った余り分だけずらします)。 - B :
(道の中心の間隔(64)- 割った余り)が 通れる幅の半分(9)以下である場合
(進行方向の道の中央に対するPlayerのマイナス方向へのズレが 通れる幅の半分(9)以下である場合)
(道の中心の間隔(64)- 割った余り)を 座標をずらす量にします
(座標をプラス方向に(道の中心の間隔(64)- 割った余り)だけずらします)。 - C :
それ以外の場合
(進行方向の道の中央とPlayerの中心との距離が 通れる幅の半分より大きい場合)
座標をずらす量を( 通れる幅の半分(9)+1)にしておきます
(こうしておくことで次の処理(横への移動)へ進まずにスクリプトを終了するようにします)。
道通過判定の具体的な例
-
- 説明
Playerのy座標=137
通れる幅=18
通れる幅の半分=9
割った余り=9となります。
(Playerのy座標(137)÷ 道の中心の間隔(64)=2 余り 9) 割った余り(9)は 通れる幅の半分(9)以下です。
その場合は座標をずらす量 =-割った余り=-9にします。
Playerのy座標(137)に 座標をずらす量(-9)を足すと 128となり、道の中央のy座標と同じ位置となります。
-
- 説明
Playerのy座標=119
通れる幅=18
通れる幅の半分=9
割った余り=55となります。
(Playerのy座標(119)÷ 道の中心の間隔(64)=1 余り 55) (道の中心の間隔(64)- 割った余り(55))は 通れる幅の半分(9)以下です。
その場合は座標をずらす量= 道の中心の間隔(64)- 割った余り(55))=9にします。
Playerのy座標(119)に 座標をずらす量(9)を足すと128となり、道の中央のy座標と同じ位置となります。
-
- 説明
Playerのy座標=140
通れる幅=18
通れる幅の半分=9
割った余り=12となります。
(Playerのy座標 (140)÷道の中心の間隔(64)=2 余り 12) 割った余り(12)は 通れる幅の半分(9)より大きいので左に移動することはできません。
その場合は座標をずらす量を 通れる幅の半分(9)+1=10にしておきます。
歩く演出
-
- 説明
進行方向の座標が10の倍数の時に コスチュームを変更することで歩いているように見せます。
- コードの詳細
座標を10で 割った余りが0である場合、コスチュームの 歩く1と 歩く2を入れ替えます。
ペンギン
主な動き
- ゲーム開始時に7本ある縦の道のうち、
Playerがいる中央の道以外の6本の道に1体ずつ合計6体を出現させます。
それ以降は35個ある交差点のいずれかに10秒に1体ずつ出現させます
(それぞれクローンを作ります)。 - ペンギンを出現させる際には先に煙を表示し、その後にペンギンを表示します。
- 出現した後は上下左右のいずれかに移動を開始し、交差点を通るたびに直線(50%)、
右折(25%)、左折(25%)のいずれかを選択して移動します。
前方や左右に壁があって進めない場合はそれ以外の道へ進みます。
もし3方向が塞がっていたら反転して逆方向に進むようにします
(現在の仕組みでは3方向とも壁となることはありませんが、念のためそのような動きとしています)。 - 前方に爆弾がある場合は反転して逆方向に進むようにします。
- 炎に触れたら消滅し、スコアが1加算されます。
がクリックされたとき
- 非表示にします。
「Start」を受け取ったとき
- 下記の説明の開始時に配置と途中で出現を実行させます。
開始時に配置
-
- 説明
7本ある縦の道のうちPlayerがいる中央の道以外の6本の道に1体ずつペンギンを出現させます。
縦の道にはそれぞれ5つの交差点があり、そのうちの1つにランダムで出現させます。
- コードの詳細
垂直位置を0にします。
水平位置を1にします。
Aの処理を3回くり返して複数の箇所にペンギンを配置します。
- A :
垂直位置を-2から2までのいずれかにして、 クローンをつくるを実行します。
これは中央の道の一本右隣の縦の道にある5つの交差点のうちのいずれか1ヵ所にペンギンを出現させます。 0.1秒待ちます。
水平位置に-1をかけます。
垂直位置を-2から2までのいずれかにして、 クローンをつくるを実行します。
これは中央の道の一本左隣の縦の道にある5つの交差点のうちのいずれか1ヵ所にペンギンを出現させます。 0.1秒待ちます。
水平位置に-1をかけてマイナスからプラスへ戻します。
水平位置に1を足して1本外側の道へ移ります。
開始時のループ内でつくられるペンギンの出現位置
- 対応する番号のいずれか1ヵ所に出現させます。
途中で出現
-
- 説明
35個ある交差点のいずれかに10秒に1体ずつペンギンを出現させます。
- コードの詳細
Aの処理をGAME OVERになるまでくり返します。
- A :
10秒待ちます。
垂直位置を-2から2までのいずれかにします。
水平位置を-3から3までのいずれかにします。
クローンをつくるを実行します。
クローンをつくる
-
- 説明
水平位置、垂直位置で示す場所に煙を約3秒表示してからペンギンを出現させます。
水平位置、垂直位置の値を煙X、煙Yにコピーしてスプライト煙へ渡します。
- コードの詳細
煙Xを水平位置にします。
煙Yで垂直位置にします。
煙のクローンを作ります。
自分自身のクローンを作ります。
クローンされたとき
-
- 説明
開始時に配置、 途中で出現で指定された 水平位置、 垂直位置をもとに実際の x座標、 y座標を設定して表示します。
表示した後は移動し続けます。
交差点を通るたびにランダムで直進、右折、左折をします。
- コードの詳細
x座標を 水平位置× 道の中心の間隔(64)にします。
y座標を 垂直位置× 道の中心の間隔(64)にします。
コスチュームを前にします。
煙を表示する時間として3秒待ってから表示します。
表示後は可能方向更新と 移動をくり返します。
- 水平位置、垂直位置と
x座標、y座標の関係
可能方向更新
-
- 説明
現在の向きと座標から直進、右折、左折のそれぞれの可否を判定します。
- コードの詳細
直進可、右折可、 左折可をそれぞれ1にリセットします。
上下左右いずれの端でもない場合は3つとも1のまま(直進、右折、左折すべて可能)となります。
可能方向更新-右端 、可能方向更新-左端、 可能方向更新-上端、 可能方向更新-下端 を実行し、直線、右折、左折のうち実行できないものは0にします。
例えば上端で上を向いている場合は壁があって直進できないので 直進可を0にします。 下端で左を向いている場合はペンギンから見て左に壁があるので 左折可を0にします。
可能方向更新-右端
-
- 説明
ペンギンが右端にいる場合の判定処理です。
向きによって実行できない進み方を0にします。- コードの詳細
ペンギンが右端にいる場合のみ判定を実行します。
右を向いている場合は正面に壁があり直進できないので 直進可を0にします。- 上を向いている場合は右側に壁があり右折できないので
右折可を0にします。
- 下を向いている場合は左側に壁があり左折できないので
左折可を0にします。
- 左を向いている場合は影響がないので何もしません。
可能方向更新-左端
-
- 説明
ペンギンが左端にいる場合の判定処理です。
向きによって実行できない進み方を0にします。- コードの詳細
ペンギンが左端にいる場合のみ判定を実行します。
左を向いている場合は正面に壁があり直進できないので 直進可を0にします。- 上を向いている場合は左側に壁があり左折できないので
左折可を0にします。
- 下を向いている場合は右側に壁があり右折できないので
右折可を0にします。
- 右を向いている場合は影響がないので何もしません。
可能方向更新-上端
-
- 説明
ペンギンが上端にいる場合の判定処理です。
向きによって実行できない進み方を0にします。- コードの詳細
ペンギンが上端にいる場合のみ判定を実行します。
上を向いている場合は正面に壁があり直進できないので 直進可を0にします。
- 右を向いている場合は左側に壁があり左折できないので
左折可を0にします。
- 左を向いている場合は右側に壁があり右折できないので
右折可を0にします。
- 下を向いている場合は影響がないので何もしません。
可能方向更新-下端
-
- 説明
ペンギンが下端にいる場合の判定処理です。
向きによって実行できない進み方を0にします。- コードの詳細
ペンギンが下端にいる場合のみ判定を実行します。
下を向いている場合は正面に壁があり直進できないので 直進可を0にします。- 左を向いている場合は左側に壁があり左折できないので
左折可を0にします。
- 右を向いている場合は右側に壁があり右折できないので
右折可を0にします。
- 上を向いている場合は影響がないので何もしません。
- 左上端
- 上端
- 右上端
- 左端
- 端以外
- 右端
- 左下隅
- 下隅
- 右下隅
移動
-
- 説明
ペンギンを移動させます。
移動後に上下左右の端を超えてしまっている場合は端の座標にします。- コードの詳細
移動中を実行します。 x座標が 右端よりも大きい(右端を超えてしまっている)場合は x座標の値を 右端にします。
x座標が 左端 よりも小さい(左端を超えてしまっている)場合は x座標の値を 左端にします。
y座標が 上端 よりも大きい(上端を超えてしまっている)場合は y座標の値を 上端にします。
y座標が 下端 よりも小さい(下端を超えてしまっている)場合は y座標の値を 下端にします。
移動中
-
- 説明
交差点から次の交差点まで移動します。
移動する方向は直進、右折、左折からランダムに選択します。- コードの詳細
方向を決めるを実行します。 進んだ回数を0にします。 Aの処理を32回くり返して64歩移動します(交差点から次の交差点まで移動します)。
- A :
2歩動かします。
もし炎に触れたら 炎に触れたを実行した後に、このクローンを削除します。
もし爆弾に触れたら 爆弾に触れたを実行した後に、このスクリプトを止めます。
(爆弾に触れる前の交差点まで戻ります)。炎、爆弾のどちらにも触れなかった場合は 進んだ回数を1増やします。 くり返しが完了したら進んだ回数を0に戻します。
方向を決める
-
- 説明
交差点で直進、右折、左折、反転のうちのどの方向に進むのかを決めます(基本的に反転するケースはなし)。
- コードの詳細
目の前に壁があって直進が可能(直進可=1)ならA、直進不可( 直進可=0)ならBを実行します。
- A :
左右のどちらかに曲がれる場合は50%の確率で直進し、 50%の確率で左右を決める を実行して左右のどちらに曲がるのかを決定します。
左右のどちらにも壁があって曲がれない場合( 右折可、 左折可がどちらも0)は直進します
(ただしこの判定は交差点でおこなう、基本的にどちらも壁であるケースはありません)。 - B :
左右のどちらかに曲がれる場合は 左右を決めるを実行して左右のどちらに曲がるのかを決定します。
左右のどちらにも壁があって曲がれない場合( 右折可、 左折可 がどちらも0)は反転します(180度回して逆方向を向きます)
(ただしこの判定は交差点でおこなう、基本的にどちらも壁であるケースはありません)。 コスチューム更新 を実行してペンギンの見た目の向きを変更します。
左右を決める
-
- 説明
交差点で右折、左折のどちらをおこなうのかを決めます。
- コードの詳細
もし右折不可(右折可=0)なら 向きを左に90度回して左折します。
右折可(右折可=1である場合はAの処理を実行します。
- A :
もし左折不可(左折可=0)なら 向きを右に90度回して右折します。
もし左折も可能(左折可=1)なら 同じ確率で左右のどちらに曲がります(左右どちらかに90度回します)。
交差点で進む方向の確率
-
- 説明
3方向すべてに移動可。
まず直進するのか曲がるのかをランダムに決定します。
直進する確率を50%、曲がる確率を50%としています。
左右に曲がる場合、左折する確率を50%、右折する確率を50%としています。
3つのうちのどの方向に進むかの確率は直進が50%、左折が25%、右折が25%となります。
-
- 説明
3つのうちの2つの方向に移動可。
まず直進するのか曲がるのかをランダムに決定します。
直進する確率を50%、曲がる確率を50%としています。
左右に曲がる場合、移動できる方向に曲がります。
2つのうちのどの方向に進むかの確率は直進が50%、左折または右折が50%となります。
-
- 説明
3つのうちの1つの方向にのみ移動可。
移動できる方向に進みます。
炎に触れた
-
- 説明
炎に触れたらコスチュームをダメージにした状態で2秒表示し、クローンを削除します。
この時スコアを加算します。
- コードの詳細
コスチュームをダメージにし、 スコアを1増やして2秒待ちます。
爆弾に触れた
-
- 説明
爆弾に触れたら反転します。
- コードの詳細
爆弾に触れたら後ろに2歩戻り、向きを180度回して逆方向にします。
コスチューム更新を実行してペンギンの見た目の向きを変更します。
2歩×進んだ回数だけ移動して交差点まで移動します。
くり返しが完了したら進んだ回数を0に戻します。
コスチューム更新
-
- 説明
実際の向きと見た目の向きが合うようにコスチュームを変更します。
- コードの詳細
向きの絶対値が45度より小さい場合(-45度< 向き<45度)はコスチュームを 後ろにします。
向きの絶対値が45度以上で135度より小さい場合 (-135度<向き<-45度または45度< 向き<135度)はコスチュームを 横にします。
向きの絶対値が135度以上の場合( 向き<-135度または 向き>135度)はコスチュームを 前にします。
爆弾
主な動き
- スペースキーを押すとPlayerと同じ座標に爆弾が1個置かれます
(Playerが爆弾のクローンを作ります)。 - 置いてから約3秒後に爆発します(同じ座標に炎のクローンを作ります)。
- 他の爆弾の爆発による炎に触れるとすぐに爆発します。
クローンされたとき
-
- 説明
Playerと同じ座標に表示し、ふくらんだり縮んだりした後に爆発します。
炎に触れたらその時点ですぐに爆発します。
- コードの詳細
x座標を Playerのx座標にします。
y座標を Playerのy座標にします。
コスチュームを爆弾1にして表示します。 0.2秒待ちます。Aの処理を5回くり返します。
- A :
炎に触れたら 爆発を実行し、 1秒待ってからクローンを削除します。
コスチュームを爆発1と 爆発2で交互に入れ替えます。 くり返しが終わったら爆発を 実行し、1秒待ってからクローンを削除します。
爆発
-
- 説明
爆発音を鳴らし、炎のクローンを作ります。
炎のクローンは爆発した爆弾と同じ座標に表示されます。
- コードの詳細
非表示にします。
drum bass3の音を鳴らします。
爆心地Xをx座標にします。
爆心地Yをy座標にします。爆発した爆弾と同じ座標に炎のクローンを表示するために 爆心地X、 爆心地Yに爆弾の座標をコピーしています。
炎のクローンを作ります。使用中の爆弾数を1減らします。
炎
主な動き
- 爆弾が爆発すると、まずその位置に炎が1つ作られ、そこから上下左右の4方向に広がっていきます (爆弾が1つ目の炎のクローンを作り、外に広がっていく炎のクローンは炎が作ります)。
- 爆発した場所に作られた1つ目の炎は上下左右それぞれに向けた炎のクローンを1つずつ作ります。 作られた炎は外側に向かって少し移動し、同じ方向を向いた炎のクローンを1つ作ります。 新しく作られた炎も外側に向かって少し移動し、同じ方向を向いた炎のクローンを1つ作ります。 これをくり返して各方向に炎が広がっていきます。
- 壁に当たったらそれ以上は広がりません。
クローンされたとき
-
- 説明
まず爆発の中心にクローンが作られ、そこから上下左右の向きの炎のクローンを1つずつ(計4つ)作ります。
作られたクローンはそれぞれの向きに移動した後に爆発の外側に向かって同じ向きのクローンを1つ作ります。
その作られたクローンがさらに外側に移動して1つクローンを作るという処理を 続けていくことで炎が徐々に外側に広がっていくようにします。
- コードの詳細
爆発の中心に作られたクローン(タイプ=1)であれば 中心の炎を実行し、 1秒後にこのクローンを削除します。
2つ目以降のクローン( タイプが2以上)であれば 2つ目以降の炎を実行し、 0.5秒後にこのクローンを削除します。
中心の炎
-
- 説明
爆発直後に爆発の中心に作られた最初の炎の処理です。
上下左右の方向に広がっていく4つの炎のクローンを作ります。
- コードの詳細
x座標を 爆心地Xにします。
y座標を 爆心地Yにします。
爆発した爆弾と同じ座標に表示します。
向きを 上向きにしてクローンを作ります。 (上方向へ広がっていきます。)
同じように右向き、 下向き、 左向きのクローンを作ります。
2つ目以降の炎
-
- 説明
2つ目以降の炎の処理です。
向いている方向に移動した後、同じ向きのクローンを作ります。
それぞれのクローンが外側に移動するクローンを1つずつ作っていくことで外側に炎が広がっていくようにします。
- コードの詳細
上向き、 下向きのクローンは 縦移動を実行します。
右向き、 左向きのクローンは 横移動を実行します。
2番目(タイプ=2)、 3番目(タイプ=3)の場合はクローンを作ります。
4番目(タイプ=4)の場合はクローンを作らず、 炎の広がりはここまでとします。
縦移動
-
- 説明
炎を縦方向(上または下)に移動します。
縦方向の道の中央から左右にそれぞれ一定の幅(9)の中に 炎のx座標がある場合のみ縦の方向へ移動します。
縦方向へ移動する際には、炎のx座標 をずらして縦方向の道の中央へ合わせます
(x座標が横方向へ移動できる範囲にあるかどうかの判定と縦方向の 道の中央へ合わせるためにx座標をずらす量の計算は 道通過判定でおこないます)。
- コードの詳細
道通過判定を実行します。
対象としてx座標を渡します。 縦方向の道の中心からのx座標 のズレが通れる幅におさまっていない場合は 座標をずらす量に( 通れる幅の半分(9)+1)が入ってくるので、 その場合は次の処理(縦への移動)へ進まずにスクリプトを終了します。
ズレが通れる幅におさまっている場合は以降の処理を実行します。
炎のx座標を 座標をずらす量だけ変えて、 縦方向の道の中央に合わせます。
縦に移動する を実行して向いている方向に移動させます。
縦に移動する
-
- 説明
炎を縦方向(上または下)に32(4×8)歩移動させます。
途中で端に到達した場合はそこで移動を終了します。
- コードの詳細
Aの処理を8回くり返します。
- A :
端までの距離が4より小さく ((端の座標- y座標)の絶対値 < 4)、 4歩動かすと端を超えてしまう場合は y座標を 端の座標にして移動を終了します。
端までの距離が4以上ある場合は4歩動かします。
絶対値を比較することで上下どちらに移動する場合でも同じように判定できるようにしています。
横移動
-
- 説明
炎を横方向(左または右)に移動します。
横方向の道の中央から上下にそれぞれ一定の幅(9)の中に 炎のy座標がある場合のみ横の方向へ移動します。
横方向へ移動する際には、炎のy座標 をずらして横方向の道の中央へ合わせます
(y座標が横方向へ移動できる範囲にあるかどうかの判定と横方向の道の中央へ 合わせるためにy座標をずらす量の計算は 道通過判定でおこないます)。
- コードの詳細
道通過判定を実行します。対象として y座標を渡します。
横方向の道の中心からのy座標 のズレが通れる幅におさまっていない場合は 座標をずらす量に (通れる幅の半分(9)+1)が入ってくるので、その場合は次の処理 (横への移動)へ進まずにスクリプトを終了します。
ズレが通れる幅におさまっている場合は以降の処理を実行します。
炎のy座標を 座標をずらす量だけ変えて、 横方向の道の中央に合わせます。
横に移動する を実行して向いている方向に移動させます。
横移動中
-
- 説明
炎を横方向(左または右)に32(4×8)歩移動させます。
途中で端に到達した場合はそこで移動を終了します。
- コードの詳細
Aの処理を8回くり返します。
- A :
端までの距離が4より小さく((端の座標- x座標)の絶対値 < 4) 、4歩動かすと端を超えてしまう場合はx座標を 端の座標にして移動を終了します。
端までの距離が4以上ある場合は4歩動かします。
絶対値を比較することで左右どちらに移動する場合でも同じように判定できるようにしています。
-
- タイプ1
爆弾が爆発する際に炎のクローン(タイプ1)が作られます。
爆発した爆弾と同じ位置に表示。
同じ位置に炎のクローン(タイプ2)を4つ作ります。クローンのそれぞれの向きは上下左右にします。
-
- タイプ2
炎のクローン(タイプ1)から炎のクローン(タイプ2)が4つ作られます。
作られたらそれぞれの向きに4×8=32だけ移動します。
同じ位置に同じ向きの炎のクローン(タイプ3)を1つ作ります。
-
- タイプ3
炎のクローン(タイプ2)から炎のクローン(タイプ3)が1つずつ作られます。
作られたらそれぞれの向きに4×8=32だけ移動します。
同じ位置に同じ向きの炎のクローン(タイプ4)を1つ作ります。
-
- タイプ4
炎のクローン(タイプ3)から炎のクローン(タイプ4)が1つずつ作られます。
作られたらそれぞれの向きに4×8=32だけ移動します。
タイプ4はあらたなクローンを作りません。
道通過判定
-
- 説明
進行方向の道の中央からの炎の位置のズレが通れる幅の半分(9)の 中にある場合のみ進行方向への移動可と判定します。
また進行方向へ移動する際には、炎の位置をずらして進行方向の道の中央へ合わせます。 そのずらす量(座標をずらす量)もこのスクリプト内で計算します。
進行方向の道の中央からの炎の位置のズレが大きく、通過できないと判定した場合は 座標をずらす量を 通れる幅の半分(9)+1としておきます。
- コードの詳細
座標を 道の中心の間隔(64)で 割った余りを計算します
(進行方向の道の中央からのズレの大きさを計算しています)。
割った余りの 大きさに応じて以下のA、B、Cのいずれかを実行します。
- A :
割った余りが 通れる幅の半分(9)以下である場合 (進行方向の道の中央に対するPlayerのプラス方向へのズレが 通れる幅の半分(9)以下である場合)
-割った余りを 座標をずらす量にします (座標をマイナス方向に割った余り分だけずらします)。 - B :
(道の中心の間隔(64)- 割った余り)が 通れる幅の半分(9)以下である場合 (進行方向の道の中央に対する炎のマイナス方向へのズレが 通れる幅の半分(9)以下である場合)
(道の中心の間隔(64)- 割った余り)を 座標をずらす量にします。 (座標をプラス方向に(道の中心の間隔(64)- 割った余り)だけずらします)。 - C :
それ以外の場合 (進行方向の道の中央と炎の中心との距離が 通れる幅の半分より大きい場合)
座標をずらす量を( 通れる幅の半分(9)+1)にしておきます (こうしておくことで次の処理(横への移動)へ進まずにスクリプトを終了するようにします)。
煙
主な動き
- ペンギンを出現させる際に、予告としてその位置に先に煙を3秒程表示します (ペンギンが煙のクローンを作ります)。
- 最初は薄く表示し、徐々に濃くしていきます。
がクリックされたとき
- 非表示にします。
クローンされたとき
-
- 説明
ペンギンが出現する直前に表示します。
- コードの詳細
ghostの効果を50にします。
x座標を煙X× 道の中心の間隔にします。
y座標を煙Y× 道の中心の間隔にします。
表示します。
Aの処理を5回くり返した後にこのクローンを削除します (大きくしたり小さくしたりをくり返しながら徐々に濃くしています)。
- A :
ghostの効果を10減らします(濃くします)。
60%、100%と交互に大きさを変えます。
GAME OVER
主な動き
- からgame overが送られてきたら画面中央の前面に表示し、すべてを止める。
がクリックされたとき
- 非表示にします。
大きさを50%にします。
x座標を0、 y座標を0(画面中央)にします。
GAME OVERを受け取ったら
- 3秒待ってから前に出して表示した後、すべてを止めます。
Start
主な動き
- がクリックされたらコスチュームをStartにして表示する。
- クリックされたら各スプライトへStartを送り、 非表示にする(各スプライト Startを受け取ってゲーム開始)。
緑の旗がクリックされたとき
-
- 説明
- ゲームスタートの準備をする。
- 必要な処理
- 座標の初期化
Startの表示
マウスポインターが上に乗ったとき色を変える - コードの詳細
-
x座標(横の表示位置)を0、 y座標(縦の表示位置)を0にします。
コスチュームをStartにして表示します。 (ゲーム終了時は非表示になっているため)
マウスポインターがこのスプライトに触れているときは色を変え、 離れたら元の色に戻します。
このスプライトがクリックされたとき
-
- コードの詳細
-
コード「 緑の旗がクリックされたとき」が動作しているので、止めます。
各スプライトにStartを送りゲームを開始します。