Треки
/
PHP
PHP
/
Вправи
/
Проникнення Анналін
Проникнення Анналін

Проникнення Анналін

Навчальна вправа

Вступ

Булеві значення

Тип bool (скорочено від булевих значень, англ. Boolean) має лише два значення: true та false. Літеральні значення true та false у коді не залежать від регістру.

<?php

$value_is_true = true;
$value_is_false = false;

Булеві значення часто використовують у логічних виразах як результат роботи оператора, а потім у керуючих конструкціях.

Логічні оператори

Існує кілька логічних операторів:

  • !$a: повертає true, якщо $a не дорівнює true
  • $a && $b (логічне і): повертає true, якщо і $a, і $b дорівнюють true
  • $a || $b (логічне або): повертає true, якщо $a або $b дорівнює true
Caution

Існують також оператори and та or, які відповідають && і || відповідно. Вони поводяться не так, як && і ||, і можуть давати несподівані результати, тому їх не радимо використовувати.

Вказівки

У цій вправі ми реалізуємо логіку квесту для нової рольової гри, яку розробляє друг. Головна героїня гри - Анналін, хоробра дівчина з відважним і відданим собакою. На жаль, трапляється біда: її найкращого друга викрали, коли він шукав у лісі ягоди. Анналін спробує знайти й визволити найкращого друга, можливо, взявши із собою в цей квест свого собаку.

Витративши деякий час на те, щоб іти слідом за найкращим другом, вона знаходить табір, у якому його увʼязнено. Виявляється, викрадачів двоє: могутній лицар і хитрий лучник.

Знайшовши викрадачів, Анналін обмірковує, які з наведених далі дій вона може здійснити:

  • Швидка атака: швидку атаку можна здійснити, якщо лицар спить, бо йому потрібен час, щоб вдягнути обладунки, тож він буде вразливим.
  • Шпигування: за групою можна пошпигувати, якщо хоча б один із них не спить. Інакше це марна трата часу.
  • Подати сигнал вʼязню: вʼязню можна подати сигнал пташиними звуками, якщо вʼязень не спить і лучник спить, бо лучників навчають пташиного сигналювання, тож вони можуть перехопити повідомлення.
  • Визволити вʼязня: Анналін може спробувати пробратися в табір, щоб визволити вʼязня. Це ризиковано, і вдатися може лише одним із двох способів:
    • Якщо Анналін бере із собою свого собаку, вона може врятувати вʼязня, якщо лучник спить. Лицар боїться собаки, а лучник не встигне підготуватися, перш ніж Анналін і вʼязень утечуть.
    • Якщо Анналін без собаки, то і їй, і вʼязню доведеться бути дуже обережними! Анналін може визволити вʼязня, якщо вʼязень не спить, а лицар і лучник обоє сплять, але якщо вʼязень спить, його врятувати не вдасться: він злякається раптової появи Анналін і розбудить лицаря з лучником.

У нас чотири завдання: реалізувати логіку, яка визначає, чи доступні наведені вище дії, виходячи зі стану трьох персонажів, знайдених у лісі, і з того, чи є з Анналін її собака.

1. Перевірити, чи можлива дія «Швидка атака»

Реалізуйте функцію з назвою canFastAttack, яка приймає булеве значення (англ. Boolean), що вказує, чи не спить лицар. Ця функція повертає 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, яка приймає чотири булеві значення. Перші три параметри вказують відповідно, чи не сплять лицар, лучник і вʼязень. Останній параметр вказує, чи присутній собака Анналін. Функція повертає 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, щоб вивчати й опановувати PHP, а також 11 концепцій122 вправи та справжнє наставництво від людей, і все це безкоштовно.