コンテンツへスキップ

小学生のための簡単「スイカゲーム(初級編)」の作り方

最終更新日:2024年8月21日

お知らせ

スイカゲーム(上級編)の作り方も用意しています。初級編ができた人は、ぜひチャレンジしてみてください!

pg-suika

今日のポイント

① 自分のスプライト(同じ種類のフルーツ)に当たったかどうかの判定方法
② スプライト(フルーツ)が当たって進化するときは、進化が二回実行されないようにする

ad-earth-shop-online

1.【はじめに】完成した作品を見る

フルーツの進化の順序は次の順番にしました。

evolution
「イチゴ」⇒「リンゴ」⇒「バナナ」⇒「スイカ」

動画で確認する

コードの中身を確認する

主なスプライトと役割

game-screen
① プレイヤー

「プレイヤー」を押すと、フルーツを地面に向かって落とすことができます。
左右の矢印キーで移動できます。

② 地面に落ちるフルーツ

プレイヤーによって落とされます。
地面に当たるか、他のフルーツに当たるまで下に落ちていきます。
もし同じフルーツに当たったら、フルーツが進化します。
スイカ同士が当たった場合は、どちらのスイカも消えます。

③ 地面

フルーツが地面に落ちたかどうか判定するために用意します。
コードはありません。

コードの中身

① プレイヤー

「次に落とすフルーツを選ぶ」と「フルーツを落とす」の2つのブロック定義を作成します。

player-blocks

「緑の旗が押されたとき」、ブロック定義「次に落とすフルーツを選ぶ」を実行して見た目を変えます。プレイヤーが「地面に落ちるフルーツ」のいずれかと当たったらゲームオーバーとします。「プレイヤーが押されたとき」、表示されているフルーツを落とします。

player-blocks2
② 地面に落ちるフルーツ

下図の赤枠の部分は、フルーツをどこに表示させるかというコードです。同じ種類のフルーツ同士が当たって進化する場合は、フルーツ同士が当たった場所に進化後のフルーツを出現させます。プレイヤーが上から落とすフルーツの場合は、「プレイヤー」のいる位置にフルーツを出現させます。

青枠の部分は、地面に触れるまで下に落ちていくコードです。落ちながら、他のフルーツに触れるかどうかチェックしています。もし触れた場合は、「このスクリプトを止める」を実行して、下に落ちるのを止めています。

fruits-blocks

下図は、フルーツの進化に関するコードです。進化する場合は、「進化前のx座標」と「進化前のy座標」に今のフルーツの座標を保存します。進化後のフルーツの最初の位置は、保存した座標にします。

下図のコードは「リンゴ」のスプライトのコードです。「リンゴ」同士に触れたかどうか確認し、進化する場合は、「バナナのクローンを作る(赤枠内の一番したのブロック)」ようにしています。「イチゴ」や「バナナ」、「スイカ」のスプライトもほとんど同じコードですが、何に触れたか、といった条件や進化するフルーツが変わります。

fruits-blocks2

2. 【詳しく】プログラムの解説

① プレイヤー

プレイヤーのコスチュームは、下図の赤枠内の3つ(イチゴ、リンゴ、バナナ)用意します。

program_player

(1). ブロック定義「次に落とすフルーツを選ぶ」

コスチュームの表示を変更します。
 その際、1から3までの乱数を使い、コスチュームを番号を指定して変更します。
  1から3までとしたのは、プレイヤーのコスチュームの数が3つあるためです。
  フルーツの数を増やす場合は、コスチュームを追加して乱数の数字も変更します。

(2). ブロック定義「フルーツを落とす」

フルーツを落とすとき、プレイヤーで表示している同じ種類のフルーツを落とします。
 プレイヤーで表示しているフルーツは、「コスチュームの番号」で分かります。
  例えば「コスチュームの番号=1」なら、プレイヤーは「イチゴ」を表示しています。
 落とすフルーツのクローンを作成します。

