トラック
/
Elixir
Elixir
/
演習
/
パックマンのルール
パックマンのルール

パックマンのルール

学習演習

はじめに

真偽値

Elixirでは、trueとfalseという値を真偽値型で表します。値はtrueとfalseの2つだけです。これらの値は変数に束縛できます。

true_variable = true
false_variable = false

and/2、or/2、not/1演算子を使うと、厳密な真偽値の式を評価できます。

true_variable = true and true
false_variable = true and false

true_variable = false or true
false_variable = false or false

true_variable = not false
false_variable = not true

真偽値を戻す関数を書くときは、関数名の末尾に?を付けるのが慣習的です。真偽値を保持する変数にも、同じ慣習が使えます。

def either_true?(a?, b?) do
  a? or b?
end

説明

この演習では、名作ゲーム「パックマン」のルールをElixirの関数に置き換えていきます。

置き換えるルールは4つあり、どれもゲームの状態に関するものです。

引数がどのように導かれるかは気にしなくて大丈夫です。引数を組み合わせて、意図した結果を返すことだけに集中しましょう。

1. パックマンがゴーストを食べられるかを定義する

2つの引数(パワーエサの効果が有効かどうか と パックマンがゴーストに触れているかどうか)を受け取り、パックマンがゴーストを食べられるかどうかを示す真偽値を返すRules.eat_ghost?/2関数を定義します。この関数は、パワーエサの効果が有効で、かつパックマンがゴーストに触れているときだけtrueを返します。

Rules.eat_ghost?(false, true)
# => false

2. パックマンが得点するかを定義する

2つの引数(パックマンがパワーエサに触れているかどうか と パックマンがドットに触れているかどうか)を受け取り、パックマンが得点したかどうかを示す真偽値を返すRules.score?/2関数を定義します。この関数は、パックマンがパワーエサかドットに触れているときにtrueを返します。

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

3. パックマンが負けるかを定義する

2つの引数(パワーエサの効果が有効かどうか と パックマンがゴーストに触れているかどうか)を受け取り、パックマンが負けたかどうかを示す真偽値を返すRules.lose?/2関数を定義します。この関数は、パックマンがゴーストに触れていて、かつパワーエサの効果が有効でないときにtrueを返します。

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

4. パックマンが勝つかを定義する

3つの引数(パックマンがすべてのドットを食べたかどうか、パワーエサの効果が有効かどうか、パックマンがゴーストに触れているかどうか)を受け取り、パックマンが勝ったかどうかを示す真偽値を返すRules.win?/3関数を定義します。この関数は、パックマンがすべてのドットを食べていて、かつ3番で定義した引数に基づいて負けていないときにtrueを返します。

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

パックマンのルールを始める準備はできましたか?

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