Swiftはじめました 第9回
こんにちは。ツクリテのムゥです。
もう11月も半ばに差し掛かりました。。。
なんだか年々時間が経つのが早まってる気がしますが、美味しいものを食べて元気にいたいですね。
今日も最後まで楽しんでいって下さい!
前回まで
新しく「論理演算子」を学ぶということで、3つのステージを解いてきましたが、小難しいことこの上ない。
「&&」「||」「!」 を使って細かい指示をだせるというものでしたね。
前回は3つのステージを終えたところまでをご紹介しました。
残り2ステージあるので、この回でご紹介したいと思います。
それでは張り切っていきましょー。
ここのステージは、ジェムのある島としず太郎がいる島の間に道が無いため、ワープホールを使わないとジェムを取りにいけない地形。
ジェムも岩で阻まれているため、ワープホールの出口から遠回りをしないと取りに行けないようですね。
ここで使うコードは、2つの条件を提示してどちらかに当てはまる時にどう動くのかを指示することができる「||」です!
ここで提示する条件は、解説に記載されている isBlockedLeft (左が行き止まり)を使います。あと一つ提示すべき条件については、どういう風に進めばいいかを考えると見えてきます。
地形を見ると、ワープホールに進むためにはまず1マス前に出て、右に向かう必要がありますが、1マス進んだ先はどうなっているか見てみると。。。
このマスは 正面が行き止まり、左が行き止まりではない という状況です。
もうお分かりかもしれませんが、この2つをそのまま条件として提示すれば良いってことです。
そうなると↓このようなコードが出来上がりますね!
if isBlocked || isBlockedLeft {
turnRight()
}
「正面が行き止まりか、左が行き止まりの場合は右を向く」というコードです。
このコードへ、他に必要なコードを肉付けしていくと完成ですね!
私はここで最初の前に進むコードをすっかり忘れていたおかげで実行ボタンが反応しないという事態に陥ってました・・・それに気づくのに相当の時間をかけていたというポンコツぶりを発揮。お恥ずかしい。
初歩的な見落としなので、なかなか無いと思いますが皆様もおかしいなと思ったら見直しです!
さて、とうとう論理演算子の最後のステージです。
論理演算子と条件分岐が必要なようですが、情報量が多すぎてやる気がみるみるしぼんでゆく・・・さすが最終ステージ。
ここはいくつか問題を分けて考えることが必要なようですが。。。
一通りマスを眺め、どのような動作が必要なのか確認していきます。
スイッチがOFF、ジェムの上にいる条件の場合スイッチを押してジェムを取る
1の条件のマスの右手にジェムがあり、それを取りに行く
スイッチがOFFになっているだけのマスの場合はスイッチを押して左に行く
ジェムの上にいるだけのマスの場合はジェムを取る
ざっと考えるとこんな感じでしょうか。
ここにたどり着くまで、結構色々試してみました。
何故か「!」「&&」「||」を全部使わなくてはいけないと思い込み、ほんとに彷徨ってました。。。しばらくやりたくなくなるぐらい。
なんとか復活してよかったッス。
それでは、1〜4を元にコードを組立てていきます!
①スイッチがOFF、ジェムの上にいる条件
②①の条件のマスの右手のジェムを取りに行く
if isOnClosedSwitch && isOnGem {
toggleSwitch()
collectGem()
turnRight()
moveForward()
moveForward()
collectGem()
turnLeft()
turnLeft()
moveForward()
moveForward()
turnRight()
①と②を繋げたコードで、右手のジェムを取って戻ってくるまでを組みました。
続いてそれ以外の条件も設定していくのですが、どうやって繋げていくのか頭を使いましたが、思いの外単純な流れでできました。
} else if isOnClosedSwitch {
toggleSwitch()
turnLeft()
} else if isOnGem {
collectGem()
}
}
else if〜を使って、最初の条件に満たないものに対する条件と動作を提示してあげればいいんですね。
これを8回繰り返すことで最後までたどり着けるというわけです。
ステージの難易度が上がってきているせいか、褒められ方が手厚くなってきている気がします。悪い気はしないですね。
まとめ
論理演算子はこの回で終了です。いかがでしたでしょうか??
ステージ数はそんなに多くなかったのですが、こころなしか長かったように感じるのは難易度のせいだろうと思います。
「!」「&&」「||」という3つの関数は、条件分岐の進化系というところだと思います。覚えたてでやたら使おうとしてステージ内で奇行を繰り返すのだけは気をつけましょう。(私のように・・・)
次回からはまた新しくwhile ループ の章へ入っていきます。
ループ苦手なんですよね〜。
気乗 りはしないですが、気持ちも新たに頑張りますので、応援よろしくお願いします!
それではまた次回お会いしましょう!