صيّاد Crystal

صيّاد Crystal

تمرين تعلّمي

مقدمة

في Crystal نوع يُعرف باسم Bool. وهو يمثّل القيمتين true و false.

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

تحتوي Crystal على ثلاثة عوامل منطقية (! و || و &&)، وهي تدمج القيم المنطقية وتُنتج تعبيرات ذات قيم مختلفة.

And (&&)

يُمثَّل عامل and في Crystal بـ &&، ويُرجع true إذا كانت كلتا القيمتين true؛ وإلا فإنه يُرجع false. عند استخدام عامل and، تُوضع قيمة منطقية على يمين && وأخرى على يساره.

true && true
# => true

true && false
# => false

Or (||)

يُمثَّل عامل or في Crystal بـ ||، ويُرجع true إذا كانت واحدة على الأقل من القيم المعطاة true. وإذا كانت كلتا القيمتين false، فإنه يُرجع false. عند استخدام عامل or، ينبغي وضع قيمة منطقية على يمين || وأخرى على يساره.

true || true
# => true

true || false
# => true

false || false
# => false

Not (!)

يُمثَّل عامل not في Crystal بـ !، ويُرجع true إذا كانت القيمة المنطقية المعطاة false، ويُرجع false إذا أُعطيت true. عند استخدام عامل not، ينبغي وضع قيمة منطقية بعد العامل (!).

!true
# => false

!false
# => true

استخدام الأقواس الهلالية (())

عند التعامل مع القيم المنطقية، يمكنك استخدام الأقواس الهلالية لتحديد أي القيم المنطقية تُقيَّم أولًا. وقد تختلف النتيجة حسب طريقة استخدام الأقواس الهلالية. في Crystal، يُقيَّم ما بداخل الأقواس الهلالية أولًا.

true && false && false || true
# => true

true && false && (false || true)
# => false

ولأن ما بداخل الأقواس الهلالية يُقيَّم أولًا، فسيُطبَّق عامل not على التعبير الموجود داخل الأقواس الهلالية في المثال التالي.

!true && false
# => false

!(true && false)
# => true
Note

ينبغي استخدام الأقواس الهلالية فقط عندما تؤثر في النتيجة؛ وإلا فينبغي حذفها.

التعليمات

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

هدفك هو كتابة بعض القواعد التي ستُستخدم في اللعبة.

1. حدّد ما إذا كانت الشخصية تحصل على نقاط إضافية

في اللعبة، تحصل الشخصية على نقاط إضافية إذا لمست قاطع طريق وهي تمتلك تعزيزًا نشطًا.

عرّف الطريقة Rules#bonus_points? التي تأخذ وسيطين (ما إذا كانت الشخصية تمتلك تعزيزًا نشطًا و_ما إذا كانت الشخصية تلمس قاطع طريق_) وتُرجع قيمة منطقية تخبرنا ما إذا كانت الشخصية ستحصل على نقاط إضافية. ينبغي أن تُرجع الطريقة true فقط إذا كانت الشخصية تمتلك تعزيزًا نشطًا وتلمس قاطع طريق، وfalse فيما عدا ذلك.

Rules.new.bonus_points?(false, true)
# => false

2. حدّد ما إذا كانت الشخصية تحرز نقاطًا

يحصل اللاعب على نقاط في اللعبة عند التقاط بلورة أو تعزيز.

عرّف الطريقة Rules#score?، التي تأخذ وسيطين (ما إذا كانت الشخصية تلمس تعزيزًا و_ما إذا كانت الشخصية تلمس بلورة_) وتُرجع قيمة منطقية تشير إلى ما إذا كانت الشخصية قد أحرزت نقاطًا أم لا. ينبغي أن تُرجع الطريقة true إذا لمست الشخصية تعزيزًا أو بلورة، وأن تُرجع false فيما عدا ذلك.

Rules.new.score?(true, true)
# => true

3. حدّد ما إذا كانت الشخصية تخسر

عرّف الطريقة Rules#lose?، التي تأخذ وسيطين (ما إذا كانت الشخصية تمتلك تعزيزًا نشطًا و_ما إذا كانت الشخصية تلمس قاطع طريق_) وتُرجع قيمة منطقية تشير إلى ما إذا كانت الشخصية تخسر أم لا. ينبغي أن تُرجع الطريقة true إذا لمست الشخصية قاطع طريق ولم تكن تمتلك تعزيزًا نشطًا، وأن تُرجع false فيما عدا ذلك.

Rules.new.lose?(false, true)
# => true

4. حدّد ما إذا كانت الشخصية تفوز

عرّف الطريقة Rules#win?، التي تأخذ ثلاثة وسائط (ما إذا كانت الشخصية قد التقطت كل البلورات، و_ما إذا كانت الشخصية تمتلك تعزيزًا نشطًا_، و_ما إذا كانت الشخصية تلمس قاطع طريق_) وتُرجع قيمة منطقية تشير إلى ما إذا كانت الشخصية تفوز أم لا. ينبغي أن تُرجع الطريقة true إذا جمعت الشخصية كل البلورات ولم تخسر وفقًا للوسائط المعرّفة في الجزء 3، وأن تُرجع false فيما عدا ذلك.

Rules.new.win?(false, true, false)
# => false
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Crystal Exercism

مستعد لبدء صيّاد Crystal؟

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