2006-09-13
attack メソッドを
Character クラスに含めるべきかどうか。 今分離している理由は、 attack メソッドが view の役割も果たしているからだ。 Rails の影響からか model と view を分離したい意識が強い(いやゲーム作ってて昔から感じる違和感だな)。
試しに Character クラスに移動してみる。うーん、このままではダメだな。
def attack(target) return unless alive? d = rand(str) - rand(target.def) if d > 0 target.hp -= d puts "#{name} の攻撃 => #{d} のダメージ!" else puts "#{name} の攻撃 => ミス!" end unless target.alive? puts "#{name} は #{target.name} を倒した" end end
--
話はそれる。今後のためのメモ。 view を切り出せないか考えてみた。やや強引だが attack メソッドから view を追い出すことができた。テンプレートが表示情報を作り出すためのスクリプトでもいいはずだ。つまりそれが Ruby スクリプトだって……。
def render template eval template end def attack(attacker, target) @attacker, @target = attacker, target if @attacker.alive? @d = rand(@attacker.str) - rand(@target.def) @target.hp -= @d if @d > 0 render template_attack end end def template_attack ' print "#{@attacker.name} の攻撃 => " puts @d > 0 ? "#{@d} のダメージ!" : "ミス!" puts "#{@attacker.name} は #{@target.name} を倒した" unless @target.alive? ' end