Newer
Older
Ruby / ex.rb
#!/usr/bin/env ruby
# coding: utf-8

class HERO
  # @@ で始まるものは全オブジェクトに共通のクラス変数
  @@max_abil = {"HP" => 20, "MP" => 300}
  def initialize(name = "アドル")	# initializeメソッドは必須 initializeメソッドはreturnできない
    @myname	= name			# @のものがインスタンス変数 インスタンス変数は各インスタントで個別に設定される
    @attr	= {}	# 属性をHashで	# 1つのオブジェクト内共通で使える
    printf("%sが生まれた\n", @myname)
  end
  def setAttr(attr, value)
    @attr[attr] = value
    if @attr[attr] > @@max_abil[attr]
      @attr[attr] = @@max_abil[attr]
    end
    printf("%sの%sが%sになった\n", @myname, attr, value.to_s)
    #to_sメソッドは数値を文字列にできる
  end
  def name
    @myname
  end
  def getAttr(attr)
    @attr[attr]
  end
  def bokan()
    printf("%sが倒れた\n", @myname)
    setAttr("HP", 0)
  end
  def maxAttr(attr)
    @@max_abil[attr]
  end
end

x = HERO.new                    #インタンス化
#xのインスタンス
y = HERO.new("ポトフ")          #nowメソッドに 引数を与える
#yのインスタンス
#nowメソッドを使うとinitializeメソッドが呼び出される

x.setAttr("HP", 10)
printf("%s のHPは%dだ\n", x.name, x.getAttr("HP"))

y.setAttr("HP", 100)
y.bokan
printf("%s のHPは%dだ\n", y.name, y.getAttr("HP"))
printf("%s の最大HPは%dだ\n", x.name, x.maxAttr("HP"))
printf("%s の最大HPは%dだ\n", y.name, y.maxAttr("HP"))

#x.〇〇はxのインスタンス
#y.〇〇はyのインスタンスで処理している