こんにちは。
「Pythonでつくる ゲーム開発 入門講座」のChapter11,12(本格RPGを作ろう!全編・後編)を基にRPGを作っていきます。
前回はコメントを追加したのみですが、今回から実際に変えていきます。
目次
どこを歩いていてもモンスターが出る
オリジナルは繭に乗ったら一定の確率でモンスターが出現しますが、
どこを歩いていても一定の確率でモンスターが出現するように変更していきます!
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のようにしてみたいので、こんな感じにしてみました!
次はキャラクターのクラスを作成して、キャラクターのパラメータを管理します。
【ご注意】
プログラムやデータなどは著作権法により保護されています。
著作者の許諾を得ずに、プログラムおよびデータそのものまたは改変したものを
配布したり販売したりすることはできません。
また、これらを利用して発生した損害などに関して、著作者は一切責任を負いません。