#!/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のインスタンスで処理している