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
只有当括号会影响结果时才应该使用它;否则应当省略。
你正在开发一款备受好评的新游戏Crystal Hunter。 在游戏中,你扮演一个四处走动、收集水晶的角色。 玩家捡起所有水晶即可获胜。 如果玩家碰到强盗,就会失去所有水晶,并且输掉游戏。 这条规则有一个例外:玩家可以拥有激活的能量道具,让强盗看不见自己。
你的任务是编写一些将在游戏中使用的规则。
在游戏中,如果角色在拥有能量道具的情况下碰到强盗,就会获得奖励点数。
定义Rules#bonus_points?方法,它接收两个实参(角色是否拥有激活的能量道具 和 角色是否正碰到强盗),并返回一个布尔值,表示角色是否会获得奖励点数。
只有当角色拥有激活的能量道具且正碰到强盗时,该方法才应返回true,否则返回false。
Rules.new.bonus_points?(false, true)
# => false
在游戏中,玩家捡起水晶或能量道具时会得分。
定义Rules#score?方法,它接收两个实参(角色是否正碰到能量道具 和 角色是否正碰到水晶),并返回一个布尔值,表示角色是否得分。
如果角色碰到能量道具或水晶,该方法应返回true,否则返回false。
Rules.new.score?(true, true)
# => true
定义Rules#lose?方法,它接收两个实参(角色是否拥有激活的能量道具 和 角色是否正碰到强盗),并返回一个布尔值,表示角色是否失败。
如果角色碰到强盗且没有激活的能量道具,该方法应返回true,否则返回false。
Rules.new.lose?(false, true)
# => true
定义Rules#win?方法,它接收三个实参(角色是否已捡起所有水晶、角色是否拥有激活的能量道具,以及_角色是否正碰到强盗_),并返回一个布尔值,表示角色是否获胜。
如果角色已收集所有水晶,并且根据第 3 部分定义的实参判断没有失败,该方法应返回true,否则返回false。
Rules.new.win?(false, true, false)
# => false