CODE Python RPG

初心者がPythonでRPGを作成する(第3回)クラスを作成

更新日:

こんにちは。
「Pythonでつくる ゲーム開発 入門講座」のChapter11,12(本格RPGを作ろう!全編・後編)を基にRPGを作っていきます。

前回はどこを歩いていても一定の確率で敵が出現するように変更しました。
今回はキャラクターのクラスを作成して、パラメータを持たせます。
ゲーム上の動きは特に変わりませんが、管理しやすくなると思います。

目次

  1. クラスの作成
  2. 変更
  3. 最後に

 

クラスの作成

では、クラスを作成していきます。
Pythonのクラスについての説明はこちらのPythonのサイトをどうぞ!
自分は半分も理解できていませんけどね・・(。-ε-。)ボソッ

とりあえず、chara.pyというファイルを作成して、内容を以下にしました。

class Brave():
    def __init__(self):
        self.name = "ハロハロ"
        self.maxhp = 300
        self.hp = self.maxhp
        self.maxmp = 10
        self.mp = self.maxmp
        self.atk = 1000
        self.dfs = 10
    def reset(self):
        self.maxhp = 300
        self.hp = self.maxhp
        self.maxmp = 10
        self.mp = self.maxmp
        self.atk = 1000
        self.dfs = 10

クラス名はBrave(勇者)です。
職業の概念も入れたいと思ってこの名前にしました!(けど、だいぶ先になる予感です)

コンストラクで
name(名前)、maxhp(最大HP)、hp(今のHP)、maxmp(最大MP)、mp(今のMP)、攻撃力(atk)、防御力(dfs)
のパラメータを定義しました。
HP:ヒットポイント、攻撃を受けたら減っていき、0になったら気絶(ゲームオーバー)
MP:マジックポイント、majic(魔法)を使うのに必要なポイント

今のところ使うのはmaxhp、hp、atkの3つのみです。
他はそのうち使うと思います。
また、他にも追加するパラメータが出てくると思いますが、一旦ここまでです。
あと、「ハロハロ」の名前には特に意味がありません・・
あとあと、攻撃力が異様に高い(1000)のはテストの時に戦闘を早く終わらせる為です。

 

もう一つ、メソッドresetを定義しています。

これは、コンストラクタと同じようにそれぞれ最初の値にリセットします。
ゲーム開始時やゲームオーバーになった時に使います。
(コンストラクタが実行されるのはインスタンス作成時のみです)

 

 

変更

次にone_hour_dungeon.pyの変更です。
まず、先程のchara.pyを読み込みます。

import chara

そして、インスタンスの作成。グローバル変数にしています。

player = chara.Brave()

これで、Braveクラスのパラメータとメソッドを使えます。
この為、以下の変数は不要になります。

pl_lifemax = 0 # プレイヤーの体力の最大値
pl_life = 0 # プレイヤーの体力(1歩ごとに1回復) 0になったらゲームオーバー
pl_str = 0 # プレイヤーの攻撃力

それぞれ以下のように変わります。
pl_lifemax → player.maxhp
pl_life → player.hp
pl_str → player.atk

というわけで、以下のように変更しています。

# 変更前
if food > 0:
    food = food - 1
    if pl_life < pl_lifemax:
        pl_life = pl_life + 1
    else:
        pl_life = pl_life - 5
        if pl_life <= 0:
            pl_life = 0
# 変更後
if food > 0:
    food = food - 1
    if player.hp < player.maxhp:
        player.hp = player.hp + 1
    else:
        player.hp = player.hp - 5
        if player.hp <= 0:
            player.hp = 0

他にもpl_lifeとか使われている箇所がありますが、全て変更しました。

ちなみに自分はエディタはVSCodeを使っているのですが、今回のように変数などを一括で変更する場合、VSCodeだとこちらのショートカットキーを使うと便利です!

 

最後にもう1箇所、以下を変更します。

# 変更前
if key[K_SPACE] == 1:
    make_dungeon()
    put_event()
    floor = 1
    welcome = 15
    pl_lifemax = 300
    pl_life = pl_lifemax
    pl_str = 100

これはタイトル画面にきた時の動作です。
つまり、ゲームスタート時もしくは戦闘に負けて最初からやり直す時です。
ゲーム中にレベルアップなどで、最大HP、HP、攻撃力の値が変わる為、これらをリセットしています。

このリセットをする時に、Braveクラスで作ったresetメソッドを使います。

# 変更後
if key[K_SPACE] == 1:
    make_dungeon()
    put_event()
    floor = 1
    welcome = 15
    player.reset() # 最大HP、HP、攻撃力をリセット

resetメソッドの再掲です。

    def reset(self):
        self.maxhp = 300
        self.hp = self.maxhp
        self.maxmp = 10
        self.mp = self.maxmp
        self.atk = 1000
        self.dfs = 10

ゲーム開始時もこのメソッドを使っているので、コンストラクタはnameだけで他のパラメータは指定しなくても良いと思いますが、何となく入れました。。

今回の変更は以上です!

 

 

最後に

キャラのクラスを作ってみました。
これだけだとあまり恩恵はないかもしれませんが、キャラやパラメータとかが増えてくると便利になると思います。
そのうち、モンスターのクラスも作ってみます。

なお、今回はパラメータの値をクラス内に直に打ち込んでいますが、次回はこちらを使ってスプレッドシートから値を読み込んでみます!

まとめサイトへ

 

 

【ご注意】
プログラムやデータなどは著作権法により保護されています。
著作者の許諾を得ずに、プログラムおよびデータそのものまたは改変したものを
配布したり販売したりすることはできません。
また、これらを利用して発生した損害などに関して、著作者は一切責任を負いません。

 

 

-CODE, Python, RPG
-, , , , , , , , , ,

Copyright© kerublog , 2021 All Rights Reserved Powered by STINGER.