大きな問題がある時に、どのように解決すべきか? | プログラミング的思考と問題解決
こんにちは。ジャクソンです。
前に「プログラミングは問題解決だ」という話をしました。以前は小さなゲーム、小さな問題を取り上げましたが、もっと大きな問題に出会った時、どのように考えて、どのように解決に導けばよいのでしょうか?
問題を考える時にはその問題に着手してみてから考えるという順番で進むかもしれないですね。しかし、そのように考えると細かいことに時間が取られてしまう可能性があります。前に作ったものと合わないかもしれません。今どのように行ってどのように進んだらいいかわからなくなる時が来るかもしれません。
そのような大きい問題、課題に当たった時には予定を作ることが大切です。そうすれば最初から最後まで作るべきものが全部分かるようになります。
まず一番大きな問題を考えて、最も抽象度の高いところからそれを具体的なパーツに分解していく作業が大切なのです。
大切なこと
大切なことは、以下の3点です。
- 早く書くこと。
- 一つの階層が出来上がってから次の階層に進むこと。
- 細かいことは気にせず、後で直せばよいという気持ちで進むこと。
やりながら細かいことは気になりますが、それを無視して進みます。目的は主なことを書き出すことです。
いつの間にかに、紙でプログラムを作る計画が立っています。それが出来上がってから小さいことや前に気にしていたことを考えましょう。
Scratchで宇宙シューティングゲームを作る方法を考えてみましょう
何がある?
- プレーヤー
- 敵
それは何をしますか?
- プレーヤー
- 動ける打つことができる
- ダメージを受ける
- 敵
- 上から出現する撃たれたら消える複数ある打つことできる
- 倒れたら1点
もうちょっと細かく書いたら……
- プレーヤー
- 動ける
- 右、左、上、下
- 打つことできる
- スペースキー押すとうつ
- プレーヤーのところから上に飛ぶ
- 敵に触れるか橋に触れると消える
- ダメージ受け取れる
- ダメージ3回受けたら倒れる
- ダメージ受けたコスチュームをつける
- 動ける
- 敵
- 上からくる
- 横のスタートはランダム
- 上の場所は画面の上にスタート
- 撃たれたら消える
- 画面下の方に着いたら消える
- 複数ある
- 1秒から10秒までのランダムなタイミングで出る。
- 打つことできる
- 1秒から3秒までのランダムなタイミングで打つ
- 倒れたら1点
- プレーヤーのスコアは1点で増える
- 上からくる
簡単にコード準拠の内容に書き換えます
- プレーヤー
- 動ける
- 右、左、上、下
- もしOOキー押されたら、10方動かす
- 右、左、上、下
- 打つことできる
- スペースキー押すとうつ
- 押すと打つもののクローンを作って、プレーヤーの場所に設定する
- プレーヤーのところから上に飛ぶ
- 作られてからY座標10方動かす
- 敵に触れるか橋に触れると消える
- クローンを削除する
- スペースキー押すとうつ
- ダメージ受け取れる
- ダメージ3回受けたら倒れる
- 変数を3に設定する
- 攻撃に触れると−1ずつ変える
- 変えてから、0になったらゲームオーバーに変える
- ダメージ受けたコスチュームをつける
- 攻撃に触れるとコスチュームを変える
- ダメージ3回受けたら倒れる
- 動ける
- 敵
- 上からくる
- 横のスタートはランダム
- クローンされる時にクローンの座標を設定する
- ランダムなX座標に設定する−200から200まで
- 上の場所は画面の上にスタート
- Y座標は260になる
- 横のスタートはランダム
- 撃たれたら消える
- プレーヤーの攻撃に触れると消す
- 画面下の方に着いたら消える
- もしY座標は-170より小さければ消える
- 複数ある
- 1秒から10秒までのランダムなタイミングで出る。
- クローンを作る
- クローンのY座標は-170より小さければクローンを削除する
- 1秒から10秒までのランダムなタイミングで出る。
- 打つことできる
- 1秒から3秒までのランダムなタイミングで打つ
- ずっとのコードの中でそのランダムな秒待ってから
- X,Y座標を攻撃が使える変数に設定する
- 攻撃のクローンを作って、
- 攻撃のクローンが作られる時にX,Y座標持っている変数で場所を設定する。
- プレーヤーに触れるまでか端につくまで−10y座標コードが繰り返し、その後にクローン削除
- 1秒から3秒までのランダムなタイミングで打つ
- 倒れたら1点
- プレーヤーのスコアは1点で増える
- プレーヤーの攻撃に触れるとスコアの変数を1ずつかえる
- その後にこのクローンを削除する
- プレーヤーのスコアは1点で増える
- 上からくる
これで予定ができましたね。これで基本的なゲームができます。出来上がったら好きな改造を付け加えてもいいですね。こちらのようなゲームができます!
