こんにちは。調布教室のジャクソンです。
プログラマーはプログラミングをしているときに、本当に問題解決をしています。プログラミング言語とはただの問題解決のための道具なのです。この道具を使うことでたくさんのものを作ることができます。ゲームやウェブサイト、スマホアプリなんかも作れちゃうんです。その上でロボットも動かすことができますよ。プログラミングを使うとたくさんのことができますが、これはただの道具で、プログラマーは問題解決が上手な人なのです。
問題を小さく分けよう
問題を解決するときにとても大事なことは問題を小さく分けることです。例えばもし「プログラミングで鬼ごっこゲームを作ってください」と言われたときには、迷ってしまうかもしれません。「鬼ごっこを作る?」「どこから始める?」となってしまうかもしれません。私たちはプログラミング言語を選んでから、その問題を小さく分けて解決するのです。
一緒にプログラミングの問題を解決して実証しよう
課題: どのように鬼ごっこを作るか
まず、何の道具を選びますか? (どのプログラミング言語を使いますか?)
Scratch!
Scratchは簡単なプログラミング言語です。コードブロックを繋げたスクリプトを実行すると上から下へと実行されていきます。その上でScratchの画面は直感的で簡単です。よい道具を選ぶことはコードを書くことと同じレベルで重要なことです。
鬼ごっこについて考えてみましょう
「誰かが他の人を追いかけ、捕まえたらその人は鬼になる」と考えていますか? いい説明だと思いますが、プログラミングをするときにはそれ以上に細かく説明する必要があります。
- 少なくとも2人がいます
- 誰かが鬼になります
- 他の人は鬼にはなりません
- ゲームが始まります
- 鬼は鬼ではない人を追いかけて捕まえようとしています
- 捕まえられたら鬼になります
細かく分解することができましたね。大きな問題は小さい問題に分割することができました。ではその小さくなった問題を解決していきましょう。
問題1: 何人のプレイヤーが必要か?
鬼ごっこの条件は最低でも2人いることです。簡単ですね。Scratchで2つのスプライトを出します。私の2人目のキャラクターはクマです。猫と同じくらいのサイズにしました。
問題2: 誰が鬼ですか?
条件は誰かが鬼になっていることなので、決めましょう。
私はクマが鬼だと決めました。
問題3: ゲームはどのように始まるか?
ゲームを始めるにはコードが実行されれば問題ありません。Scratchでは以下のコードを加えることで実行した時の命令を決めることができます。
問題4: どのように鬼は鬼ではない人を追いかけ、捕まえるか?
追いかけるはどういうことでしょうか。クマは猫を追いかけます。誰が操作できるようにしますか? プレイヤーが操作しますか? コンピュータが操作しますか? それは決めることができます。
では今回は私たちが猫を操作して、クマはコンピュータによって自動で操作されるようにしましょう。
クマは猫を追いかけ、猫は私たちの操作で逃げます。
どのようにコードを書きますか? それも解決する問題になります。これも小さく分けていきましょう。小さく分けることでコードにするのも簡単になります。
問題4-A: どのように猫を操作できるようにするか?
動きをより小さく分けたら以下のようになります。
- ゲームが始まったら猫が動き始める
- 私たちが選んだ方向に進む(これも二つに分けられます)
- 私たちが選んだ方向に向く
- 前に進む
- ゲームが終わるまで続く
ではコードに変えてみましょう。
これで猫を動かします。
そして、回すには、
このコードを加えます。
ではゲームが終わるまで続くように以下のようにしてみましょう。
問題4-B: どのようにクマが動くか?
この問題も分解していきましょう。
- ゲームが始まったらクマが動く
- クマが猫の方に動く
- クマが猫の方に向いて
- 前に進む
- ゲームが終わるまで続く
かなり猫のコードに似ていますね。少しだけ変えてみましょう。マウスのポインターに向ける代わりにスプライト1(猫の名前)を選んでみましょう。
問題5: どのように猫が捕まりますか? 捕まったら何が起こりますか?
鬼ごっこは普通には捕まったら鬼になりますが、簡単なコードを書くために捕まったらゲームオーバーにしましょう。今作っている条件は猫が捕まったらゲームオーバー、です。
コードに変更していきましょう。猫が捕まったということはすなわちクマが猫に触れたということです。言い換えると、もしクマが猫に触れたら、ゲームオーバーになるということです。
プログラミングをするときにこの「もし」の文は条件を満たしたかを確認することができます。
この条件のブロックを使います。
これに私たちが考えている条件を当てはめてみます。
触れたらゲームオーバーになります。ゲームオーバーはどのように作りましょうか。全てを止める、ということにしてみましょう。それがシンプルな答えになります。
このブロックを使うことで全てを止めることができます。
このようになります。
ですがこの条件の確認は一瞬だけで終わってしまい、その後は判定してくれません。なので常に条件を判定するようにしましょう。
遊んでみましょう。遊べますが、少し問題があります。
- クマが早い
- ゲームが終わったら前回のゲームと同じところから次のゲームが始まります
クマのスピードは解決するのは簡単です。ただ、「〜歩動かす」のブロックの値を10から5に変えます。でも他の問題はどうでしょうか。次のゲームは前のゲームの最後に止まったところから始まります。みなさんは解決するためにどのようにすればいいと思いますか?
今回やったように小さく分解して考えてみましょう。いつプレイヤーは最初のポジションに行きますか? Scratchでどのようにスプライトの位置を変えますか? スプライトの位置を変える前に何かしないといけませんか? 何か後で起こる必要がありますか? ゲームの流れを考えてやってみてください。
ここまでお読みいただき、ありがとうございます。
興味を持った方は無料体験に参加してみてください!