轨道
/
Crystal
Crystal
/
练习
/
水晶猎人
水晶猎人

水晶猎人

学习练习

简介

Crystal 有一种类型,叫做Bool。 它表示true和false这两个值。

逻辑运算符

Crystal 有三个逻辑运算符(!、||、&&),它们可以组合布尔值,生成结果不同的表达式。

与(&&)

在 Crystal 中,_与_运算符用&&表示:如果两个值都是true,就返回true;否则返回false。 使用_与_运算符时,一个布尔值放在&&右边,另一个放在左边。

true && true
# => true

true && false
# => false

或(||)

在 Crystal 中,_或_运算符用||表示:只要给定的值中至少有一个是true,它就返回true。 如果两个值都是false,它就返回false。 使用_或_运算符时,一个布尔值应放在||右边,另一个放在左边。

true || true
# => true

true || false
# => true

false || false
# => false

非(!)

在 Crystal 中,_非_运算符用!表示:如果给定的布尔值是false,就返回true;如果给的是true,就返回false。 使用_非_运算符时,布尔值应放在运算符(!)之后。

!true
# => false

!false
# => true

使用括号(())

处理布尔值时,可以用括号来决定先计算哪个布尔值。 括号的用法不同,结果也可能不同。 在 Crystal 中,括号里的内容会先被计算。

true && false && false || true
# => true

true && false && (false || true)
# => false

由于括号里的内容会先被计算,所以在下面的例子中,_非_运算符会作用于括号内的表达式。

!true && false
# => false

!(true && false)
# => true
Note

只有当括号会影响结果时才应该使用它;否则应当省略。

说明

你正在开发一款备受好评的新游戏Crystal Hunter。 在游戏中,你扮演一个四处走动、收集水晶的角色。 玩家捡起所有水晶即可获胜。 如果玩家碰到强盗,就会失去所有水晶,并且输掉游戏。 这条规则有一个例外:玩家可以拥有激活的能量道具,让强盗看不见自己。

你的任务是编写一些将在游戏中使用的规则。

1. 判断角色是否获得奖励点数

在游戏中,如果角色在拥有能量道具的情况下碰到强盗,就会获得奖励点数。

定义Rules#bonus_points?方法,它接收两个实参(角色是否拥有激活的能量道具 和 角色是否正碰到强盗),并返回一个布尔值,表示角色是否会获得奖励点数。 只有当角色拥有激活的能量道具且正碰到强盗时,该方法才应返回true,否则返回false。

Rules.new.bonus_points?(false, true)
# => false

2. 判断角色是否得分

在游戏中,玩家捡起水晶或能量道具时会得分。

定义Rules#score?方法,它接收两个实参(角色是否正碰到能量道具 和 角色是否正碰到水晶),并返回一个布尔值,表示角色是否得分。 如果角色碰到能量道具或水晶,该方法应返回true,否则返回false。

Rules.new.score?(true, true)
# => true

3. 判断角色是否失败

定义Rules#lose?方法,它接收两个实参(角色是否拥有激活的能量道具 和 角色是否正碰到强盗),并返回一个布尔值,表示角色是否失败。 如果角色碰到强盗且没有激活的能量道具,该方法应返回true,否则返回false。

Rules.new.lose?(false, true)
# => true

4. 判断角色是否获胜

定义Rules#win?方法,它接收三个实参(角色是否已捡起所有水晶、角色是否拥有激活的能量道具,以及_角色是否正碰到强盗_),并返回一个布尔值,表示角色是否获胜。 如果角色已收集所有水晶,并且根据第 3 部分定义的实参判断没有失败,该方法应返回true,否则返回false。

Rules.new.win?(false, true, false)
# => false
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Crystal Exercism

准备好开始 水晶猎人 了吗?

注册 Exercism,借助 26 个概念142 个练习 和真人导师指导,学习并掌握 Crystal,全部免费。