経験値システムの導入
今回は経験値をためてキャラクターを強くしていくプログラムの解説です。
~今回の内容~
右下にいる犬を倒します。
すると、右下の経験値欄に36が加算されます。次に、右上のありを倒してみましょう。
アリを倒すとレベルアップすることができました。下のステータス欄のLv、体力の最大値、攻撃力、防御力の値が上がっていることが確認できます。また、経験値が0になり、次のレベルまでに必要な経験値の量も上がっています。
~プログラムの解説~
このゲームシステムはプレイヤーのexp値がレベルアップ条件を満たした場合にレベルを上げ、ステータスを強化するという一連の流れを作ることにより実現することができました。
そのため、まずプレイヤーのステータスにexpとnextexpの初期値を設定する必要があります。
プレイヤーオブジェクトとプロパティです。
451行目のプレイヤーオブジェクトの第10、11引数にexp、nextexp、を加えました。
467、468行目には新しくexpプロパティ、nextexpプロパティを作成しました。モンスターを倒すたびにexpプロパティの値が加算されていき、nextexpプロパティの値にまで達したらレベルアップすることができます。
次にattackcheck関数を見ていきます。ここはプレイヤーがモンスターに対して攻撃を行った際に処理を行う関数です。主に956行目に変更を加えました。
956行目はモンスターを倒した際の処理です。今までは倒した時に効果音を鳴らすだけでしたが、新しくモンスターの経験値量をプレイヤーの経験値に加えるプログラムを追加しました。
プレイヤーオブジェクト内にexpcheckメソッドを追加しました。このプログラムが常に経験値を監視しており、次のレベルに必要な経験値にまで届いた場合にレベルアップの処理を行うことになっています。
515行目の条件分岐により、this.exp(現在の経験値)がthis.nextexp(次のレベルアップに必要な経験値)を超えた場合に一連のレベルアップ処理を行います。
516行目ではthis.Lvの値をインクリメントしています。これにより、ゲーム上に表示されるプレイヤーのレベルの値が1増えます。
517行目ではthis.expの値を0にしています。これにより、経験値の蓄積をリセットします。
518行目ではthis.nextexpの値を1.25倍にしています。これで、レベルが上がるごとに少しづつレベルアップに必要な経験値量が増え、レベルアップしにくくなっています。
519行目ではthis.hpの値をインクリメントしています。これにより、レベルアップした時点で体力が1回復します。これは、後に体力の最大値を1上げるのですが、その際に現在の体力も1上げたいと思ったため実装しました。
520行目ではthis.maxhpの値をインクリメントしています。これにより、プレイヤーの最大体力量が1増えます。
521行目でthis.powの値をインクリメントしています。これにより、プレイヤーの攻撃力が1増えます。
522~524行目はランダムに攻撃力を上げるプログラムです。
522行目で0~1の値をランダムに決定します。523行目ではそのランダムに決めた値が0であった場合にthis.powをインクリメントして攻撃力を1増やします。521行目の処理と合わせて攻撃力が合計2上がることになります。値が1であった場合には処理を抜けます。この場合は521行目の処理と合わせても攻撃力が1しか増えないです。
525~528行目は防御力を上げる処理です。これは521~524行目の攻撃力に関する処理と同じですので説明を割愛します。
以上が経験値システムを導入し、プレイヤーのレベルアップ処理を行う一連のプログラムになります。
コメント
コメントを投稿