トラック
/
Crystal
Crystal
/
演習
/
Crystalハンター
Crystalハンター

Crystalハンター

学習演習

はじめに

Crystalには、Boolという型があります。 これはtrueとfalseという値を表します。

論理演算子

Crystalには!、||、&&の3つの論理演算子があり、真偽値を組み合わせて、別の値を生み出す式を作ります。

AND演算子(&&)

CrystalのAND演算子は&&で表され、両方の値がtrueならtrueを返し、そうでなければfalseを返します。 AND演算子を使うときは、&&の右側に一方の真偽値を、左側にもう一方の真偽値を置きます。

true && true
# => true

true && false
# => false

OR演算子(||)

CrystalのOR演算子は||で表され、与えられた値のうち少なくとも1つがtrueならtrueを返します。 両方の値がfalseなら、falseを返します。 OR演算子を使うときは、||の右側に一方の真偽値を、左側にもう一方の真偽値を置きます。

true || true
# => true

true || false
# => true

false || false
# => false

NOT演算子(!)

CrystalのNOT演算子は!で表され、与えられた真偽値がfalseならtrueを返し、trueならfalseを返します。 NOT演算子を使うときは、演算子(!)のあとに真偽値を1つ置きます。

!true
# => false

!false
# => true

括弧(())を使う

真偽値を扱うときは、括弧を使って、どの真偽値から先に評価するかを決められます。 括弧の使い方によって、結果が変わることがあります。 Crystalでは、括弧の中が先に評価されます。

true && false && false || true
# => true

true && false && (false || true)
# => false

括弧の中が先に評価されるので、次の例では、NOT演算子は括弧の中の式に適用されます。

!true && false
# => false

!(true && false)
# => true
Note

括弧は、結果に影響するときだけ使いましょう。そうでない場合は省略します。

説明

現在、高い評価を得ている新作ゲームCrystal Hunterを開発しているところです。 ゲームでは、動き回ってクリスタルを集めるキャラクターを操作します。 プレイヤーは、すべてのクリスタルを拾い集めると勝利します。 プレイヤーが盗賊に接触すると、持っているクリスタルをすべて失い、ゲームにも敗北します。 ただし例外があります。プレイヤーは、盗賊から姿が見えなくなるパワーアップを有効にすることができます。

ここでの目標は、ゲームで使われるいくつかのルールを書くことです。

1. キャラクターがボーナスポイントを獲得するかどうかを定義する

ゲームでは、パワーアップを有効にしている状態で盗賊に触れると、キャラクターはボーナスポイントを獲得します。

Rules#bonus_points?メソッドを定義します。このメソッドは2つの引数(キャラクターがパワーアップを有効にしているか、キャラクターが盗賊に触れているか)を取り、キャラクターがボーナスポイントを獲得するかどうかを示す真偽値を返します。 このメソッドは、キャラクターがパワーアップを有効にしていて、かつ盗賊に触れている場合にのみtrueを返し、それ以外の場合はfalseを返す必要があります。

Rules.new.bonus_points?(false, true)
# => false

2. キャラクターが得点するかどうかを定義する

ゲームでは、プレイヤーはクリスタルかパワーアップを拾うとポイントを獲得します。

Rules#score?メソッドを定義します。このメソッドは2つの引数(キャラクターがパワーアップに触れているか、キャラクターがクリスタルに触れているか)を取り、キャラクターが得点したかどうかを示す真偽値を返します。 このメソッドは、キャラクターがパワーアップまたはクリスタルに触れた場合にtrueを返し、それ以外の場合はfalseを返す必要があります。

Rules.new.score?(true, true)
# => true

3. キャラクターが負けるかどうかを定義する

Rules#lose?メソッドを定義します。このメソッドは2つの引数(キャラクターがパワーアップを有効にしているか、キャラクターが盗賊に触れているか)を取り、キャラクターが負けるかどうかを示す真偽値を返します。 このメソッドは、キャラクターが盗賊に触れていて、かつパワーアップを有効にしていない場合にtrueを返し、それ以外の場合はfalseを返す必要があります。

Rules.new.lose?(false, true)
# => true

4. キャラクターが勝つかどうかを定義する

Rules#win?メソッドを定義します。このメソッドは3つの引数(キャラクターがすべてのクリスタルを拾い集めたか、キャラクターがパワーアップを有効にしているか、キャラクターが盗賊に触れているか)を取り、キャラクターが勝つかどうかを示す真偽値を返します。 このメソッドは、キャラクターがすべてのクリスタルを集めていて、かつ3番で定義した引数に基づいて負けていない場合にtrueを返し、それ以外の場合はfalseを返す必要があります。

Rules.new.win?(false, true, false)
# => false
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Crystal Exercism

Crystalハンターを始める準備はできましたか?

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