12日目。UFO飛来! ようやく条件分岐の出番なのか?!
こんにちは。
とうとうUFOが来ちゃいましたよ。
吾輩、かつては薄暗い喫茶店のテーブルの上に100円玉何枚も積み上げて侵略者から地球を守っていました。45年後に100円玉30枚くらいで似たようなゲームを作って遊べるコンピューターが買えるなんて想像もできずに。
さて、上の動画で示した飛ばし方をプログラムしてください。
どれが一番かんたんに作れるでしょうか?しかしてその根拠は如何に?
今日伝えたいこと
・アルゴリズムという言葉を覚えて欲しい。そしてアルゴリズムってのは、凄いものを指す言葉じゃなくて、誰もが思い思いに作るプログラムの組み立て方を指す言葉だと。教科書に載っている並べ替えのアルゴリズム、AさんのUFOランダム飛行アルゴリズム、わたしのUFO往復飛行アルゴリズムという感じで気軽に使って欲しい。
・アルゴリズムはひとつじゃない
例えば「どうやって往復しているように見せるかという方法」はいくつもあるということ。ちょっと速いアルゴリズム、ちょっと短く書けるアルゴリズム、安定感のあるアルゴリズム…
・アルゴリズムを選んだ根拠を語ろう
2つ考えたうちの一つを選んだら、なぜそちらを選んだのかの根拠が語れるように、ノートに書くなどして残しておけば後になってその決断が正しかったかどうかわかって先に活かせる。たぶん。プログラミングに限らず、根拠なしに他人(特に技術者)を説得することはできないし、説得されるべきではない。仕事の場においてそういう議論は必要であり、苦しくとも楽しい時間であったりするのです。そのためにアルゴリズムをよ〜く考える姿勢が大切です。
プログラムしよう かんたんなやつから
一番かんたんな真ん中の「ランダム」から作りましょうか。
かんたんの根拠はプログラムを見せた後で。
基本倉庫から「ずっと」を取り出す
UFOはずっと飛ばしておきたいから。そこに何かを入れます
UFOを飛ばすプログラムね。
--- ♦︎ ✋ちょっと立ち止まって考えてね。♦︎ ---
LED光らせる?
前にしつこく説明したこと思い出してね。
--- ♦︎ … ♦︎ ---
2. はい。これがおすすめ。
「UFO飛行」 とかの名前の関数を作って、その呼び出しを入れましょう。
「ずっと」の中で何をやるのかが良くわかります。
関数の中を書くのは後回し。
まずはここでこういうことをやろうと決めて名前をつける。というのを関数を使って表明しましょう。
3. 「UFO飛行」関数の中身を書きましょう
LEDを少しの間(狙えるくらいの間)光らせて、
次のLEDの場所までx座標を進める
「2. ランダム」飛行特徴のプログラムができた
このプログラムで、飛行特徴を担当しているのは「UFOの次の位置2」関数です。
このように関数分けをしていることで、他の飛行特徴用のプログラムは、「UFOの次の位置1」という関数を作るだけで良くなります。(「UFO飛行」関数で呼び出す箇所は合わせて修正が必要です)
次は「1. シンプル」飛行特徴をプログラムしよう
上のプログラムで、
「もし5になったのなら」の部分を
「もし5以上になったのなら」と書いています。
増加させている値を判断する場合には、普通こう書きますので真似てください。
万一何らかの考え違いで計算誤差がでてきた場合を考えると、この書き方を癖にしておくと安全であるという気持ちが込められたものです。
コンピューターは計算間違いをしませんが、プログラムは書き間違えることがあるので。とかそういうお守り的なプログラマーの自己防衛策と考えてもらって良いと思います。
ランダム飛行特徴の方がかんたんな理由
ランダムな値を求める時には前の値に依存しません。
「前の値」、何らかの状態というのは複雑さを引き寄せます。条件判断して分岐することも複雑です。複雑というのは間違い(バグ)の元です。
サスペンスドラマでハイキング中の分岐の看板が倒れていたとか曲げられていたとかで事件の原因になることって良くありますよね。
分岐と変数(変化する変数)はバグの元なんです。
決して安易に増やさないように注意しましょう。
一直線のプログラムは安定度高いです。分岐が増えれば増えるほど、不安定になります。
今日はここまで。
次回予告
残った「3.往復」飛行特徴のプログラムを作りましょう。
一応宿題にしておきますが、あなたなら出来る!
とはちょっと言いにくい。 意外と複雑だと吾輩は感じております。
もうひとつ変数を追加する必要があるかもしれません。追加しない方法もあるかもですが。じっくりと考えてみてください。
→ 13日目。UFOの往復飛行、予想よりむずっ💦変数と分岐の増加でおこるむずっ💦
この記事が気に入ったらサポートをしてみませんか?