見出し画像

50代のオッサンが小5男子にスクラッチを教えながら一緒にポン風のゲームを作るときに気付いた注意ポイント3点

親戚の小学5年生の男の子がScratchに興味があるらしいから、教えてやって欲しいと頼まれました。まあ、別に断る理由もないので一緒に昔懐かしいポン風のゲームを作ってみると、思わぬところでつまずきポイントがありました。

授業でやるらしく操作方法は分かるのですが、コードをどういうロジックで組んだらいいのか分からない。もしくは考えられない。

これから似たような感じで子供に教える人もいるだろうと思い、老婆心ながらつまずきポイントを3つを紹介します。ご自身が教えるさいに役立てて頂けたら幸いです。

ポンはこんなゲーム

知らない人もいるかもなので軽く解説すると、1972年11月にアタリから発売された、超古典的なアーケードゲームです。

左右のバドル(棒みたいなやつ)を操り玉を跳ね返して相手の陣地に打ち込むゲームです。エアホッケーをイメージしてもらえれば近いですね。

シンプルなゲーム性で、これなら簡単に作れそうだと思いお題に選びました。

実際に組んだコード

https://scratch.mit.edu/projects/1045463452/

今回作ったゲームは、上記のリンク先から確認できます。
ゲームとしても遊べるので良かったらどうぞ。

1. ボールを跳ね返せない!

ここが難しかった

「端に着いたら、跳ね返る」でボールが画面端に当たると跳ね返せますが、パドルとボールが当たった時に、普通に跳ね返すのではなく、乱数を使って打ち返す角度にある程度ランダム性を持たせるのが、わかりにくかったみたいです。

こうしたらうまくいった!

一番上が0度だという事を知らなかたので、スクラッチの角度について教えた。

画像引用:https://scratch-howto.com/scratch-programming006/

実際の角度を見せながら
左側のパドルは「45度から135度の乱数度向ける」
右側のパドルは位置関係が反転するので「-45度から-135度の乱数度向ける」

パドルとボールが当たった時に、この角度でボールを打ち返すと説明すると納得してくれた。

2. ループと条件分岐の考え方

ここが難しかった

ゲームのパドルやボールを、「ずっと」の中に「もし」を入れて処理します。この動かし続ける方法の概念が難しかったみたい。

こうしたらうまくいった!

「ずっと」ブロックを使うと、命令を繰り返し続けられて「10歩動かす」を入れると、ボールがずっと動き続けるよ。ここまでは分かるようです。

実生活で例えると、「学校につくまで歩き続ける」みたいなものだね。Scratchは「ゲームが終わるまで続ける」ってことさ。

それで道を歩いていると、「もし青信号ならば進め」、「でなければ止まれ」これがプログラム的な考え方だよ。

と言うと、何となく理解できたようです。

反対に「もし赤信号なら止まれ」、「でなければ進め」にすると、どうなの?こうブロックを組んでも良いのか?と疑問のようでしたが、それなら似た動きにはなるけれど、黄色信号でも進む命令になるから、それはあんまり良くないカモ…、

「赤と黄色で止まれ」よりも「青だけ進め」の方が分かりやすいよ。実例をあげながら解説すると納得できました。

ボールが端に到達とゲーム終了の部分

ここも分かりにくかったみたいです。
勝利条件にどちらのプレイヤーにもスコアが3になると「ゲーム終了」を送る。
ゲーム終了を受け取るとplay1スコアが3ならプレイヤー1の勝ちは分かるのですが、でなければ「プレイヤー2の勝ち」ここが釈然としない。

普段からIF文を使っているから、それ以外の条件はプレイヤー2の勝ちしかないだろ!と思いますが、これは知っているからのロジックで初心者に寄り添ってないと思いました。

コードを修正しました。

もしで2回指示を出す方が、子供にはしっくりと理解しやすいようです。

3. 変数の定義

ここが難しかった

スコアの点数を変数で数えるのはすぐに理解できました。パドルでボールを打ち返すたびに、ボールの速度をだんだんと早くしていきたい。そのために「速度」の変数を定義して使うのが難しかったみたいです。

こうしたらうまくいった!

初期にボールを動かす「速度」を5で定義しています。これも理解できるようです。

ボールがパドルに当たったら、この「スコア」を1増やすように、速度を0.2ずつ増したい。でも、そんなのやった事ないし、どうしたら良いのだろう……

これは「変数を〇ずつ変える」のブロックがあるよと、先に答えを教えました。すると「パドル1と2に当たった条件で発動して」と、自分で考え始めたので、後は難しい事はなくできました。

数学的な話は中学生になってから

ただ、ボールの速度を増やしつつ、スマッシュボタンで一時的にボールを加速させる、一定時間で加速前の元の速度に戻すとかになると悩むようです。

速度の変数を一時的にタイマーと増減するとか、条件トリガーで開始時の速度を変数で取得するとか、方法はいろいろとあると思うのですが、かなり悩みました。

試しにFizzBuzz問題を言うと、意味は理解するのですが、ブロックに落とし込む作業でつまづきました。この辺りは教えてあげると理解します。1からロジックを組めるのは中学生に入ってからの方が良さげだと感じました。

まとめ

ポンゲームを作るのが難しいのではなく、小学生では日頃プログラム的な思考をして物事を考えないから、どう作ったらいいのか迷うのでしょう。

大人で例えると、いきなり釘とトンカチと板を渡されてタンスを作る感じでしょうか。日頃DIYしない人は最初は難しく感じるかもしれないけど、コツさえつかめば誰でもできるはずです!

教えてみて初めてプログラム学習が、自分で考える力や論理的な思考を伸ばすのに役立つのかが、よく分かりました。

仮説を立ててコードを書いて実践する。もしエラーがでたら原因を考えて修正する。この仮説・実践・検証をする能力を伸ばすのにも使える事が分かったのは、こちらとしても大発見です。

人に教える事で自分も学べるって話は本当なんだな~と思いました。



もっとスクラッチを学びたい人におススメ


この記事が気に入ったらサポートをしてみませんか?