素人が RPG のようなものを作ってみる 2

前回はほとんど勢いだけで、戦闘での先手を決めるところまで作った。

ちなみにテストを先に書かないのは、何をどう作るべきかの構想が立っていないからだ。本来であればある程度のテストが書けるくらいには机上で設計しておくべきなのだろうが、もともとゲームを完成させるよりはとにかく手を動かしてコードを書きたい欲求の方が強い。むしろコードを書くためにゲームを作ることにしたと言い切っても良い。私は手段のためには目的を選ばない人間なのだ。


それではいよいよ前回の二人に殴り合ってもらうことにする。Judge#resolve を修正。攻撃は必ず当たる。避けることは許されない。殴られた方はひたすら耐えるしかない。

  def resolve
    diffence, offence = [@a, @b].sort{|a, b| fleetness(a) <=> fleetness(b)}

    1.upto(10) do
      puts "#{offence.name} の攻撃"
      damage = offence.attack(diffence)
      puts "#{diffence.name}#{damage} のダメージ"
      break unless diffence.life > 0
      diffence, offence = offence, diffence
    end

    if @a.dead?
      puts "#{@a.name} は死んだ"
    elsif @b.dead?
      puts "#{@a.name}#{@b.name} を倒した"
    else
      puts "#{@b.name} は逃げ出した"
    end
  end

だいたいこんなもんだろう。10 ターンの判定は埋め込んだ。細かいところでは @offence と @diffence はインスタンス変数にする必要がないことに気付いたので @ を外した。続いて Character クラスに attack メソッドと guard メソッドを追加。それと生死判定用の dead? メソッドも。

  def attack(d)
    d.guard(@power)
  end

  def guard(p)
    damage = p - @toughness
    damage = 0 if damage < 0
    @life -= damage
    damage
  end

  def dead?
    @life <= 0
  end

ダメージ計算式は攻撃力−耐久力。各パラメータを適当に決め、いざ勝負。

a = Character.new
a.name = 'adventurer'
a.fleetness = 20
a.life = 10
a.power = 5
a.toughness = 2

b = Character.new
b.name = 'monster'
b.fleetness = 22
b.life = 15
b.power = 5
b.toughness = 3

Judge.new(a, b).resolve

結果。数回に 1 回は adventurer 君が勝つが、やはり性能差が絶対的すぎるな。

monster の攻撃
adventurer は 2 のダメージ
adventurer の攻撃
monster は 3 のダメージ
monster の攻撃
adventurer は 2 のダメージ
adventurer の攻撃
monster は 3 のダメージ
monster の攻撃
adventurer は 2 のダメージ
adventurer の攻撃
monster は 3 のダメージ
monster の攻撃
adventurer は 2 のダメージ
adventurer の攻撃
monster は 3 のダメージ
monster の攻撃
adventurer は 2 のダメージ
adventurer は死んだ

ダメージに乱数補正をかけるか、回避判定を入れるか。個人的にはダメージがばらつくのはなんとなく嫌。不確定要素はせいぜいクリット判定とファンブル判定くらいにしておきたいところ。これはプログラムの問題じゃなくてゲームデザインの話なのであまり労力を割きたくないのだがな。かと言って手を抜ける箇所でもない。もうどこかからパクってくるか。

そうさな。例えば、シンプルでバランスが良くて馴染み易くてついでに近々新版が発売予定で Role&Roll の連載漫画「スピタのコピタの」では 2 号連続でリプレイが読める予定だったりするような、そんなシステムがどこかにないかなあ。


ソード・ワールド2.0 ルールブック I (富士見ドラゴン・ブック)

ソード・ワールド2.0 ルールブック I (富士見ドラゴン・ブック)