コウです、よろしくお願いします!
「ゼロからプログラミングを始める」人に役立つ情報を発信しています!
今回Day13は「並んだ階段」です。

解答例と解説
解答例と解説から見ていきましょう!
解答例
コードの解答例は以下のようになります。

14〜16行目でByteを次の位置まで導いています。
21〜24行目はまとめてsolveRow()にしてもイイですが、
前回Day12の最後に無駄な動きがあったので、
その反省を活かして無駄がないようにしてみました!!

解説
上記のコードを実行した結果がこちらになります。
最後の宝石を取ったところでコマンドを全て実行し終えているので、
Byteの動きに無駄がなくスッキリしていますね!
しかし動画がなかなか長編になってきました笑
今回のポイント
関数を確かめる
プログラミングは全てイチから書き始める訳ではなく、
誰かが書いたものや自分が過去に書いたものを見て編集することもあります。
過去のステージにもありましたが、
今回もそのパターンになります。
最初の画面ですでにコードが一部入っています。

これが何をするためのものなのか確かめるために、まずコードを実行してみます。
すると、solveRow()が実行されました。
solveは「解決する」、Rowは「列」なので、「列をクリアする」になりますね。
solveRow()には、collectGemTurnAround()が入っています。
これはその上の部分で定義されていますので、そちらを参照します。

collectGemTurnAround()の中身を言語化すると、
「2マス進む→宝石を取る→後ろを向く→2マス進む」です。
実行してみた結果や上記の言語化でわかるように、
solveRow()は「列をクリア」したいのに、列の半分しかクリアできていません。
関数に不足している部分を補う
では、solveRow()の不足している部分を考えて、コマンドを追加しましょう。
先述したように現状は半分しかクリアできないので、
collectGemTurnAround()をもう1つ足してみます!
列のもう半分をクリアして初期位置まで戻ってきました!!
この先を見るとさらに2列同じようなステージが続いているので、
後はそれぞれの場所にByteを連れて行ってあげればsolveRow()を繰り返してクリアできそうです!
ステージ攻略「並んだ階段」
攻略
それでは、ステージを攻略していきます。

Byteやステージが被って見えづらいですが、
「宝石0/6」なので、ステージの全ての宝石を取ればクリアです。
3列に分割して1列ずつクリアして次の列に行くようにコードを書いていきます。
まとめ
誰かがあらかじめ書いたコードを途中から引き継いで、完成させる作業を行なったイメージになりますがいかがだったでしょうか!
また、ユーザーの視点に立つことは、どんな言語であってもまたどんな仕事にも共通するとても大切なことですよね。
- とりあえずコードを実行すると見えてくるものがある
- ユーザーの視点に立つ意識を常に持っておく
次回はDay14「パターンを探す」でお会いしましょう!ではまた!!
