最終更新日:2024年8月21日
お知らせ
スイカゲーム(上級編)の作り方も用意しています。初級編ができた人は、ぜひチャレンジしてみてください!
今日のポイント
① 自分のスプライト(同じ種類のフルーツ)に当たったかどうかの判定方法
② スプライト(フルーツ)が当たって進化するときは、進化が二回実行されないようにする
目次
![ad-earth-shop-online](https://earth-shop.net/wp-content/uploads/20_articles/1_common/ad-earth-shop-online.png)
1.【はじめに】完成した作品を見る
フルーツの進化の順序は次の順番にしました。
動画で確認する
コードの中身を確認する
主なスプライトと役割
① プレイヤー
「プレイヤー」を押すと、フルーツを地面に向かって落とすことができます。
左右の矢印キーで移動できます。
② 地面に落ちるフルーツ
プレイヤーによって落とされます。
地面に当たるか、他のフルーツに当たるまで下に落ちていきます。
もし同じフルーツに当たったら、フルーツが進化します。
スイカ同士が当たった場合は、どちらのスイカも消えます。
③ 地面
フルーツが地面に落ちたかどうか判定するために用意します。
コードはありません。
コードの中身
① プレイヤー
「次に落とすフルーツを選ぶ」と「フルーツを落とす」の2つのブロック定義を作成します。
「緑の旗が押されたとき」、ブロック定義「次に落とすフルーツを選ぶ」を実行して見た目を変えます。プレイヤーが「地面に落ちるフルーツ」のいずれかと当たったらゲームオーバーとします。「プレイヤーが押されたとき」、表示されているフルーツを落とします。
② 地面に落ちるフルーツ
下図の赤枠の部分は、フルーツをどこに表示させるかというコードです。同じ種類のフルーツ同士が当たって進化する場合は、フルーツ同士が当たった場所に進化後のフルーツを出現させます。プレイヤーが上から落とすフルーツの場合は、「プレイヤー」のいる位置にフルーツを出現させます。
青枠の部分は、地面に触れるまで下に落ちていくコードです。落ちながら、他のフルーツに触れるかどうかチェックしています。もし触れた場合は、「このスクリプトを止める」を実行して、下に落ちるのを止めています。
下図は、フルーツの進化に関するコードです。進化する場合は、「進化前のx座標」と「進化前のy座標」に今のフルーツの座標を保存します。進化後のフルーツの最初の位置は、保存した座標にします。
下図のコードは「リンゴ」のスプライトのコードです。「リンゴ」同士に触れたかどうか確認し、進化する場合は、「バナナのクローンを作る(赤枠内の一番したのブロック)」ようにしています。「イチゴ」や「バナナ」、「スイカ」のスプライトもほとんど同じコードですが、何に触れたか、といった条件や進化するフルーツが変わります。
2. 【詳しく】プログラムの解説
① プレイヤー
プレイヤーのコスチュームは、下図の赤枠内の3つ(イチゴ、リンゴ、バナナ)用意します。
(1). ブロック定義「次に落とすフルーツを選ぶ」
コスチュームの表示を変更します。
その際、1から3までの乱数を使い、コスチュームを番号を指定して変更します。
1から3までとしたのは、プレイヤーのコスチュームの数が3つあるためです。
フルーツの数を増やす場合は、コスチュームを追加して乱数の数字も変更します。
(2). ブロック定義「フルーツを落とす」
フルーツを落とすとき、プレイヤーで表示している同じ種類のフルーツを落とします。
プレイヤーで表示しているフルーツは、「コスチュームの番号」で分かります。
例えば「コスチュームの番号=1」なら、プレイヤーは「イチゴ」を表示しています。
落とすフルーツのクローンを作成します。
(3). 緑の旗が押されたとき
プレイヤーを最初の位置(0, 150)に戻します。
ブロック定義「次に落とすフルーツを選ぶ」を実行します。
次に落とすフルーツを表示します。
(4). このスプライトが押されたとき(フルーツを落とします)
プレイヤーのフルーツを隠します。(これがないとすぐにゲームオーバーになってしまいます)
ブロック定義「フルーツを落とす」を実行します。
1 秒待ちます。(これがないとすぐにゲームオーバーになってしまいます)
ブロック定義「次に落とすフルーツを選ぶ」を実行します。
次に落とすフルーツを表示します。
② 地面に落ちるフルーツ
グローバル変数「進化する?」
[Yes] か [No] が入ります。フルーツがクローンされるときは2パターンあります。一つ目は、プレイヤーが上からフルーツを落とすときです。二つ目は、フルーツ同士が当たって次のフルーツに進化するときです。この2パターンを場合分けするために、「進化する?」という変数を使います。
グローバル変数「進化前のx座標」、「進化前のy座標」
同じ種類のフルーツが触れ合ったときの位置(「x座標」と「y座標」)を保存します。進化後のフルーツの最初の位置をこの座標に設定します。こうすることで、進化後のフルーツの位置を、フルーツが触れ合ったときの場所にすることができます。
(1). クローンされたとき(地面に当たるか、他のフルーツに当たるまで下に落ちていきます)
進化の場合は、最初の位置は「進化前のx座標」と「進化前のy座標」になります。
進化でなければ(プレイヤーが上からフルーツを落とす場合)、「プレイヤー」の位置が最初の位置になります。
最初の位置を決めたら、「進化する?」を「No」にします。(これを忘れると、進化する際にフルーツが2つ出現します)
「地面」に触れるまで、下に落下していきます。
もし、他のフルーツのスプライトに当たったら止めるようにします。
(2). クローンされたとき(同じフルーツに当たったら、フルーツが進化します)
同じ種類のフルーツに触れたかどうか、ずっとチェックします。
(上図はリンゴのスプライトです。そのため「リンゴ」と触れたかどうかチェックしています)
もし「リンゴ」に触れた場合、「進化する?」で場合分けします。
「進化する=No」なら
下記の処理を実行して進化させます(触れた相手側のフルーツが下記の処理を重複して実行しないように「進化する?=Yes」に変更します)
・進化のために値をセット(「進化前のx座標」、「進化前のy座標」
・進化のアニメーションを実行します(「進化」するを送って待つ)
・「バナナ」のクローンを作ってフルーツを進化させます。
クローンを削除します(「進化する?」が「Yes」、「No」のどちらの場合でも)
ポイント①
同じ種類のフルーツに触れたかどうかのチェックは下記の記事が参考になります
ポイント②
進化を重複して実行しないように、「進化する?」という変数を使います。「進化する?=No」のときだけ進化の処理をします。
進化の処理をする際、初めに「進化する?=Yes」に変更することで、次の処理は進化の処理を実行しないようにしています。
(3). スプライト「星」:「進化する」を受け取ったとき
星の位置を、「進化前のx座標」と「進化前のy座標」にします。
進化中のアニメーションを表現します。
3.【やってみよう】プログラミング
リミックスしよう
下記のプロジェクトをリミックスして、スイカゲームを完成させよう!コスチュームは全て用意しているよ。穴埋めになっているプログラムを、解説などを参考にして埋めていこう。難しい場合は、「コードの中身を確認する」に答えがのっているよ。
4. まとめ
その他の人気ゲームの作り方
最終更新日:2024年8月21日