(3). 緑の旗が押されたとき

プレイヤーを最初の位置(0, 150)に戻します。
ブロック定義「次に落とすフルーツを選ぶ」を実行します。
次に落とすフルーツを表示します。

(4). このスプライトが押されたとき(フルーツを落とします)

プレイヤーのフルーツを隠します。(これがないとすぐにゲームオーバーになってしまいます)
ブロック定義「フルーツを落とす」を実行します。
1 秒待ちます。(これがないとすぐにゲームオーバーになってしまいます)
ブロック定義「次に落とすフルーツを選ぶ」を実行します。
次に落とすフルーツを表示します。

② 地面に落ちるフルーツ

グローバル変数「進化する?」

[Yes] か [No] が入ります。フルーツがクローンされるときは2パターンあります。一つ目は、プレイヤーが上からフルーツを落とすときです。二つ目は、フルーツ同士が当たって次のフルーツに進化するときです。この2パターンを場合分けするために、「進化する?」という変数を使います。

グローバル変数「進化前のx座標」、「進化前のy座標」

同じ種類のフルーツが触れ合ったときの位置(「x座標」と「y座標」)を保存します。進化後のフルーツの最初の位置をこの座標に設定します。こうすることで、進化後のフルーツの位置を、フルーツが触れ合ったときの場所にすることができます。

program_fruits

(1). クローンされたとき(地面に当たるか、他のフルーツに当たるまで下に落ちていきます)

進化の場合は、最初の位置は「進化前のx座標」と「進化前のy座標」になります。
進化でなければ(プレイヤーが上からフルーツを落とす場合)、「プレイヤー」の位置が最初の位置になります。
最初の位置を決めたら、「進化する?」を「No」にします。(これを忘れると、進化する際にフルーツが2つ出現します
「地面」に触れるまで、下に落下していきます。
 もし、他のフルーツのスプライトに当たったら止めるようにします。

program_fruits2

(2). クローンされたとき(同じフルーツに当たったら、フルーツが進化します)

同じ種類のフルーツに触れたかどうか、ずっとチェックします。
(上図はリンゴのスプライトです。そのため「リンゴ」と触れたかどうかチェックしています)

もし「リンゴ」に触れた場合、「進化する?」で場合分けします。
 「進化する=No」なら
  下記の処理を実行して進化させます(触れた相手側のフルーツが下記の処理を重複して実行しないように「進化する?=Yes」に変更します
  ・進化のために値をセット(「進化前のx座標」、「進化前のy座標」
  ・進化のアニメーションを実行します(「進化」するを送って待つ)
  ・「バナナ」のクローンを作ってフルーツを進化させます。
 クローンを削除します(「進化する?」が「Yes」、「No」のどちらの場合でも

ポイント①

同じ種類のフルーツに触れたかどうかのチェックは下記の記事が参考になります

ポイント

進化を重複して実行しないように、「進化する?」という変数を使います。「進化する?=No」のときだけ進化の処理をします。
進化の処理をする際、初めに「進化する?=Yes」に変更することで、次の処理は進化の処理を実行しないようにしています。

(3). スプライト「星」:「進化する」を受け取ったとき

星の位置を、「進化前のx座標」と「進化前のy座標」にします。
進化中のアニメーションを表現します。

3.【やってみよう】プログラミング

リミックスしよう

下記のプロジェクトをリミックスして、スイカゲームを完成させよう!コスチュームは全て用意しているよ。穴埋めになっているプログラムを、解説などを参考にして埋めていこう。難しい場合は、「コードの中身を確認する」に答えがのっているよ。

scratch-suika-rimix

4. まとめ

今日のポイント

① 自分のスプライト(同じ種類のフルーツ)に当たったかどうかの判定方法
② スプライト(フルーツ)が当たって進化するときは、進化が二回実行されないようにする

完成した作品

scratch-suika

その他の人気ゲームの作り方

最終更新日:2024年8月21日

広告

最終更新日:2024年8月21日