المسارات
/
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 تأخذ قيمة منطقية تشير إلى ما إذا كان الفارس مستيقظًا. تُرجع هذه الدالة 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 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.