Cairo 中的布尔值由预声明的布尔类型bool表示,它的值可以是true或false。
let speeding = true; // Boolean variable 'speeding' set to 'true'
let has_error = false; // Boolean variable 'has_error' set to 'false'
Cairo 支持 3 种逻辑运算符,它们可以把表达式求值为布尔值,返回true或false。
| 运算符 | 含义 |
|---|---|
&& (and) |
两个判定都为真时,结果为真。 |
|| (or) |
至少一个判定为真时,结果为真。 |
! (not) |
仅当判定为假时,结果为真。 |
在这个练习中,你要为一个朋友正在开发的新 RPG 游戏实现任务逻辑。 游戏的主角是 Annalyn,一个勇敢的女孩,她有一只凶猛又忠诚的宠物狗。 不幸的是,灾难降临了:她最好的朋友在森林里采浆果时被绑架了。 Annalyn 会设法找到并解救她最好的朋友,在这次冒险中她可以选择带上她的狗。
沿着最好朋友的踪迹追踪了一段时间后,她找到了关押她最好朋友的营地。 原来有两个绑匪:一个强大的骑士和一个狡猾的弓箭手。
找到绑匪后,Annalyn 开始考虑自己可以采取以下哪些行动:
你有四个任务:根据森林里这三个角色的状态以及 Annalyn 的宠物狗是否在场,实现判断上述行动是否可用的逻辑。
定义can_fast_attack()函数,它接收一个布尔值,表示骑士是否醒着。
如果根据骑士的状态可以发动快速攻击,该函数返回true。
否则返回false:
let knight_awake = true;
can_fast_attack(knight_awake); // false
定义can_spy()函数,它接收三个布尔值,分别表示骑士、弓箭手和囚犯是否醒着。
如果根据这三个角色的状态可以侦察这群人,该函数返回true。
否则返回false:
let knight_awake = false;
let archer_awake = true;
let prisoner_awake = false;
can_spy(knight_awake, archer_awake, prisoner_awake); // true
定义can_signal_prisoner()函数,它接收两个布尔值,分别表示弓箭手和囚犯是否醒着。
如果根据这两个角色的状态可以向囚犯发信号,该函数返回true。
否则返回false:
let archer_awake = false;
let prisoner_awake = true;
can_signal_prisoner(archer_awake, prisoner_awake); // true
定义can_free_prisoner()函数,它接收四个布尔值。
前三个形参分别表示骑士、弓箭手和囚犯是否醒着。
最后一个形参表示 Annalyn 的宠物狗是否在场。
如果根据这三个角色的状态以及 Annalyn 的宠物狗是否在场可以解救囚犯,该函数返回true。
否则返回false:
let knight_awake = false;
let archer_awake = true;
let prisoner_awake = false;
let dog_present = false;
can_free_prisoner(knight_awake, archer_awake, prisoner_awake, dog_present); // false