プログラムの中身を詳しくみてみましょう
ビームを撃って敵を倒すゲームのスクリプトについてスプライトごとに解説します。
自機
主な動き
- キーボードの左(←)キーと、右(→)キーで、左右に移動する。
- に当たったら元気を1減らし、音を鳴らして点滅する。
- に当たって元気が1になったら コスチュームを (ダメージ)にし、へ 瀕死を送る。
- に当たって元気が0になったら コスチュームを にし、(ステージ)と へgame overを送る。
- から回復が送られてきたら コスチュームを(正常)にする。
「Start」を受け取ったとき
-
- 説明
Startを受け取ったとき、敵の数が敵の列数 ×敵の行数 に達するのを(敵の配置が完了するのを)待ってから、自機を操作する処理を開始します。
右向き矢印(→)キーが押されたら右へ、左向き矢印(←)キーが押されたら左へ移動します。
敵ビームに当たってしまった場合は元気が1つ減ります。
- 必要な処理
- 1. 変数の初期化
- 2. 左右矢印キー(←→)が押された時の左右への移動
- 3. 敵ビームに触れてしまった時の処理
- コードの詳細
-
敵の数 が敵の列数×敵の行数 に達する(敵の配置が完了する)まで待ちます。
敵の配置が完了したらAの処理をくり返します。
- A :
横に動かすを実行します。
敵ビームに触れた時に、 無敵状態でなかったら(無敵状態=0なら)以下のBの処理をします。
(敵ビームに触れても、無敵状態 (無敵状態=0以外)であったら何もしません。) - B :
元気を1減らします。
もし元気が0になってしまったら game overを送り、スクリプトを止めます。
無敵状態(無敵状態=1)にし、 敵ビームに当たってしまってから一定時間は、 さらに敵ビームに当たってしまっても元気が減らないようにします。
攻撃を受けたの音を鳴らします。
攻撃を受けたを送ります。
敵ビームに当たってしまった時の処理をこのループ内でおこなうと、 その間は左右のキーで自機を動かすことができなくなるため、メッセージを送った先でおこなうようにしています。 (敵ビームに当たってしまった時の処理と左右のキーが押された時の処理が並行しておこなわれるようにします。)
もし元気が1になってしまったら 瀕死を送り、コスチュームをダメージにします。
初期化
-
- 説明
各変数を初期化し、初期状態にして表示します。
- コードの詳細
コスチュームを正常にし、 ちょうどよい大きさにするために大きさを18%にしています。
(コスチュームを最初から小さくしておけば大きさを変更しなくても大丈夫です)
右端を210、左端 を-210にします。これは左右に移動できる 範囲を 設定しています。
x座標を左端(-210)、 y座標を-150にします。
元気を2にします。 (敵の弾に当たると1ずつ減り、ハートを取ると1ずつ増えます。0になるとゲームオーバーとなります。)
無敵状態を0にします。
動く速さを6にします。(左右の矢印キーを押すと6ずつ移動します。)
表示します。
横に動かす
-
- 説明
左右の矢印キーで自機を横に動かすための処理です。
- コードの詳細
右向き矢印キーが押されていたら x座標を 動く速さずつ変えます。(右に 動く速さずつ動かします)
ただし、移動後に右端を超えてしまう位置にいる場合はx座標を 右端にします。
左向き矢印キーが押されていたら x座標を- 動く速さずつ変えます。(左に 動く速さずつ動かします)
ただし、移動後に左端を超えてしまう位置にいる場合はx座標を 左端にします。
「攻撃を受けた」を受け取ったとき
-
- 説明
敵ビームに当たってしまった時に実行します。
自機を点滅させ、0.5秒待った後に無敵状態を解除します。
- コードの詳細
隠して0.1秒待つ、 表示して0.1秒待つをくり返して点滅させます。
0.5秒待った後に無敵状態を0にして無敵状態を解除します。
GAME OVERを受け取ったとき
-
- 説明
敵ビームに当たり、元気が0になってしまった時に実行します。
自機が 爆発しているように見せます。
- コードの詳細
念のため元気を0にします。
コスチュームの爆発2と 爆発1を0.3秒ごとに交互に表示し続けます。
回復を受け取ったとき
- ハートをキャッチするとハートから回復が送られてきます。
コスチュームを正常にします。
自機のビーム
主な動き
- スペースキーが押されたら発射する(自機がいる位置から上に向かって移動する)。
- やから 撃墜 が送られてきたら隠す(非表示にする)。
がクリックされたとき
- 非表示にし、他のスプライトと重なった際に後ろに表示されるように30層下げます。
(他のどのスプライトよりも下の層 にあればよいので必ずしも30層である 必要はありません)
スペースキーが押されたとき
-
- 説明
ビームを発射します。
自機と同じ座標から表示し、上の端に着くまで上方向に10ずつ進みます。
(敵や敵のビームに当たったら非表示にしますが、その処理は 撃墜 を受け取ったときのほうで書きます)
- コードの詳細
元気が0の場合は何もせずにスクリプトを止めます。
x座標、 y座標を自機と同じ座標にします。
非表示から表示へ変更します。
zoopの音を鳴らします。
端に触れるまでy座標 を10ずつ変える処理をくり返し、上に向かって動いていくようにします。
端に触れたら隠します。
以下のコードはどちらも、同じ動きになります。
撃墜を受け取ったとき
- 自機のビームが敵に当たった時にこのメッセージが送られてきます。
隠してから、このスプライトの他のスクリプトを止めます。
(自機のビームが敵もしくは敵のビームに当たると 撃墜が送られてきます)
敵
主な動き
- ゲーム開始時に敵の列数
×敵の行数(10×5)のクローンを作って並べる。
すべてのクローンを並べ終わったら配置完了を送る。 - それぞれのクローンがランダムに敵ビームを発射する。
- 配置完了直後は移動せず、6体以上倒されたらそれぞれが横方向へ動き始める。
左右のどちらに向かって動き出すのかはクローンごとにランダムに決定する。
端に着いたらはね返る。 - 自機のビームに当たったら音を鳴らし、
コスチュームをダメージにする。
敵の数を1減らし、スコアを1増やす。
0.5秒たったらこのクローンを削除する。 - 自機のビームに当たったら自機のビームへ 撃墜を送る。
- 画面上のすべてのクローンがすべてうち落とされ 敵の数が0になったら、 自分自身に配置開始を送り、再度 敵の列数× 敵の行数(10×4)のクローンを作って並べる。
がクリックされたとき
-
- 説明
各変数を初期化し、配置開始を送ります。
- コードの詳細
回転方法を回転しないにします。
ブロックで指定せずにスプライトのinfo内の回転の種類を回転しない にしても同じ効果があります。
大きさを40%にして非表示にします。
横の間隔(各クローンのx座標の間隔)、 縦の間隔(各クローンのy座標の間隔)をそれぞれ30にします。
敵の行数を5行、 敵の列数を10列にします。
上端の行のy座標を110にします。
横の間隔と 敵の列数から 右端の列のx座標を計算します。
左端の列のx座標を- 右端の列のx座標にします。
クローン?をnoにします。
「Start」を受け取ったとき
- 配置開始を送ります。
配置開始を受け取ったとき
-
- 説明
50個のクローンを作り、横に10列、縦に5行で並べます。
まず左上から10個のクローンを作り、横10列に配置します。
それを5行分くり返します。
配置が終わったら配置完了を送ります。
- コードの詳細
配置開始を クローンが受け取った場合はそのクローンを削除します。
クローンでない場合のみ以下の処理を実行します。
画面に表示されている敵の数を表す敵の数 を一旦0にします。
(左端の列のx座標, 上端の行のy座標)(左上)に自分自身のクローンを作り、 敵の数を1増やします。
x座標を 横の間隔だけ増やします。(1列分、右にずれます)
これを敵の列数(10列)分並べるまでくり返します。
これで1行分の配置が完了です。
完了したらy座標を 縦の間隔だけ減らします。(1行分、下にずれます)
x座標を 左端の列のx座標にします。 (左端の列に移動します)
同じように敵の列数分並べて2行目を配置します。
これを敵の行数(5行)分並べるまでくり返します。
すべての配置が完了したら配置完了を送ります。
配置完了を受け取ったとき
-
- 説明
敵がすべて倒されたら敵を再度配置します。
- コードの詳細
配置完了 をクローンが受け取った場合は何もせずにこのスクリプトを止めます。
(そうしないと存在しているクローンの数だけ以下の処理が実行されてしまいます。)
敵の数が0以下になるまで待ちます。
(なんらかの理由で0未満になってしまった場合に備えて念のため0未満も判定条件に加えています)
敵の数が0以下になったらスプライトの他のスクリプトを止めます。
1秒待ってからスコア を5増やして配置開始を送ります。
クローンされたとき
3つの処理を並行で開始します。
-
- 説明
自機のビームに当たった時の処理です。
- コードの詳細
クローン? をyesにして自身がクローンであることを判別できるようにします。
コスチュームを通常にして表示します。
以下のAの処理をずっとくり返します。
- A :
自機のビームに触れた ら以下のBの処理をします。
- B :
撃墜を送ります。 (自機のビームが受け取り、非表示になります。)
popの音を鳴らします。
コスチュームを ダメージにします。
0.5秒待ちます。
敵の数を1減らします。
スコアを1増やします。
倒した敵の数を1増やします。
このクローンを削除します。
-
- 説明
ランダムに敵ビームを発射します。
各クローンで並行して実行されます。
- コードの詳細
2秒待ってからAの処理をくり返すことで敵ビームを発射します。
- A :
1秒~10秒の間待機します。(乱数を使って決定します)
1から10までの乱数を 発生させ1から4だった場合にビームを発射します。(発射する確率は40%)
ビーム発射処理を開始したら全クローンで共用する攻撃中 を1にし、1の間は他のクローンはビームを発射しないようにします。
(他のどのクローンも攻撃中でない場合のみビームを発射します。)
攻撃中は敵ビームの クローンされたときの中で0に戻します。
敵ビームの発射位置となる敵X、 敵Yを発射するクローンの x座標、y座標にします。
敵X、敵Yは 「敵ビーム」のスプライトでも使うため、すべてのスプライト用としています。
敵ビームのクローンを作ります。 - <補足>
自機のビームの時には x座標(自機)、 y座標(自機)を使ってビームの発射位置を指定していますが、 自機はクローンを作らないためその方法が使えました。
敵ビームの時に x座標(敵)、 y座標(敵)を使うと、 発射した敵の座標ではなく、クローン元となった敵の座標から発射されてしまいます。
そのため発射したクローンの座標を敵X、 敵Yに代入して敵ビームに渡しています。
複数のクローンが同時にビームを発射できないようにしている理由は2つあります。 - 理由1 :
敵X、敵Y は全体で1つのものを各クローンで使用するため、同時に使われないようにしています。
複数のクローンが同時に使用してしまうと、発射されるべき場所から発射されない可能性があります。 - 理由2 :
同時に発射できるようにすると敵ビームが多すぎてしまう場合があります。
ビームを発射する確率を下げれば減りますが、 そうすると逆にまったく発射されないこともあり、敵ビームの発射に偏りが出てしまいます。
まんべんなく発射されるようにするために複数のクローンが同時に発射をしないようにしています。
-
- 説明
敵を6匹以上倒されるまで待ちます。
(敵の数が(敵の列数× 敵の行数-5)より少なくなるまで待ちます。)
敵が6匹以上倒されたらそれぞれが横への移動を開始するようにします。
左右のどちらの方向へ移動を開始するのかは各クローンでランダムに決定します。
端に着いたらはね返ります。
敵のビーム
向きを180°(下向き)にします。
主な動き
- 敵が敵ビームのクローンを作る。発射した敵(クローン)と同じ座標から表示し、
下の端に触れるまで下方向に進める。
自機のビームに触れたら自機のビームへ撃墜を送り、 このクローンを削除する。
がクリックされたとき
- 大きさを20%にして非表示にします。
#コスチュームのエディター等であらかじめ小さくしておいても構いません。
クローンされたとき(敵から発射されたとき)
-
- 説明
発射した敵(クローン)と同じ座標から表示し、下の端に触れるまで下方向に進めます。
自機のビームに触れたら撃墜を送り、このクローンを削除します。
- コードの詳細
x座標、y座標 を発射した敵と同じ座標にします。
#ここでx座標(敵)、 y座標(敵)ブロックを使用すると発射した敵ではなく、 クローン元となった敵の座標から発射されてしまうため、 敵X、敵Yを 使用して発射した敵の座標を受け取っています。
攻撃中を0に戻します。
前に出して表示します。
端に触れるまで5歩ずつ動かします。(下方向に進めます)
もし自機のビームに触れたら 撃墜を送り、 popの音を鳴らし、 コスチュームを爆発にします。 そして0.5秒待ってからクローンを削除します。
端に触れた場合もクローンを削除します。
ハート
主な動き
- 一定時間ごとに自分自身のクローンを作り、そのクローンが上から落ちる。
落ちる際のx座標はランダムに決定する。
元気の値が高くなるほどクローンを作る間隔を長くする。 (ハートを出にくくする) - (正常)に触ったら音を鳴らし、 元気を1増やしてからこのクローンを削除する。
- (正常)に触ったら 正常へ回復を送る。
「Start」を受け取ったとき
-
- 説明
Startを受け取ったとき、各変数を初期化し、60秒後から定期的にクローンを作ります。
元気の状態によってハートが出現する間隔を変更します。
(元気の値が大きいほど出現しにくくします。)
- コードの詳細
60秒待ってからAの処理をずっとくり返します。
- A :
自分自身のクローンを作ります。
もし元気が1(2未満)なら ハートの出現間隔を10秒にします。
元気が2(3未満)なら 出現間隔を30秒にします。
それ以外(3以上)なら 出現間隔を60秒にします。
ハートの出現間隔秒待ってから次のクローンを作ります。
初期化
-
- 説明
各変数を初期化して初期状態にします。
クローン?をnoにします。
瀕死を受け取ったとき
- クローン?がnoの場合
(クローン以外が受け取った場合)のみ5秒後にクローンを作ります。
(敵ビームに当たってしまい元気が 1になったら5秒後にハートを出現させます)。
クローンされたとき
-
- 説明
画面の上の端から下の端まで進みます。
x座標はランダムに決定します。
自機に触れたら元気を1つ増やし、 回復を送ります。
(自機のコスチュームがダメージだったら正常に戻します。)
- 必要な処理
- 1. 変数の初期化
- 2. 上の端から下の端まで5ずつ移動
- 3. 自機に触れた時の処理
- コードの詳細
クローン?をyesにして 自身がクローンであることを判別できるようにします。
y座標を180にします。
x座標を-210から210のいずれかにします。
(乱数を使ってランダムに決定します)
前に出して表示します。
y座標が-140より 小さくなるまで以下のAの処理をくり返します。
- A :
y座標を-5ずつ変えます。(下方向に動かします)
もし 自機に触れたら以下のBの処理をします。 - B :
popの音を鳴らします。
(自機の)元気を1増やします。
キャッチしたハートを1増やします。
回復を送ります。
このクローンを削除します。 y座標が-140より 小さくなりループを抜けたらコスチュームを star3-bにします。
落としたハートを1増やします。
0.5秒待ってからクローンを削除します。
ステージ
主な動き
- がクリックされたらプレイ時間を計る タイマーをリセットし、各変数を初期化する。
- Startを受け取ったとき dance aroundをくり返し再生する。
- 正常からGAME OVERが送られてきたら GAME OVERの音を鳴らし、 プレイ時間やキャッチしたハートの数、倒した敵の数などを画面に表示する。
がクリックされたとき
- プレイ時間を計るタイマーを0にして、各変数を初期化します。
「Start」を受け取ったとき
- 音量を30%にする。終わるまでdance aroundを流します。
GAME OVERを受け取ったら
- GAME OVER の音を鳴らし、プレイ時間や倒した敵の数などを画面に表示した後にステージの他のスクリプトを止めます。
GAME OVER
主な動き
- から GAME OVERが送られてきたら画面中央の前面に表示する。
がクリックされたとき
- 非表示にします。
大きさを50%にします。
x座標を0、 y座標を0(画面中央)にします。
GAME OVERを受け取ったら
- 3秒待ってから前に出して表示します。
Start
主な動き
- がクリックされたらコスチュームをStartにして表示する。
- クリックされたら各スプライトへStartを送り、 非表示にする(各スプライト Startを受け取ってゲーム開始)。
緑の旗がクリックされたとき
-
- 説明
- ゲームスタートの準備をする。
- 必要な処理
- 座標の初期化
Startの表示
マウスポインターが上に乗ったとき色を変える - コードの詳細
-
x座標(横の表示位置)を0、 y座標(縦の表示位置)を0にします。
コスチュームをStartにして表示します。 (ゲーム終了時は非表示になっているため)
マウスポインターがこのスプライトに触れているときは色を変え、 離れたら元の色に戻します。
このスプライトがクリックされたとき
-
- コードの詳細
-
コード「 緑の旗がクリックされたとき」が動作しているので、止めます。
各スプライトにStartを送りゲームを開始します。