المسارات
/
Java
Java
/
التمارين
/
تسلّل أنالين
تسلّل أنالين

تسلّل أنالين

تمرين تعلّمي

مقدمة

القيم المنطقية

تُمثَّل القيم المنطقية في Java بالنوع boolean، ويمكن أن تكون قيمها إما true أو false.

تدعم Java ثلاثة عوامل منطقية:

  • ! (NOT): يعكس القيمة المنطقية
  • && (AND): يأخذ قيمتين منطقيتين ويُرجع true إذا كانتا كلتاهما true
  • || (OR): يُرجع true إذا كانت إحدى القيمتين المنطقيتين true

أمثلة

!true // => false
!false // => true
true && false // => false
true && true // => true
false || false // => false
false || true // => true

التعليمات

في هذا التمرين، ستُنجز منطق المهمة للعبة تقمّص أدوار جديدة يعمل صديقك على تطويرها. الشخصية الرئيسية في اللعبة هي أنالين، فتاة شجاعة تمتلك كلبًا أليفًا شرسًا ووفيًا. للأسف، تقع الكارثة: فقد اختُطف صديقها المقرّب أثناء بحثه عن التوت في الغابة. ستحاول أنالين العثور على صديقها وإنقاذه، وقد تأخذ كلبها معها في المهمة.

بعد أن تتبّعت الأثر لبعض الوقت، تكتشف أنالين المخيّم الذي يُحتجز فيه صديقها. ويتّضح أن هناك خاطفَين: فارس جبّار ورامٍ ماكر.

بعد أن وجدت الخاطفين، تفكّر أنالين في أي من الإجراءات التالية يمكنها القيام بها:

  • الهجوم السريع: يمكن شنّ هجوم سريع إذا كان الفارس نائمًا، إذ يستغرق ارتداء درعه وقتًا، ما يجعله مكشوفًا.
  • التجسّس: يمكن التجسّس على المجموعة إذا كان أحد أفرادها على الأقل مستيقظًا. وإلا فإن التجسّس مضيعة للوقت.
  • إرسال إشارة إلى السجين: يمكن إرسال إشارة إلى السجين باستخدام أصوات الطيور إذا كان السجين مستيقظًا والرامي نائمًا. فالرماة مدرّبون على الإشارات بأصوات الطيور، وقد يعترضون الرسالة إذا كانوا مستيقظين.
  • تحرير السجين: يمكن لأنالين أن تحاول التسلّل إلى المخيّم لتحرير السجين. هذا أمر محفوف بالمخاطر ولا يمكن أن ينجح إلا في إحدى الحالتين:
    • إذا كانت أنالين بصحبة كلبها الأليف، فيمكنها إنقاذ السجين إذا كان الرامي نائمًا. فالفارس يخاف من الكلب، ولن يكون لدى الرامي وقت للاستعداد قبل أن تتمكّن أنالين والسجين من الهرب.
    • أما إذا لم تكن أنالين بصحبة كلبها الأليف، فعليها هي والسجين أن يتسلّلا بحذر شديد! يمكن لأنالين تحرير السجين إذا كان السجين مستيقظًا وكان الفارس والرامي نائمَين. لكن إذا كان السجين نائمًا فلا يمكن إنقاذه، إذ سيفزع من ظهور أنالين المفاجئ فيوقظ الفارس والرامي.

لديك أربع مهام: إنجاز المنطق الذي يحدّد ما إذا كانت الإجراءات أعلاه متاحة بناءً على حالة الشخصيات الثلاث في الغابة وما إذا كان كلب أنالين الأليف موجودًا أم لا.

1. تحقّق مما إذا كان يمكن شنّ هجوم سريع

نفّذ الطريقة (static) AnnalynsInfiltration.canFastAttack()، التي تأخذ قيمة منطقية تشير إلى ما إذا كان الفارس مستيقظًا. تُرجع هذه الطريقة true إذا كان يمكن شنّ هجوم سريع بناءً على حالة الفارس. وإلا فإنها تُرجع false:

boolean knightIsAwake = true;
AnnalynsInfiltration.canFastAttack(knightIsAwake);
// => false

2. تحقّق مما إذا كان يمكن التجسّس على المجموعة

نفّذ الطريقة (static) AnnalynsInfiltration.canSpy()، التي تأخذ ثلاث قيم منطقية تشير على التوالي إلى ما إذا كان الفارس والرامي والسجين مستيقظين. تُرجع الطريقة true إذا كان يمكن التجسّس على المجموعة بناءً على حالة الشخصيات الثلاث. وإلا فإنها تُرجع false:

boolean knightIsAwake = false;
boolean archerIsAwake = true;
boolean prisonerIsAwake = false;
AnnalynsInfiltration.canSpy(knightIsAwake, archerIsAwake, prisonerIsAwake);
// => true

3. تحقّق مما إذا كان يمكن إرسال إشارة إلى السجين

نفّذ الطريقة (static) AnnalynsInfiltration.canSignalPrisoner()، التي تأخذ قيمتين منطقيتين تشير على التوالي إلى ما إذا كان الرامي والسجين مستيقظين. تُرجع الطريقة true إذا كان يمكن إرسال إشارة إلى السجين بناءً على حالة الشخصيتين. وإلا فإنها تُرجع false:

boolean archerIsAwake = false;
boolean prisonerIsAwake = true;
AnnalynsInfiltration.canSignalPrisoner(archerIsAwake, prisonerIsAwake);
// => true

4. تحقّق مما إذا كان يمكن تحرير السجين

نفّذ الطريقة (static) AnnalynsInfiltration.canFreePrisoner()، التي تأخذ أربع قيم منطقية. تشير المعاملات الثلاثة الأولى على التوالي إلى ما إذا كان الفارس والرامي والسجين مستيقظين. ويشير المعامل الأخير إلى ما إذا كان كلب أنالين الأليف موجودًا. تُرجع الطريقة true إذا كان يمكن تحرير السجين بناءً على حالة الشخصيات الثلاث ووجود كلب أنالين الأليف. وإلا فإنها تُرجع false:

boolean knightIsAwake = false;
boolean archerIsAwake = true;
boolean prisonerIsAwake = false;
boolean petDogIsPresent = false;
AnnalynsInfiltration.canFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent);
// => false
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Java Exercism

مستعد لبدء تسلّل أنالين؟

سجّل في Exercism لتتعلّم وتتقن Java عبر 26 مفهومًا158 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.