學習軌道
/
PHP
PHP
/
練習
/
安娜琳的滲透行動
安娜琳的滲透行動

安娜琳的滲透行動

學習練習

簡介

布林值

bool型別(boolean 的縮寫)只有兩個值:true和false。 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

準備好開始 安娜琳的滲透行動 了嗎?

註冊 Exercism,透過 11 個概念122 個練習 和真人引導來學習並精通 PHP,全部免費。