CODE Python RPG

初心者がPythonでRPGを作成する(第2回)どこを歩いてもモンスター出現

更新日:

こんにちは。
「Pythonでつくる ゲーム開発 入門講座」のChapter11,12(本格RPGを作ろう!全編・後編)を基にRPGを作っていきます。
前回はコメントを追加したのみですが、今回から実際に変えていきます。

目次

  1. どこを歩いていてもモンスターが出る
  2. リストの添字
  3. まとめ

どこを歩いていてもモンスターが出る

オリジナルは繭に乗ったら一定の確率でモンスターが出現しますが、
どこを歩いていても一定の確率でモンスターが出現するように変更していきます!
move_player関数に以下のような箇所があります。

if dungeon[pl_y][pl_x] == 1: # 宝箱に載った
(省略)
if dungeon[pl_y][pl_x] == 2: # 繭に載った

dungeonはダンジョンマップの情報
(0:床、1:宝箱、2:繭、3:階段、9:壁)
pl_x、pl_yはプレイヤーのいる位置

プレイヤーが歩いて、乗った場所が宝箱(1)なら1のif文の処理、
繭(2)なら、2のif文の処理。

今は繭があると4割の確率で食料が出て、6割の確率でモンスターが出現します。

r = random.randint(0, 99)
if r < 40: # 食料
(省略)
else: # モンスター出現の処理

なので、これをdungeonが0(床)の時にモンスターが出現するように変更(追加)します。

if dungeon[pl_y][pl_x] == 0: # 何もない床
    dungeon[pl_y][pl_x] = -4
    r = random.randint(0, 99) # ランダムで0〜99を取得
    if r < 10: # ランダムで取得した値が10未満ならモンスター出現
        idx = 10
        tmr = 0
        return

これで1割の確率でモンスターが出現するようになりました。
2の繭は6割の確率でモンスターが出現するところをコメントアウトしました。
(4割は食料、6割は何も起こらないになる)

if r < 40: # 食料
    treasure = random.choice([3,3,3,4])
    if treasure == 3:
        food = food + 20
    if treasure == 4:
        food = food + 100
    idx = 3
    tmr = 0
# else: # モンスター出現
#     idx = 10
#     tmr = 0

 

 

 

リストの添字

ちなみにdungeon[pl_y][pl_x] = -4が無い(0のまま)と戦闘が終わった後、一歩も動いていないのにモンスターが出てきてしまい一歩も進めなくなるので、別の値にしています。
ただ、dungeonはimgFloorの添字になっているので、何でも言いわけでは無いです。

if 0 <= dx and dx < DUNGEON_W and 0 <= dy and dy < DUNGEON_H:
    if dungeon[dy][dx] <= 3:
        bg.blit(imgFloor[dungeon[dy][dx]], [X, Y])

imgFloorは以下の通り。

imgFloor = [
    pygame.image.load("image/floor.png"), # 0
    pygame.image.load("image/tbox.png"), # 1
    pygame.image.load("image/cocoon.png"), # 2
    pygame.image.load("image/stairs.png") # 3
]

リストは負の整数にすると反対から取得します。
参考

imgFloor = [
    pygame.image.load("image/floor.png"), # -4
    pygame.image.load("image/tbox.png"), # -3
    pygame.image.load("image/cocoon.png"), # -2
    pygame.image.load("image/stairs.png") # -1
]

表示したいのは床なので、dungeon[pl_y][pl_x] = -4にしました。
-1にした場合は階段がずっと付き纏うことになります。

なお、-4にしたところは以下で0(床)に戻しています。
※戻さずに-4のままだとその位置ではモンスターが出てこなくなってしまいます。

if pl_x != x or pl_y != y: # 移動したら食料の量と体力を計算
    pl_a = pl_a + tmr%2 # 移動したら足踏みのアニメーション
    dungeon[y][x] = 0 # いた場所を0にする
    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
            pygame.mixer.music.stop()
            idx = 9
            tmr = 0

 

 

 

まとめ

繭にのって4割は食料、6割はモンスターという仕様は残したい気もしましたが、、某RPGのようにしてみたいので、こんな感じにしてみました!
次はキャラクターのクラスを作成して、キャラクターのパラメータを管理します。

まとめサイトへ

 

 

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

 

 

-CODE, Python, RPG
-, , , ,

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