Hisarın İlk Odası
Coddy'nin Pygame Journey'sinin Projeler bölümünün bir parçası. Ders 21 / 31.
Sıradaki oyunun Rune Keep: üç odalı bir hisarda kapana kısılmış, yukarıdan görünen bir şövalye. Her odada bir anahtar, kilitli bir kapı ve canavarlar var. Anahtarı bul, kapıyı aç, sonraki odaya ulaş ve kalplerini koruyarak dışarı çık.
Bir oda, Moss Caves'teki gibi bir metin haritasıdır: 48 piksellik karelerden oluşan 14 sütun ve 10 satır; bu da 672'ye 480 piksellik bir pencereyi doldurur. # bir duvardır. Diğer harfler sonraki derslerde canlanacak: P şövalye, K anahtar, D kapı, S bir sümük canavarı, H bir iksir. Şimdilik bunlar zemindir.
Room sınıfı, haritasından bir odanın barındırdığı her şeyi oluşturur. Daha sonra şövalye odadan odaya yürür ve her yeni oda tek satırla oluşturulur: 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))Bir duvarı çizmek için görselini Rect konumuna yerleştir: screen.blit(wall_img, wall), görseli Rect'in sol üst köşesine yerleştirir.
Görev
KolayBaşlangıç kodu pencereyi açar, zemini karolarla kaplar ve kalenin ihtiyaç duyduğu yazı tipini ve tüm görselleri yükler; sonraki dersler için hazırdır: knight_img, key_img, slime_img ve diğerleri.
Room.__init__içindelinesüzerinde ilerleyin ve her#içinself.wallslistesine(col * TILE, row * TILE)konumunda 48'e 48 boyutlarında bir Rect ekleyin. Başlangıç kodu zatenroom = Room(MAP)oluşturuyor.- Zemini çizdikten sonra,
room.wallsiçindeki her Rect konumundawall_imggörselini blit edin.
Kendin dene
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 = []
# duvarları burada oluştur
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()
Projeler bölümündeki tüm dersler
Kendi başına pratik yap: Pygame playground