Swiftには、真偽値を表すための組み込み型Boolがあります。真偽値とは、trueとfalseのことです。
Swiftには、真偽値の式を組み合わせて評価するための3つの論理演算子(!、&&、||)があります。
&&)_AND_演算子(&&)は、両方のオペランドがtrueのときだけtrueを返します。
どちらか一方のオペランドがfalseなら、falseを返します。
&&記号の両側には、式または真偽値を置きます。
true && true // true
true && false // false
||)_OR_演算子(||)は、少なくとも一方のオペランドがtrueならtrueを返します。
両方のオペランドがfalseのときだけfalseを返します。
||記号の両側には、式または真偽値を置きます。
true || true // true
true || false // true
false || false // false
!)_NOT_演算子(!)は、真偽値を反転させます。
値がfalseならtrueを返し、値がtrueならfalseを返します。
!演算子は、値または式の直前に置きます。
!true // false
!false // true
())を使う括弧を使うと、式をまとめて評価の順序を制御できます。 Swiftでは、括弧の中の式が先に評価されます。
true && false && false || true // true
true && false && (false || true) // false
括弧でまとめると、複雑な式にNOT演算子がどのように適用されるかも決まります。
!true && false // false (evaluates (!true) first, then false && false)
!(true && false) // true (evaluates (true && false) first to false, then !false)
評価の順序を明確にしたいときや、複雑な条件を読みやすくしたいときには、括弧を使いましょう。 デフォルトの優先順位で明らかな場合は、不要な括弧を追加するのは避けましょう。
いま、注目を集めている新作ゲームWings Questを開発しているところです。 このゲームでは、鳥になって飛び回り、種を集めます。 プレイヤーは、すべての種を拾い集めると勝利します。 プレイヤーがワシに触れてしまうと、集めた種をすべて失い、ゲームに負けます。 ただし、例外があります。プレイヤーがパワーアップを有効にしていると、ほかの鳥よりも高く飛ぶことができます。
このゲームで使われるルールをいくつか書くことが、この演習の目標です。
ゲームでは、鳥はパワーアップ中にワシに触れると、ボーナスポイントを獲得します。
関数bonusPoints(powerUpActive:touchingEagle:)を定義してください。この関数は2つの引数を取ります。powerUpActiveは、鳥がパワーアップを有効にしているかどうかを保持し、touchingEagleは、鳥がワシに触れているかどうかを保持します。
この関数は、鳥がパワーアップを有効にしていて、かつワシに触れているときだけtrueを返し、それ以外の場合はfalseを返します。
bonusPoints(powerUpActive: false, touchingEagle: true)
// Returns false
ゲームでは、プレイヤーは種かパワーアップを拾うとポイントを獲得します。
関数score(touchingPowerUp:touchingSeed:)を定義してください。この関数は2つの引数を取ります。touchingPowerUpは、鳥がパワーアップに触れているかどうかを保持し、touchingSeedは、鳥が種に触れているかどうかを保持します。
この関数は、鳥がパワーアップか種に触れているときにtrueを返し、それ以外の場合はfalseを返します。
score(touchingPowerUp: true, touchingSeed: true)
// Returns true
関数lose(powerUpActive:touchingEagle:)を定義してください。この関数は2つの引数を取ります。powerUpActiveは、鳥がパワーアップを有効にしているかどうかを保持し、touchingEagleは、鳥がワシに触れているかどうかを保持します。
この関数は、キャラクターがワシに触れていて、パワーアップを有効にしていないときにtrueを返し、それ以外の場合はfalseを返します。
lose(powerUpActive: false, touchingEagle: true)
// Returns true
関数win(hasPickedUpAllSeeds:powerUpActive:touchingEagle:)を定義してください。この関数は次の引数を取ります。
hasPickedUpAllSeeds:鳥がすべての種を拾い集めたかどうか。powerUpActive:鳥がパワーアップを有効にしているかどうか。touchingEagle:鳥がワシに触れているかどうか。この関数は、鳥がすべての種を集めていて、パート3で定義した引数に基づいて負けていないときにtrueを返し、それ以外の場合はfalseを返します。
win(hasPickedUpAllSeeds: false, powerUpActive: true, touchingEagle: false)
// Returns false