Cairoでは、真偽値はあらかじめ用意されている真偽値型boolで表します。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を返す論理演算子が3つあります。
| 演算子 | 意味 |
|---|---|
&&(論理積) |
両方の命題が真であれば、真になります。 |
||(論理和) |
少なくとも一方の命題が真であれば、真になります。 |
!(否定) |
命題が偽のときだけ、真になります。 |
この演習では、友人が開発中の新しいRPGゲームのクエストロジックを実装します。 ゲームの主人公はAnnalynという、勇敢な少女で、獰猛で忠実な飼い犬を連れています。 ところが不幸にも、森で木の実を探しているときに親友が誘拐されてしまいます。 Annalynは親友を見つけて救い出そうとします。このクエストに飼い犬を連れて行ってもかまいません。
親友の足跡をしばらくたどったあと、Annalynは親友が囚われている野営地を見つけます。 誘拐犯は2人いました。屈強な騎士と、ずる賢い弓使いです。
誘拐犯を見つけたAnnalynは、次のうちどの行動が取れるかを考えます。
取り組むタスクは4つです。森で見つけた3人の状態と、Annalynの飼い犬がいるかどうかに基づいて、上記の行動が実行できるかどうかを判定するロジックを実装します。
騎士が起きているかどうかを示す真偽値を受け取るcan_fast_attack()関数を定義しましょう。
この関数は、騎士の状態に基づいて速攻ができる場合にtrueを返します。
それ以外の場合はfalseを返します:
let knight_awake = true;
can_fast_attack(knight_awake); // false
can_spy()関数を定義しましょう。この関数は3つの真偽値を受け取ります。それぞれ騎士、弓使い、囚人が起きているかどうかを示します。
この関数は、3人の状態に基づいて一味をスパイできる場合に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()関数を定義しましょう。この関数は2つの真偽値を受け取ります。それぞれ弓使いと囚人が起きているかどうかを示します。
この関数は、2人の状態に基づいて囚人に合図を送れる場合にtrueを返します。
それ以外の場合はfalseを返します:
let archer_awake = false;
let prisoner_awake = true;
can_signal_prisoner(archer_awake, prisoner_awake); // true
can_free_prisoner()関数を定義しましょう。この関数は4つの真偽値を受け取ります。
最初の3つの仮引数は、それぞれ騎士、弓使い、囚人が起きているかどうかを示します。
最後の仮引数は、Annalynの飼い犬がいるかどうかを示します。
この関数は、3人の状態とAnnalynの飼い犬の有無に基づいて囚人を解放できる場合に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