مسیرها
/
Swift
Swift
/
تمرین‌ها
/
ماجراجویی بال‌ها
ماجراجویی بال‌ها

ماجراجویی بال‌ها

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

مقدمه

Swift یک نوع داده‌ای داخلی به نام Bool ارائه می‌دهد که برای نمایش مقادیر درستی به کار می‌رود: true و false.

عملگرهای منطقی

Swift سه عملگر منطقی (!، && و ||) ارائه می‌دهد که عبارت‌های منطقی را با هم ترکیب و ارزیابی می‌کنند.

AND منطقی (&&)

عملگر and (&&) تنها زمانی true را برمی‌گرداند که هر دو عملوند true باشند. اگر یکی از عملوندها false باشد، مقدار false را برمی‌گرداند. یک عبارت یا مقدار منطقی را در هر طرف نماد && قرار دهید:

true && true  // true
true && false // false

OR منطقی (||)

عملگر or (||) اگر حداقل یکی از عملوندها true باشد، true را برمی‌گرداند. تنها زمانی false را برمی‌گرداند که هر دو عملوند false باشند. یک عبارت یا مقدار منطقی را در هر طرف نماد || قرار دهید:

true || true   // true
true || false  // true
false || false // false

NOT منطقی (!)

عملگر not (!) یک مقدار منطقی را معکوس می‌کند. اگر مقدار false باشد true را برمی‌گرداند و اگر مقدار true باشد false را برمی‌گرداند. عملگر ! را بلافاصله قبل از مقدار یا عبارت قرار دهید:

!true  // false
!false // true

استفاده از پرانتز (())

می‌توانید از پرانتز برای گروه‌بندی عبارت‌ها و کنترل ترتیب ارزیابی استفاده کنید. در Swift، عبارت‌های داخل پرانتز اول ارزیابی می‌شوند:

true && false && false || true   // true
true && false && (false || true) // false

گروه‌بندی با پرانتز همچنین تعیین می‌کند که عملگر NOT چگونه روی عبارت‌های پیچیده اعمال می‌شود:

!true && false   // false (evaluates (!true) first, then false && false)
!(true && false) // true  (evaluates (true && false) first to false, then !false)
Note

هر جا لازم است ترتیب ارزیابی را روشن کنید یا خواندن شرط‌های پیچیده را آسان‌تر کنید، از پرانتز استفاده کنید. وقتی اولویت پیش‌فرض از پیش روشن است، از افزودن پرانتزهای بی‌مورد بپرهیزید.

دستورالعمل‌ها

شما در حال ساخت بازی جدید و پرطرفدار «Wings Quest» هستید. در این بازی شما یک پرنده هستید که این‌طرف و آن‌طرف حرکت می‌کند و دانه جمع می‌کند. بازیکن با برداشتن همه‌ی دانه‌ها برنده می‌شود. اگر بازیکن با عقابی تماس پیدا کند، همه‌ی دانه‌هایش را از دست می‌دهد و بازی را می‌بازد. یک استثنا برای این قاعده وجود دارد: بازیکن می‌تواند یک «پاورآپ» فعال داشته باشد که باعث می‌شود بالاتر از پرنده‌های دیگر پرواز کند.

هدف شما نوشتن چند قاعده است که در بازی استفاده خواهند شد.

1. تعیین کنید آیا پرنده امتیاز جایزه می‌گیرد

در بازی، پرنده اگر در حالی که پاورآپ دارد با عقابی تماس پیدا کند، امتیاز جایزه می‌گیرد.

تابع bonusPoints(powerUpActive:touchingEagle:) را تعریف کنید که دو ورودی می‌گیرد: powerUpActive که نشان می‌دهد آیا پرنده پاورآپ فعال دارد یا نه، و ورودی touchingEagle که نشان می‌دهد آیا پرنده با عقابی در تماس است یا نه. تابع باید فقط زمانی true برگرداند که پرنده پاورآپ فعال داشته باشد و با عقابی در تماس باشد، و در غیر این صورت false برگرداند.

bonusPoints(powerUpActive: false, touchingEagle: true)
// Returns false

2. تعیین کنید آیا پرنده امتیاز می‌گیرد

در بازی، بازیکن با برداشتن یک دانه یا یک پاورآپ امتیاز می‌گیرد.

تابع score(touchingPowerUp:touchingSeed:) را تعریف کنید که دو ورودی می‌گیرد: touchingPowerUp که نشان می‌دهد آیا پرنده با پاورآپی در تماس است، و ورودی touchingSeed که نشان می‌دهد آیا پرنده با دانه‌ای در تماس است. تابع باید اگر پرنده با پاورآپ یا دانه‌ای در تماس باشد true برگرداند، و در غیر این صورت false برگرداند.

score(touchingPowerUp: true, touchingSeed: true)
// Returns true

3. تعیین کنید آیا پرنده می‌بازد

تابع lose(powerUpActive:touchingEagle:) را تعریف کنید که دو ورودی می‌گیرد: powerUpActive که نشان می‌دهد آیا پرنده پاورآپ فعال دارد یا نه، و ورودی touchingEagle که نشان می‌دهد آیا پرنده با عقابی در تماس است یا نه. تابع باید اگر شخصیت بازی با عقابی در تماس باشد و پاورآپ فعال نداشته باشد true برگرداند، و در غیر این صورت false برگرداند.

lose(powerUpActive: false, touchingEagle: true)
// Returns true

4. تعیین کنید آیا پرنده برنده می‌شود

تابع win(hasPickedUpAllSeeds:powerUpActive:touchingEagle:) را تعریف کنید که این ورودی‌ها را می‌گیرد:

  • hasPickedUpAllSeeds اگر پرنده همه‌ی دانه‌ها را برداشته باشد.
  • powerUpActive اگر پرنده پاورآپ فعال داشته باشد.
  • touchingEagle اگر پرنده با عقابی در تماس باشد.

تابع باید اگر پرنده همه‌ی دانه‌ها را جمع کرده باشد و بر اساس ورودی‌های تعریف‌شده در بخش ۳ بازی را نباخته باشد true برگرداند، و در غیر این صورت false برگرداند.

win(hasPickedUpAllSeeds: false, powerUpActive: true, touchingEagle: false)
// Returns false
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Swift Exercism

آماده‌اید ماجراجویی بال‌ها را شروع کنید؟

در Exercism ثبت‌نام کنید تا Swift را همراه با 35 مفهوم116 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.