轨道
/
PHP
PHP
/
练习
/
Annalyn 的潜入
Annalyn 的潜入

Annalyn 的潜入

学习练习

简介

布尔值

bool类型(boolean 的缩写)只有两个值:true和false。 在代码中,这两个字面值不区分大小写。

<?php

$value_is_true = true;
$value_is_false = false;

布尔值经常出现在逻辑表达式中,作为运算符的结果,之后又被用在控制结构里。

逻辑运算符

逻辑运算符有以下几种:

  • !$a:如果$a不是true,就返回true
  • $a && $b:如果$a和$b都是true,就返回true
  • $a || $b:只要$a或$b中有一个是true,就返回true
Caution

还有and和or两个运算符,它们分别对应&&和||。它们的行为与&&和||并不相同,可能会产生意想不到的结果,因此不建议使用。

说明

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

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

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

  • 快速攻击:只要骑士处于**睡着**状态,就可以发动快速攻击,因为他穿上盔甲需要时间,这时他会很脆弱。
  • 侦察:只要他们中至少有一个是**醒着的**,就可以对这群人进行侦察。否则,侦察就是浪费时间。
  • 向囚犯发信号:如果囚犯是**醒着的,而弓箭手是睡着的**,就可以用鸟叫声向囚犯发信号,因为弓箭手受过鸟鸣信号的训练,可能会截获这条信息。
  • 解救囚犯:Annalyn 可以试着潜入营地,把囚犯救出来。 这件事风险很大,只有两种方式能成功:
    • 如果 Annalyn 带上了她的宠物狗,那么只要弓箭手是**睡着的**,她就能救出囚犯。 骑士怕狗,而弓箭手来不及准备好,Annalyn 和囚犯就能逃走。
    • 如果 Annalyn 没有带上她的狗,那她和囚犯就必须非常悄悄地行动! 只要囚犯是**醒着的,并且骑士和弓箭手都睡着,Annalyn 就能救出囚犯;但如果囚犯是睡着的**,就没法救出他们:Annalyn 突然出现会吓到囚犯,从而吵醒骑士和弓箭手。

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

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

实现一个名为canFastAttack的函数,它接收一个布尔值,表示骑士是否醒着。 如果根据该角色的状态,“快速攻击”行动可用,这个函数就返回true;否则返回false:

<?php
$is_knight_awake = true;

$infiltration = new AnnalynsInfiltration();
$infiltration->canFastAttack($is_knight_awake);
// => false

2. 检查是否可以采取“侦察”行动

实现一个名为canSpy的函数,它接收三个布尔值,分别表示骑士、弓箭手和囚犯是否醒着。 如果根据这些角色的状态,“侦察”行动可用,这个函数就返回true;否则返回false:

<?php
$is_knight_awake = false;
$is_archer_awake = true;
$is_prisoner_awake = false;

$infiltration = new AnnalynsInfiltration();
$infiltration->canSpy($is_knight_awake, $is_archer_awake, $is_prisoner_awake);
// => true

3. 检查是否可以采取“向囚犯发信号”行动

实现一个名为canSignal的函数,它接收两个布尔值,分别表示弓箭手和囚犯是否醒着。 如果根据这些角色的状态,“向囚犯发信号”行动可用,这个函数就返回true;否则返回false:

<?php
$is_archer_awake = false;
$is_prisoner_awake = true;

$infiltration = new AnnalynsInfiltration();
$infiltration->canSignal($is_archer_awake, $is_prisoner_awake);
// => true

4. 检查是否可以采取“解救囚犯”行动

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

<?php
$is_knight_awake = false;
$is_archer_awake = true;
$is_prisoner_awake = false;
$is_dog_present = false;

$infiltration = new AnnalynsInfiltration();
$infiltration->canLiberate(
    $is_knight_awake,
    $is_archer_awake,
    $is_prisoner_awake,
    $is_dog_present
);
// => false
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
PHP Exercism

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

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