學習軌道
/
Swift
Swift
/
練習
/
翅膀任務
翅膀任務

翅膀任務

學習練習

簡介

Swift 提供了內建的型別 Bool,用來表示真值:true和false。

邏輯運算子

Swift 提供了三種邏輯運算子(!、&& 和 ||),用來組合並評估布林運算式。

邏輯 AND(&&)

and 運算子(&&)只有在兩個運算元都是true時才會回傳true。 只要任一個運算元是false,它就回傳false。 在&&符號的兩側各放一個運算式或布林值:

true && true  // true
true && false // false

邏輯 OR(||)

or 運算子(||)只要至少一個運算元是true就回傳true。 只有當兩個運算元都是false時,它才會回傳false。 在||符號的兩側各放一個運算式或布林值:

true || true   // true
true || false  // true
false || false // false

邏輯 NOT(!)

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)
Note

當你需要釐清評估順序,或想讓複雜的條件更容易閱讀時,就使用括號。 當預設的優先順序已經很清楚時,就避免加上多餘的括號。

說明

你正在開發一款備受好評的新遊戲 Wings Quest。 在遊戲中,你是一隻四處移動並收集種子的鳥。 玩家撿起所有種子就能獲勝。 如果玩家碰到老鷹,就會失去所有種子並輸掉遊戲。 這條規則有一個例外:玩家可以擁有作用中的強化道具,讓自己飛得比其他鳥更高。

你的目標是撰寫一些遊戲會用到的規則。

1. 定義鳥是否獲得額外分數

在遊戲中,如果鳥在擁有強化道具時碰到老鷹,就會獲得額外分數。

定義函式bonusPoints(powerUpActive:touchingEagle:),它接受兩個引數:powerUpActive表示鳥是否有作用中的強化道具,touchingEagle表示鳥是否正碰到老鷹。 只有當鳥有作用中的強化道具且正碰到老鷹時,這個函式才應該回傳true,否則回傳false。

bonusPoints(powerUpActive: false, touchingEagle: true)
// Returns false

2. 定義鳥是否得分

在遊戲中,玩家撿起種子或強化道具時會得分。

定義函式score(touchingPowerUp:touchingSeed:),它接受兩個引數:touchingPowerUp表示鳥是否正碰到強化道具,touchingSeed表示鳥是否正碰到種子。 如果鳥正碰到強化道具或種子,這個函式應該回傳true,否則回傳false。

score(touchingPowerUp: true, touchingSeed: true)
// Returns true

3. 定義鳥是否落敗

定義函式lose(powerUpActive:touchingEagle:),它接受兩個引數:powerUpActive表示鳥是否有作用中的強化道具,touchingEagle表示鳥是否正碰到老鷹。 如果角色正碰到老鷹且沒有作用中的強化道具,這個函式應該回傳true,否則回傳false。

lose(powerUpActive: false, touchingEagle: true)
// Returns true

4. 定義鳥是否獲勝

定義函式win(hasPickedUpAllSeeds:powerUpActive:touchingEagle:),它接受以下引數:

  • hasPickedUpAllSeeds表示鳥是否已撿起所有種子。
  • powerUpActive表示鳥是否有作用中的強化道具。
  • touchingEagle表示鳥是否正碰到老鷹。

如果鳥已收集所有種子,且根據第 3 部分定義的引數判斷並未落敗,這個函式應該回傳true,否則回傳false。

win(hasPickedUpAllSeeds: false, powerUpActive: true, touchingEagle: false)
// Returns false
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Swift Exercism

準備好開始 翅膀任務 了嗎?

註冊 Exercism,透過 35 個概念116 個練習 和真人引導來學習並精通 Swift,全部免費。