کریستال نوعی دارد به نام Bool.
این نوع مقادیر true و false را نمایش میدهد.
کریستال سه عملگر منطقی دارد (!، ||، &&) که مقادیر منطقی را با هم ترکیب میکنند و عبارتهایی میسازند که مقادیر متفاوتی تولید میکنند.
&&)عملگر و در کریستال با && نمایش داده میشود و اگر هر دو مقدار true باشند true برمیگرداند؛ در غیر این صورت false برمیگرداند.
هنگام استفاده از عملگر و، یک مقدار منطقی در سمت راست && و دیگری در سمت چپ قرار میگیرد.
true && true
# => true
true && false
# => false
||)عملگر یا در کریستال با || نمایش داده میشود و اگر حداقل یکی از مقادیر دادهشده true باشد true برمیگرداند.
اگر هر دو مقدار false باشند، false برمیگرداند.
هنگام استفاده از عملگر یا، یک مقدار منطقی باید در سمت راست || و دیگری در سمت چپ قرار گیرد.
true || true
# => true
true || false
# => true
false || false
# => false
!)عملگر نه در کریستال با ! نمایش داده میشود و اگر مقدار منطقی دادهشده false باشد true برمیگرداند و اگر true داده شود false برمیگرداند.
هنگام استفاده از عملگر نه، یک مقدار منطقی باید بعد از عملگر (!) قرار گیرد.
!true
# => false
!false
# => true
())هنگام کار با مقادیر منطقی، میتوانید از پرانتز استفاده کنید تا تعیین کنید کدام مقادیر منطقی اول ارزیابی شوند. نتیجه بسته به نحوهی استفاده از پرانتز میتواند متفاوت باشد. در کریستال، آنچه داخل پرانتز است اول ارزیابی میشود.
true && false && false || true
# => true
true && false && (false || true)
# => false
چون آنچه داخل پرانتز است اول ارزیابی میشود، در مثال زیر عملگر نه روی عبارت داخل پرانتز اعمال میشود.
!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 را برگرداند و در غیر این صورت false را برگرداند.
Rules.new.win?(false, true, false)
# => false