轨道
/
F#
F#
/
练习
/
Annalyn 的潜入
Annalyn 的潜入

Annalyn 的潜入

学习练习

简介

布尔值

F# 中的布尔值由bool类型表示,它的值可以是true或false。

F# 支持三种布尔运算符:not(NOT)、&&(AND)和||(OR)。

说明

在这个练习中,你要为一个新的角色扮演游戏实现任务逻辑,这个游戏是你朋友正在开发的。游戏的主角是 Annalyn,一个勇敢的女孩,有一只凶猛又忠诚的宠物狗。不幸的是,灾难降临了:她最好的朋友在森林里寻找浆果时被绑架了。Annalyn 会设法找到并救出她最好的朋友,在这次冒险中也可以选择带上自己的狗。

沿着最好朋友的踪迹追了一段时间后,她找到了关押她最好朋友的营地。原来绑架者有两个人:一位强大的骑士和一个狡猾的弓箭手。

找到绑架者后,Annalyn 开始考虑自己可以采取下面哪些行动:

  • 快速攻击:如果骑士正在睡觉,就可以发动快速攻击,因为他穿上盔甲需要时间,此时他会很脆弱。
  • 侦察:只要他们中至少有一个人醒着,就可以侦察这群人。否则,侦察就是浪费时间。
  • 向囚犯发信号:如果囚犯醒着而弓箭手在睡觉,就可以用鸟叫声向囚犯发信号,因为弓箭手受过鸟鸣信号的训练,可能会截获消息。
  • 解救囚犯:Annalyn 可以试着潜入营地救出囚犯。 这样做很冒险,只有在下面两种方式之一才能成功:
    • 如果 Annalyn 带着她的宠物狗,那么在弓箭手睡着时她就能救出囚犯。 骑士害怕这只狗,弓箭手也来不及做好准备,Annalyn 和囚犯就能逃走。
    • 如果 Annalyn 没有带狗,那她和囚犯就必须非常小心谨慎! 如果囚犯醒着,而且骑士和弓箭手都睡着了,Annalyn 就能救出囚犯;但如果囚犯正在睡觉,就没法救他:囚犯会被 Annalyn 的突然出现吓到,从而惊醒骑士和弓箭手。

你有四项任务:根据在森林里遇到的三个角色的状态,以及 Annalyn 的宠物狗是否在场,实现判断上述行动是否可行的逻辑。

1. 检查是否可以发动快速攻击

实现canFastAttack函数,它接受一个布尔值,表示骑士是否醒着。这个函数根据骑士的状态,如果可以发动快速攻击就返回true,否则返回false:

let knightIsAwake = true
canFastAttack(knightIsAwake)
// => false

2. 检查是否可以侦察这群人

实现canSpy函数,它接受三个布尔值,分别表示骑士、弓箭手和囚犯是否醒着。这个函数根据这三个角色的状态,如果可以侦察这群人就返回true,否则返回false:

let knightIsAwake = false
let archerIsAwake = true
let prisonerIsAwake = false
canSpy(knightIsAwake, archerIsAwake, prisonerIsAwake)
// => true

3. 检查是否可以向囚犯发信号

实现canSignalPrisoner函数,它接受两个布尔值,分别表示弓箭手和囚犯是否醒着。这个函数根据这两个角色的状态,如果可以给囚犯发信号就返回true,否则返回false:

let archerIsAwake = false
let prisonerIsAwake = true
canSignalPrisoner(archerIsAwake, prisonerIsAwake)
// => true

4. 检查是否可以救出囚犯

实现canFreePrisoner函数,它接受四个布尔值。前三个形参分别表示骑士、弓箭手和囚犯是否醒着。最后一个形参表示 Annalyn 的宠物狗是否在场。这个函数根据这三个角色的状态以及 Annalyn 的宠物狗是否在场,如果可以救出囚犯就返回true,否则返回false:

let knightIsAwake = false
let archerIsAwake = true
let prisonerIsAwake = false
let petDogIsPresent = false
canFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent)
// => false
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
F# Exercism

准备好开始 Annalyn 的潜入 了吗?

注册 Exercism,借助 18 个概念148 个练习 和真人导师指导,学习并掌握 F#,全部免费。