مسیرها
/
Crystal
Crystal
/
تمرین‌ها
/
شکارچی Crystal
شکارچی Crystal

شکارچی Crystal

تمرین یادگیری

مقدمه

کریستال نوعی دارد به نام 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
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 را برگرداند و در غیر این صورت false را برگرداند.

Rules.new.win?(false, true, false)
# => false
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Crystal Exercism

آماده‌اید شکارچی Crystal را شروع کنید؟

در Exercism ثبت‌نام کنید تا Crystal را همراه با 26 مفهوم142 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.