Jewel-mmo開発日記

RubyでMMORPGを作る過程を記録する日記。 Yokohama.rb 発起人。
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