2023.08.07はじめに今回の記事では、クラスやオブジェクト指向を使って簡単なRPGをつくる演習を引き続き行います。ポイントを解説しながら、数回にわたって記事を掲載していきます。つまずきやすい部分(実際に筆者がつまずいた部分)を中心に、初心者にもわかりやすく順を追って説明していきます。main関数を作り、そこで動かしていくプレイヤークラスをつくろうモンスタークラスをつくろう継承で魔法使いクラス、騎士クラスをつくろう作成したプログラムまとめ各キャラクタークラスを作っていく前回のブログでは、これから作成していくRPGプログラムの基本仕様を決定し、プログラム全体の流れをおおまかに作成しました。このRPGプログラムでは、オブジェクト指向の基本である「クラス」「インスタンス」や、「継承」「ポリモーフィズム」の考え方をもとにコードを書いていきます。main関数でインスタンスを作成し、キャラクターを動かしていくRPGプログラムでは、各キャラクターのクラスを作成しておき、mainメソッドでインスタンスを用いてキャラクターを動かすプログラムを書いていきます。今回はキャラクターのクラスをひとつずつ作成していきます。作るクラスは以下です。プレイヤークラスエネミークラス魔法使いクラス(プレイヤークラスを継承してつくる)騎士クラス(プレイヤークラスを継承してつくる)プレイヤークラスをつくろう早速プレイヤークラスを作成していきましょう!プレイヤーが持っているステータスは名前とHP(体力)、取ることができる行動は攻撃と防御です。よって、ステータスはインスタンス変数、行動はメソッドとして記述します。防御するとそのターン、モンスターの攻撃を受けなくなるまずはインスタンス変数から定義していきます。名前やHPは初期値としてコンストラクタで設定していきます。プレイヤーの名前はRPG開始時に好きな名前に設定できるので、外部からの値を入力できるようにコンストラクタの引数に設定します。体力はどんなプレイヤーもHP=60で固定のため、そのまま記述します。60つぎに攻撃と防御メソッドを書いていきます。・プレイヤーが攻撃した場合、モンスターにダメージを与えます(基本のダメージは10とします)。攻撃メソッドでは、呼び出し先でダメージ計算ができるように、与えたダメージを返り値として返すようにします。ここでダメージの変数が登場しますが、「プレイヤーが与えるダメージ」として、これもインスタンス変数に設定しておきます。・プレイヤーが防御した場合、相手から受けるダメージをゼロにすることができます。プレイヤーが防御をしている・していないによってモンスターの攻撃を受けるか受けないか分岐させるため、2択の状態判定ができるように「is_defenced」というインスタンス変数を追加してみます。防御メソッドでは防御状態になるので、trueに変更しておきます。エネミー(敵)クラスをつくるつぎにエネミークラスを作成していきます。モンスターは3種類で、それぞれ体力が20,30,60あるものがランダムで出現します。攻撃するときのダメージは0,10,20,30のいずれかになります。モンスターに防御行動はありません。(攻撃が外れる)モンスターはそれぞれスライム=20,デビル=30,ドラゴン=60のHPをもっており、インスタンス作成時(モンスター出現時)にランダムで決まるものとします。よって、これらの情報が入った辞書を作成し、ランダムで抽出するようにします。random.choice(list(enemy_type.items()))ランダムに選ぶメソッドを使用したいので、ランダムモジュールをコードの一番上に書いておきます。上に書くつぎに、これらのモンスターは攻撃では毎ターン0,10,20,30のいずれかのダメージをプレイヤーに与えますが、それぞれ確率が決まっています。そこでモンスターに「運」要素をもたせ、それが~%だった場合に××ダメージを与える、というように条件分岐をさせるようにします。self.damage継承で魔法使いクラス、騎士クラスをつくる最後に、プレイヤークラスを継承して、魔法使いクラスや騎士クラスを作成していきます。そのさいにはメソッドを上書きして別の処理に変更していきます。攻撃が斬撃攻撃になり、20%の確率で攻撃ダメージが増える(20ダメージ)が、20%の確率で攻撃が外れる継承してクラスを作成するため、変更する部分や追加する部分だけを記述していきます。魔法使いクラスから作成していきます。魔法使いの攻撃は20%の確率で外れるという運要素があります。魔法使いは90%の確率で攻撃が外れるので、if文で追加していきます。self.HP魔法使いは防御するとHPが5回復するので、防御メソッドもオーバーライドしていきます。以上で魔法使いクラスの記述は完了です。騎士クラスは20%の確率で攻撃が20になり、20%の確率で攻撃が外れます。これもエネミークラスと同様にコードを書いていきます。self.damage騎士クラスは防御メソッドに変更はないため記述しません。クラスの作成は以上になります。self.damageまとめクラスを作成していくことで、実際に動かすさいのプログラムでメソッドをわかりやすく記述していくことができます。次回は、実際のメインプログラムのなかで作成したクラスのメソッドを呼び出してゲームを進めていく部分を記述していきます。今回の記事では、クラスやオブジェクト指向を使って簡単なRPGをつくる演習を引き続き行います。ポイントを解説しながら、数回にわたって記事を掲載していきます。今回の記事では、クラスやオブジェクト指向を使って簡単なRPGをつくる演習編に入ります。ポイントを解説しながら、数回にわたって記事を掲載していきます。今回の記事では、前回までの「クラス」や「インスタンス」の基本をふまえて、オブジェクト指向における「継承」「ポリモーフィズム」「カプセル化」について説明していきます。今回の記事では、プログラミングの基本をふまえて、「クラス」をより便利に使うための「インスタンス変数」「コンストラクタ」について説明していきます。今回の記事からは、プログラミングの基本をふまえて、より多くの機能を持ったプログラムや実用的なアプリを作成するうえで便利な「オブジェクト指向」や「クラス」について解説していきます。今回のブログでは、プログラムをつくるうえでたくさんの値やデータを扱うさいに便利な「リスト」をメインに、データの構造について説明していきます。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。最近のコメント表示できるコメントはありません。ほやほやSE日記.ホーム検索トップサイドバータイトルとURLをコピーしました。