La première salle du donjon
Fait partie de la section Projets du Journey Pygame de Coddy. Leçon 21 sur 31.
Ton prochain jeu est Rune Keep : un chevalier vu de dessus, piégé dans un donjon composé de trois salles. Chaque salle contient une clé, une porte verrouillée et des monstres. Trouve la clé, ouvre la porte, atteins la salle suivante et sors avec tes cœurs.
Une salle est une carte textuelle, comme dans Moss Caves : 14 colonnes sur 10 lignes de tuiles de 48 pixels, qui remplissent une fenêtre de 672 sur 480. # est un mur. Les autres lettres prendront vie dans les leçons suivantes : P le chevalier, K la clé, D la porte, S un slime, H une potion. Pour l'instant, ce sont des cases de sol.
Une classe Room crée tout ce que contient une salle à partir de sa carte. Plus tard, le chevalier passera d'une salle à l'autre, et chaque nouvelle salle s'écrira sur une ligne : Room(MAP2).
class Room:
def __init__(self, lines):
self.walls = []
for row, line in enumerate(lines):
for col, char in enumerate(line):
if char == "#":
self.walls.append(pygame.Rect(col * TILE, row * TILE, TILE, TILE))Pour dessiner un mur, blitte son image à sa Rect : screen.blit(wall_img, wall) place l'image en haut à gauche de la Rect.
Défi
FacileLe code de départ ouvre la fenêtre, la recouvre de dalles de sol et charge la police ainsi que toutes les images dont le donjon a besoin, en préparation des prochaines leçons : knight_img, key_img, slime_img et les autres.
- Dans
Room.__init__, parcourezlineset ajoutez un Rect de 48 par 48 àself.walls, à l’emplacement(col * TILE, row * TILE), pour chaque#. Le code de départ crée déjàroom = Room(MAP). - Après le sol, affichez
wall_imgà l’emplacement de chaque Rect dansroom.walls.
Essayez vous-même
import pygame
TILE = 48
MAP = [
"##############",
"#............#",
"#.P......K...#",
"#............#",
"#....##......D",
"#....##......#",
"##.#######.###",
"#............#",
"#...S....H...#",
"##############",
]
pygame.init()
screen = pygame.display.set_mode((672, 480))
pygame.display.set_caption("Rune Keep")
clock = pygame.time.Clock()
font = pygame.font.Font("assets/fonts/pixel.ttf", 32)
def load(name):
return pygame.image.load("assets/images/" + name).convert_alpha()
floor_img = load("floor.png")
wall_img = load("wall.png")
knight_img = load("knight.png")
door_img = load("dungeon_door.png")
key_img = load("key.png")
slime_img = load("slime.png")
spider_img = load("spider.png")
heart_img = load("heart.png")
empty_img = load("heart_empty.png")
sword_img = load("sword.png")
potion_img = load("potion_red.png")
class Room:
def __init__(self, lines):
self.walls = []
# construisez les murs ici
room = Room(MAP)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
for row in range(10):
for col in range(14):
screen.blit(floor_img, (col * TILE, row * TILE))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Toutes les leçons de Projets
3Le Donjon des runes
La première salle du donjonLe chevalier marcheEntraînez-vous par vous-même : Playground Pygame