في Crystal نوع يُعرف باسم Bool.
وهو يمثّل القيمتين true و false.
تحتوي Crystal على ثلاثة عوامل منطقية (! و || و &&)، وهي تدمج القيم المنطقية وتُنتج تعبيرات ذات قيم مختلفة.
&&)يُمثَّل عامل and في Crystal بـ &&، ويُرجع true إذا كانت كلتا القيمتين true؛ وإلا فإنه يُرجع false.
عند استخدام عامل and، تُوضع قيمة منطقية على يمين && وأخرى على يساره.
true && true
# => true
true && false
# => false
||)يُمثَّل عامل or في Crystal بـ ||، ويُرجع true إذا كانت واحدة على الأقل من القيم المعطاة true.
وإذا كانت كلتا القيمتين false، فإنه يُرجع false.
عند استخدام عامل or، ينبغي وضع قيمة منطقية على يمين || وأخرى على يساره.
true || true
# => true
true || false
# => true
false || false
# => false
!)يُمثَّل عامل 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
ينبغي استخدام الأقواس الهلالية فقط عندما تؤثر في النتيجة؛ وإلا فينبغي حذفها.
أنت في طور تطوير لعبة جديدة ستلقى إعجابًا كبيرًا: Crystal Hunter. في اللعبة، أنت شخصية تتحرك هنا وهناك وتجمع البلورات. يفوز اللاعب عندما يلتقط كل البلورات. وإذا لمس اللاعب قاطع طريق، فسيفقد كل بلوراته ويخسر اللعبة. وهناك استثناء لهذه القاعدة: يمكن أن يمتلك اللاعب تعزيزًا نشطًا يجعله غير مرئي لقطّاع الطرق.
هدفك هو كتابة بعض القواعد التي ستُستخدم في اللعبة.
في اللعبة، تحصل الشخصية على نقاط إضافية إذا لمست قاطع طريق وهي تمتلك تعزيزًا نشطًا.
عرّف الطريقة Rules#bonus_points? التي تأخذ وسيطين (ما إذا كانت الشخصية تمتلك تعزيزًا نشطًا و_ما إذا كانت الشخصية تلمس قاطع طريق_) وتُرجع قيمة منطقية تخبرنا ما إذا كانت الشخصية ستحصل على نقاط إضافية.
ينبغي أن تُرجع الطريقة true فقط إذا كانت الشخصية تمتلك تعزيزًا نشطًا وتلمس قاطع طريق، وfalse فيما عدا ذلك.
Rules.new.bonus_points?(false, true)
# => false
يحصل اللاعب على نقاط في اللعبة عند التقاط بلورة أو تعزيز.
عرّف الطريقة Rules#score?، التي تأخذ وسيطين (ما إذا كانت الشخصية تلمس تعزيزًا و_ما إذا كانت الشخصية تلمس بلورة_) وتُرجع قيمة منطقية تشير إلى ما إذا كانت الشخصية قد أحرزت نقاطًا أم لا.
ينبغي أن تُرجع الطريقة true إذا لمست الشخصية تعزيزًا أو بلورة، وأن تُرجع false فيما عدا ذلك.
Rules.new.score?(true, true)
# => true
عرّف الطريقة Rules#lose?، التي تأخذ وسيطين (ما إذا كانت الشخصية تمتلك تعزيزًا نشطًا و_ما إذا كانت الشخصية تلمس قاطع طريق_) وتُرجع قيمة منطقية تشير إلى ما إذا كانت الشخصية تخسر أم لا.
ينبغي أن تُرجع الطريقة true إذا لمست الشخصية قاطع طريق ولم تكن تمتلك تعزيزًا نشطًا، وأن تُرجع false فيما عدا ذلك.
Rules.new.lose?(false, true)
# => true
عرّف الطريقة Rules#win?، التي تأخذ ثلاثة وسائط (ما إذا كانت الشخصية قد التقطت كل البلورات، و_ما إذا كانت الشخصية تمتلك تعزيزًا نشطًا_، و_ما إذا كانت الشخصية تلمس قاطع طريق_) وتُرجع قيمة منطقية تشير إلى ما إذا كانت الشخصية تفوز أم لا.
ينبغي أن تُرجع الطريقة true إذا جمعت الشخصية كل البلورات ولم تخسر وفقًا للوسائط المعرّفة في الجزء 3، وأن تُرجع false فيما عدا ذلك.
Rules.new.win?(false, true, false)
# => false
سجّل في Exercism لتتعلّم وتتقن Crystal عبر 26 مفهومًا142 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.