轨道
/
Swift
Swift
/
练习
/
翅膀大冒险
翅膀大冒险

翅膀大冒险

学习练习

简介

Swift 提供了一种名为 Bool 的内置类型,用来表示真值:true和false。

逻辑运算符

Swift 提供了三个逻辑运算符(!、&&和||),用来组合和求值布尔表达式。

逻辑与(&&)

与运算符(&&)只有在两个操作数都为true时才返回true。 只要有一个操作数是false,它就返回false。 在&&符号的两侧各放一个表达式或布尔值:

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

逻辑或(||)

或运算符(||)只要至少有一个操作数为true就返回true。 只有当两个操作数都为false时,它才返回false。 在||符号的两侧各放一个表达式或布尔值:

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

逻辑非(!)

非运算符(!)会对布尔值取反。 如果值为false,它就返回true;如果值为true,它就返回false。 把!运算符放在值或表达式的正前方:

!true  // false
!false // true

使用括号(())

你可以用括号把表达式分组,从而控制求值顺序。 在 Swift 中,括号内的表达式会先求值:

true && false && false || true   // true
true && false && (false || true) // false

用括号分组还会决定非运算符如何作用于复杂表达式:

!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,全部免费。