トラック
/
C#
C#
/
演習
/
アナリンの潜入
アナリンの潜入

アナリンの潜入

学習演習

はじめに

真偽値

C#の真偽値はbool型で表され、その値はtrueかfalseのどちらかです。

C#では3つの論理演算子が使えます。!(否定)、&&(AND)、||(OR)です。

説明

この演習では、友人が開発している新しいRPGゲームのクエストロジックを実装します。

このゲームの主人公はAnnalyn。勇敢な女の子で、獰猛で忠実な飼い犬がいます。しかし不幸なことに、親友が森で木の実を探しているときに誘拐されてしまいます。

Annalynは親友を探し出して解放しようとします。この冒険に、飼い犬を連れていくこともできます。

親友の足跡を追ってしばらく進んだあと、親友が囚われている野営地を見つけます。誘拐犯は2人いました。強力な騎士と、ずる賢い弓術士です。

誘拐犯を見つけたAnnalynは、次のうちどの行動ができるかを考えます。

  • 速攻: 騎士が眠っていれば速攻を仕掛けられます。鎧を身につけるのに時間がかかり、騎士が無防備になるからです。
  • 偵察: 少なくとも1人が起きていれば、集団を偵察できます。そうでなければ、偵察は時間の無駄です。
  • 囚人に合図を送る: 囚人が起きていて弓術士が眠っていれば、鳥の鳴き声を使って囚人に合図を送れます。弓術士は鳥を使った合図の訓練を受けているため、メッセージを傍受されてしまうからです。
  • 囚人を解放する: Annalynは野営地に忍び込んで囚人を解放しようとできます。 これは危険な行為で、次の2つのうちどちらかの方法でしか成功しません。
    • Annalynが飼い犬を連れている場合、弓術士が眠っていれば囚人を救い出せます。 騎士は犬を怖がり、弓術士はAnnalynと囚人が逃げるまでに準備する時間がありません。
    • Annalynが犬を連れていない場合は、Annalynと囚人はとてもこっそり行動しなければなりません! 囚人が起きていて、騎士と弓術士が2人とも眠っていれば囚人を解放できます。しかし囚人が眠っていると救い出せません。囚人はAnnalynの突然の登場に驚いて、騎士と弓術士を起こしてしまうからです。

森で見つけた3人の状態と、Annalynの飼い犬がいるかどうかに基づいて、上記の行動が可能かどうかを判断するロジックを実装する、4つのタスクがあります。

1. 速攻を仕掛けられるか確認する

騎士が起きているかどうかを示す真偽値を取る、QuestLogic.CanFastAttack()メソッド(static)を実装します。このメソッドは、騎士の状態に基づいて速攻を仕掛けられる場合はtrueを返します。そうでなければfalseを返します。

var knightIsAwake = true;
QuestLogic.CanFastAttack(knightIsAwake);
// => false

2. 集団を偵察できるか確認する

騎士、弓術士、囚人がそれぞれ起きているかどうかを示す3つの真偽値を取る、QuestLogic.CanSpy()メソッド(static)を実装します。このメソッドは、3人の状態に基づいて集団を偵察できる場合はtrueを返します。そうでなければfalseを返します。

var knightIsAwake = false;
var archerIsAwake = true;
var prisonerIsAwake = false;
QuestLogic.CanSpy(knightIsAwake, archerIsAwake, prisonerIsAwake);
// => true

3. 囚人に合図を送れるか確認する

弓術士と囚人がそれぞれ起きているかどうかを示す2つの真偽値を取る、QuestLogic.CanSignalPrisoner()メソッド(static)を実装します。このメソッドは、2人の状態に基づいて囚人に合図を送れる場合はtrueを返します。そうでなければfalseを返します。

var archerIsAwake = false;
var prisonerIsAwake = true;
QuestLogic.CanSignalPrisoner(archerIsAwake, prisonerIsAwake);
// => true

4. 囚人を解放できるか確認する

4つの真偽値を取る、QuestLogic.CanFreePrisoner()メソッド(static)を実装します。最初の3つの入力は、騎士、弓術士、囚人がそれぞれ起きているかどうかを示します。最後の入力は、Annalynの飼い犬がいるかどうかを示します。このメソッドは、3人の状態とAnnalynの飼い犬の有無に基づいて囚人を解放できる場合はtrueを返します。そうでなければfalseを返します。

var knightIsAwake = false;
var archerIsAwake = true;
var prisonerIsAwake = false;
var petDogIsPresent = false;
QuestLogic.CanFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent);
// => false
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
C# Exercism

アナリンの潜入を始める準備はできましたか?

Exercismに登録すれば、62個のコンセプト178個の演習、そして本物の人間によるメンタリングとともに、C#を学んでマスターできます。すべて無料です。