Ruby 天気予報編 (5) メソッドの定義 【計算数学 I】

更新日時:

メソッドの定義

メソッドの定義は前回の教材の前提知識にしましたし、前回の教材のサンプルプログラムでも使いました。トップレベルで def した場合にどうなるかも書きました。詳しくはこちら

それでも記法を忘れているかもしれないから、演習をやってもらおうかなと思っています。以下のことを復習するつもりでどうぞ。

  • メソッドの定義の書き方
  • 文字列について puts"Name: #{name}" のような記法
  • if
  • ハッシュの操作の仕方

演習

以下のメソッドを定義して、指定された出力を得ましょう。

  • heal: healing の MP を 10 使い、 healed の HP を 20 回復する。
  • attack: attacking の ATK の分だけ、attacked の HP を減らす。

ただし、指定された出力が出るように、細かい仕様は読み取ること。

プログラム

def heal(healing, healed)
    # ここを埋める
end

def attack(attacking, attacked)
    # ここを埋める
end

def show(player)
  puts "#{player[:name]}: hp = #{player[:hp]}, mp = #{player[:mp]}"
end

kazuma = {
  name: "Kazuma", hp: 10, mp: 50, atk: 100
}
aqua = {
  name: "Aqua", hp: 30, mp: 100, atk: 1
}
megumin = {
  name: "Megumin", hp: 20, mp: 5, atk: 3000
}
darkness = {
  name: "Darkness", hp: 300, mp: 0, atk: 100
}

show(aqua)
show(kazuma)
show(megumin)
show(darkness)
puts "-----"
heal(aqua, kazuma)
show(aqua)
show(kazuma)
puts "-----"
heal(megumin, darkness)
show(megumin)
show(darkness)
puts "-----"
attack(kazuma, darkness)
show(darkness)
puts "-----"
attack(megumin, kazuma)
show(kazuma)

出力

Aqua: hp = 30, mp = 100
Kazuma: hp = 10, mp = 50
Megumin: hp = 20, mp = 5
Darkness: hp = 300, mp = 0
-----
Aqua heals Kazuma.
Aqua: hp = 30, mp = 90
Kazuma: hp = 30, mp = 50
-----
Megumin fails to heal Darkness.
Megumin: hp = 20, mp = 5
Darkness: hp = 300, mp = 0
-----
Kazuma attacks Darkness.
Darkness: hp = 200, mp = 0
-----
Megumin attacks Kazuma.
Kazuma is dead.
Kazuma: hp = 0, mp = 50

補足説明

正直に言って、受講生の方が何を疑問に思うかは人それぞれです。ここでは出てきそうな疑問点に普通程度の詳しさで答えることにします。

  • Ruby では、「変数はポインタ」であり、引数は「値渡し」になるので、healattack は実体のコピーが渡されているわけではありません。 healing[:mp] などにアクセスすると、実体を指し示しているので、実体をいじることになります。
  • (何か指摘されたら追記)

ナビゲーション

この教材は、東京大学理学部数学科専門科目「計算数学 I」のために執筆されたものです。 このサイトに掲載する際に、記事を分けてあります。 他の回はRuby 天気予報編 一覧 #ks1-ruby-forecastから御覧ください。

Ruby 入門 (計算数学実習資料集)には他の TA が書いた教材があります。

コメントする