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