HOME > 対人シミュレーター > title - 【対人BSML】第9回:スキル発動の仕組みを考える(2)

【対人BSML】第9回:スキル発動の仕組みを考える(2)

前回は、新たにSkillクラスを作り、データシートから、スキル名、発動率、発動時のダメージ倍率を設定するところまで進めました。

今回発動させようとしている「渾身の一撃」は発動すると通常攻撃の2.4倍のダメージを与えるというもので一世風靡した良スキルですが、今となっては非常にシンプルなスキル効果です。一方最近では、このような複雑な説明のスキルが次々とリリースされています。

3覚Z格

今後のことも考え、こういったスキルにも対応できる仕組みを作らなければなりません。「継承は使うべきなのか」「ポリモーフィズムは使うべきなのか」、考えた挙句どうにも考えがまとまらなくなり、どこかで読んだオブジェクト指向プログラミングの原則「現実世界で起こることをそのままプログラミングする」に基づいて作ってみることにしました。

まずはMSと同様に、クラスSkillからSkill1を表すオブジェクトMSS1を配列形式で作成しました。次にオブジェクトのプロパティの設定はmainプロシージャ上で行なっていましたが、クラスMobuileSuitおよびSkill(メソッドStatusLoad)から行うように変更しました(mainプロシージャがスッキリしました)。

[mainその1]
第9回main1

[クラスSkillその1]
第9回クラスSkill

最初のイメージでは、RPGにおいてパーティーに属するキャラクターと装備品の関係を考えていました。例えばキャラクターが武器を装備すると、その武器が持っている能力や特殊効果(毒を与えるなど)を継承できる…

これを上手くプログラム上でできないものかと考えたのですが、考えがまとまらず断念しました。結局、subプロシージャAttacker_Decisionで、攻撃する機体とその機体が持っているスキルを併せて決めるようにしました。

[sub Attacker_Decision]
第9回subAttackerDecision

Player、Enemy合わせた全ての生存かつ未行動の機体のうち、最もスピード値が大きいものがAttackerとして選ばれるようにしました。このとき併せてAttackerの持つスキルAttacker_Skill1も決定しています。今後ここにはAttacker_Skill2…Lスキルを追加する予定です。

攻撃を行う機体とその機体が持つスキルが決まったので、次はスキルの発動抽選から発動までとなります。

流れとしては、
1)Attacker.Skill1_ActiveとしてクラスMobileSuitで確率抽選を行い、当選(スキルの発動が決定)すれば
2)クラスSkillで発動時のスキルの効果を決定する
3)決定したスキルの効果をクラスMobileSuitで与ダメージを計算するメソッドに渡す
としました。

[mainその2]
第9回main2

これで正しいのか分かりませんが、こうしておけばスキル発動による効果はクラスSkillで一元管理でき、そしてその効果を受けた結果はクラスMobileSuitで一元管理できる、はずです。間違っていたら修正するしかないのでここは進みます。

[クラスMobileSuit]
無条件でスキルの抽選を行なっていますが、本来はスキルが使用できる状態かどうか、事前に判定が必要です。ここはお試しということで手抜きします。
第9回クラスMobileSuit

[クラスSkillその2]
今はダメージ倍率の決定のみ書いていますが、ここにはスキル発動時に発生する効果を全て書くことになるので、将来的にはかなりのボリュームになりそうです。現時点で思いつくところをとりあえずコメントとして書いています。
第9回クラスSkill2

以上、ここまででスキル発動の仕組みの基本形は出来たので、確認してみます。

[イミディエイト]
第9回イミディエイト

2ターン目に渾身の一撃が発動し、1ターン目の2.4倍のダメージを与えることを確認出来ました。

次回は、アクティブスキルのうち相手に攻撃されたときに発動するスキルとして、回避系のスキルを実装します。次回まで上手くできれば、シミュレーターらしくなってくるので、もうひと頑張りといったところです。

第10回に続く

[目次はこちら]

テーマ : 機動戦士ガンダム
ジャンル : ゲーム

コメントの投稿

非公開コメント

最新記事
MENU
プロフィール

Ryu^ko

Author:Ryu^ko
ガンダム好きな中年戦士で、日々ガンダムエリアウォーズ(GAW)での戦いに明け暮れております。

【性 別】男性
【職 業】会社員
【居住地】兵庫県
【趣 味】GAW、ゴルフ

検索フォーム
RSSリンクの表示
リンク
現在の閲覧者数: