モンスターがプレイヤーに対して攻撃できるようにする
今回はモンスターがプレイヤーに対して攻撃できるようにするプログラムの解説です。
~今回の内容~
右上の蟻に対して攻撃します。スペースキーを押してみましょう。
攻撃が終わりました。蟻にダメージが入りました。それと同時にプレイヤーにもダメージが入っていることが左下の体力ゲージが減っていることがわかると思います。
今回はこのプログラムを解説します。
~プログラムの説明~
参考にしたゲームではモンスターがプレイヤーと隣同士の位置関係になった時、ターン性のバトルが発生するゲームシステムになっています。本来はそのようなシステムを再現したかったのですが、技術的に難しく、簡易的なバトルシステムに変更しました。
当ゲームのバトルシステムは「モンスターがプレイヤーの隣にいる時、プレイヤーに対して攻撃を行う」というシステムにしました。
このシステムをプログラムでどう表したのかを説明していきたいと思います。
モンスターオブジェクトのmoveメソッドの一部です。835行目のif分はモンスターがプレイヤーに対して隣同士であるときに実行されます。
836行目でモンスターの距離を計算しています。
837行目でattackプロパティの値をtrueにしています。この時、モンスターがプレイヤーの隣にいることをコンピュータが認識したことで、モンスターが攻撃を行えるようにしています。
840行目はモンスターが隣にいないときのプログラムです。this.attackをfalseとし、モンスターがプレイヤーに対して攻撃できないようにしています。
monsterturn関数です。978~981行目にmonsterattackを実行する条件式を追加しました。978行目の条件は「ボスが出現しているかつ、ボスがプレイヤーの隣におり、攻撃できるとき」です。下3つも同じものになっています。この時、monsterattack関数が実行されます。この時実行しているmonsterattack関数は第一引数で指定されたモンスターが第二引数で指定されたプレイヤーと隣同士の位置関係であるか否かをチェックしています。monsterattack関数を見ていきましょう。
985行目からmonsteraatack関数です。モンスターがプレイヤーに対して隣にいるかどうかをチェックし、隣にいるならばプレイヤーに対して攻撃を行うよう処理を行う関数です。この関数を呼び出す際には、第一仮引数pmonsterにモンスターオブジェクトのインスタンス、第二仮引数にモンスターオブジェクトのインスタンスを指定します。monsterturn関数内でattackcheck関数を呼び出した際には、第一引数にボスインスタンス、第二引数にプレイヤーインスタンスを指定していることを確認してください。
986行目で変数damageと変数rndを生成しています。damage変数にはダメージ計算の結果プレイヤーに与えるダメージ量を格納します。rndは攻撃するたびに計算を行い、1~1.3の値をランダムに格納します。これにより、モンスターが与えるダメージに1~1.3倍加算されるようになり、ダメージ量に乱数が発生するようになります。
987行目では変数damageにプレイヤーに与えるダメージ量を格納しています。計算式は
「繰り上げ(モンスターの攻撃力 ー プレイヤーの防御力)* 1.0~1.3」です。
もう少し複雑にしたら面白いかもしれませんね。
988行目は、もしもdamage変数に格納したダメージ量がもしも負の値になってしまった場合に、ダメージを1にするプログラムです。これがないと、攻撃を受けたのに体力が回復するという摩訶不思議な現象が起こってしまいます。
989行目はプレイヤーの体力からダメージ量を減らす計算をしています。
990行目ではプレイヤーの体力が0より小さくなった場合、プレイヤーの体力を0にするようにしています。
991、992行目ではプレイヤーの体力によってダメージを受けた際の効果音を変えるようにしています。991行目はプレイヤーの体力が0より上の場合、普通に攻撃を食らった効果音がなります。992行目はプレイヤーの体力が0の場合、プレイヤーがやられたことを意味する効果音が鳴ります。
以上がモンスターがプレイヤーに対して攻撃できるようにするプログラムの解説になります。
コメント
コメントを投稿