Parcours
/
PHP
PHP
/
Exercices
/
L'infiltration d'Annalyn
L'infiltration d'Annalyn

L'infiltration d'Annalyn

Exercice d'apprentissage

Introduction

Booléens

Le type bool (abréviation de booléen) n'a que deux valeurs : true et false. En code, les valeurs littérales true et false ne sont pas sensibles à la casse.

<?php

$value_is_true = true;
$value_is_false = false;

Les valeurs booléennes sont souvent utilisées dans des expressions logiques comme résultat d'un opérateur, puis dans des structures de contrôle.

Opérateurs logiques

Il existe plusieurs opérateurs logiques :

  • !$a : renvoie true si $a n'est pas true
  • $a && $b : renvoie true si $a et $b sont tous les deux true
  • $a || $b : renvoie true si $a ou $b est true
Caution

Il existe un opérateur and et un opérateur or, qui sont respectivement complémentaires de && et ||. Leur comportement n'est pas le même que celui de && et || et ils peuvent produire des résultats inattendus ; leur utilisation est donc déconseillée.

Instructions

Dans cet exercice, tu vas implémenter la logique de quête d'un nouveau jeu de rôle que développe un ami. Le personnage principal du jeu est Annalyn, une jeune fille courageuse accompagnée d'un chien de compagnie féroce et fidèle. Malheureusement, le malheur frappe : son meilleur ami a été enlevé alors qu'il cherchait des baies dans la forêt. Annalyn va tenter de retrouver et de libérer son meilleur ami, en emmenant éventuellement son chien avec elle dans cette quête.

Après avoir suivi pendant un moment la piste de son meilleur ami, elle trouve le camp où celui-ci est retenu prisonnier. Il s'avère qu'il y a deux ravisseurs : un puissant chevalier et un archer rusé.

Ayant trouvé les ravisseurs, Annalyn réfléchit aux actions suivantes qu'elle peut entreprendre :

  • Attaque rapide : une attaque rapide est possible si le chevalier est endormi, car il lui faut du temps pour enfiler son armure, ce qui le rend vulnérable.
  • Espionnage : on peut espionner le groupe si au moins un de ses membres est éveillé. Sinon, espionner est une perte de temps.
  • Signaler au prisonnier : on peut signaler sa position au prisonnier à l'aide de cris d'oiseaux si le prisonnier est éveillé et que l'archer est endormi, car les archers sont formés au signalement par les oiseaux et pourraient donc intercepter le message.
  • Libérer le prisonnier : Annalyn peut tenter de s'introduire discrètement dans le camp pour libérer le prisonnier. C'est une entreprise risquée qui ne peut réussir que de deux façons :
    • Si Annalyn a son chien avec elle, elle peut sauver le prisonnier si l'archer est endormi. Le chevalier a peur du chien et l'archer n'aura pas le temps de se préparer avant qu'Annalyn et le prisonnier ne s'échappent.
    • Si Annalyn n'a pas son chien, elle et le prisonnier doivent être très discrets ! Annalyn peut libérer le prisonnier si le prisonnier est éveillé et que le chevalier et l'archer sont tous les deux endormis, mais si le prisonnier est endormi, il ne peut pas être sauvé : le prisonnier serait surpris par l'apparition soudaine d'Annalyn et réveillerait le chevalier et l'archer.

Tu as quatre tâches : implémenter la logique qui détermine si les actions ci-dessus sont disponibles, en fonction de l'état des trois personnages présents dans la forêt et de la présence ou non du chien d'Annalyn.

1. Vérifie si l'action « Attaque rapide » est possible

Implémente une fonction nommée canFastAttack qui prend une valeur booléenne indiquant si le chevalier est éveillé. Cette fonction renvoie true si l'action « Attaque rapide » est disponible en fonction de l'état du personnage. Sinon, elle renvoie false :

<?php
$is_knight_awake = true;

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

2. Vérifie si l'action « Espionnage » est possible

Implémente une fonction nommée canSpy qui prend trois valeurs booléennes, indiquant si le chevalier, l'archer et le prisonnier, respectivement, sont éveillés. La fonction renvoie true si l'action « Espionnage » est disponible en fonction de l'état des personnages. Sinon, elle renvoie 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. Vérifie si l'action « Signaler au prisonnier » est possible

Implémente une fonction nommée canSignal qui prend deux valeurs booléennes, indiquant si l'archer et le prisonnier, respectivement, sont éveillés. La fonction renvoie true si l'action « Signaler au prisonnier » est disponible en fonction de l'état des personnages. Sinon, elle renvoie false :

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

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

4. Vérifie si l'action « Libérer le prisonnier » est possible

Implémente une fonction nommée canLiberate qui prend quatre valeurs booléennes. Les trois premiers paramètres indiquent si le chevalier, l'archer et le prisonnier, respectivement, sont éveillés. Le dernier paramètre indique si le chien d'Annalyn est présent. La fonction renvoie true si l'action « Libérer le prisonnier » est disponible en fonction de l'état des personnages et de la présence du chien d'Annalyn. Sinon, elle renvoie 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
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
PHP Exercism

Prêt à commencer L'infiltration d'Annalyn ?

Inscris-toi sur Exercism pour apprendre et maîtriser PHP avec 11 concepts122 exercices, et un vrai mentorat humain, le tout gratuitement.