مقدارهای «منطقی» در Cairo با نوع منطقی از پیش تعریفشدهی bool نمایش داده میشوند که مقدارهایش میتوانند true یا false باشند.
let speeding = true; // Boolean variable 'speeding' set to 'true'
let has_error = false; // Boolean variable 'has_error' set to 'false'
Cairo از سه عملگر منطقی پشتیبانی میکند که میتوانند عبارتها را به مقدارهای منطقی ارزیابی کنند و true یا false برگردانند.
| عملگر | معنی آن |
|---|---|
&& (و) |
اگر هر دو عبارت درست باشند، نتیجه «درست» است. |
|| (یا) |
اگر حداقل یکی از عبارتها درست باشد، نتیجه «درست» است. |
! (نه) |
فقط وقتی نتیجه «درست» است که عبارت «غلط» باشد. |
در این تمرین، منطق ماجراجویی یک بازی نقشآفرینی جدید را پیادهسازی میکنید که دوستتان در حال ساخت آن است. شخصیت اصلی بازی آنالین است؛ دختری شجاع که یک سگ خانگی خشن و وفادار دارد. متأسفانه فاجعه رخ میدهد: بهترین دوستش در حالی که در جنگل به دنبال توت میگشت، ربوده شد. آنالین تلاش میکند بهترین دوستش را پیدا کرده و آزاد کند و در این ماجراجویی، بهطور اختیاری سگش را هم با خود میبرد.
آنالین پس از مدتی که رد پای بهترین دوستش را دنبال میکند، اردوگاهی را پیدا میکند که بهترین دوستش در آن زندانی است. معلوم میشود دو آدمربا وجود دارند: یک شوالیهی قدرتمند و یک کماندار حیلهگر.
آنالین پس از یافتن آدمرباها، بررسی میکند که میتواند کدامیک از کارهای زیر را انجام دهد:
چهار وظیفه دارید: پیادهسازی منطق تشخیص اینکه آیا کارهای بالا با توجه به وضعیت سه شخصیتی که در جنگل پیدا شدند و حضور یا عدم حضور سگ خانگی آنالین در دسترس هستند یا نه.
تابع can_fast_attack() را تعریف کنید که یک مقدار «منطقی» میگیرد که نشان میدهد شوالیه بیدار است یا نه.
این تابع اگر با توجه به وضعیت شوالیه بتوان حملهی سریع انجام داد، true برمیگرداند.
در غیر این صورت، false برمیگرداند:
let knight_awake = true;
can_fast_attack(knight_awake); // false
تابع can_spy() را تعریف کنید که سه مقدار منطقی میگیرد که بهترتیب نشان میدهند شوالیه، کماندار و زندانی بیدار هستند یا نه.
تابع اگر با توجه به وضعیت این سه شخصیت بتوان از گروه جاسوسی کرد، true برمیگرداند.
در غیر این صورت، false برمیگرداند:
let knight_awake = false;
let archer_awake = true;
let prisoner_awake = false;
can_spy(knight_awake, archer_awake, prisoner_awake); // true
تابع can_signal_prisoner() را تعریف کنید که دو مقدار منطقی میگیرد که بهترتیب نشان میدهند کماندار و زندانی بیدار هستند یا نه.
تابع اگر با توجه به وضعیت این دو شخصیت بتوان به زندانی علامت داد، true برمیگرداند.
در غیر این صورت، false برمیگرداند:
let archer_awake = false;
let prisoner_awake = true;
can_signal_prisoner(archer_awake, prisoner_awake); // true
تابع can_free_prisoner() را تعریف کنید که چهار مقدار منطقی میگیرد.
سه پارامتر اول بهترتیب نشان میدهند شوالیه، کماندار و زندانی بیدار هستند یا نه.
پارامتر آخر نشان میدهد سگ خانگی آنالین حضور دارد یا نه.
تابع اگر با توجه به وضعیت این سه شخصیت و حضور سگ خانگی آنالین بتوان زندانی را آزاد کرد، true برمیگرداند.
در غیر این صورت، false برمیگرداند:
let knight_awake = false;
let archer_awake = true;
let prisoner_awake = false;
let dog_present = false;
can_free_prisoner(knight_awake, archer_awake, prisoner_awake, dog_present); // false