素人が 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 (富士見ドラゴン・ブック)
- 作者: 北沢慶,グループSNE,輪くすさが,真嶋杏次
- 出版社/メーカー: 富士見書房
- 発売日: 2008/04/19
- メディア: 文庫
- 購入: 17人 クリック: 89回
- この商品を含むブログ (129件) を見る