Ruang Pertama Menara
Termasuk bagian Proyek dalam perjalanan Pygame di Coddy. Pelajaran 21 dari 31.
Game berikutnya adalah Rune Keep: seorang ksatria yang terlihat dari atas, terjebak di sebuah benteng dengan tiga ruangan. Setiap ruangan memiliki kunci, pintu terkunci, dan monster. Temukan kuncinya, buka pintunya, capai ruangan berikutnya, dan keluar dengan hati yang masih tersisa.
Ruangan adalah peta teks, seperti di Moss Caves: 14 kolom kali 10 baris ubin berukuran 48 piksel, yang memenuhi jendela berukuran 672 kali 480. # adalah dinding. Huruf lainnya akan hidup di pelajaran berikutnya: P adalah ksatria, K adalah kunci, D adalah pintu, S adalah slime, H adalah ramuan. Untuk saat ini, semuanya adalah lantai.
class Room membangun semua yang ada di dalam ruangan dari petanya. Nantinya ksatria berjalan dari satu ruangan ke ruangan lain, dan setiap ruangan baru cukup dibuat dengan satu baris: 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))Untuk menggambar dinding, blit gambarnya pada Rect-nya: screen.blit(wall_img, wall) menempatkan gambar di sudut kiri atas Rect.
Tantangan
MudahKode awal membuka jendela, menutupinya dengan ubin lantai, lalu memuat font dan semua gambar yang dibutuhkan keep, siap digunakan di pelajaran berikutnya: knight_img, key_img, slime_img, dan seterusnya.
- Di
Room.__init__, telusurilinesdan tambahkan Rect berukuran 48 kali 48 pada posisi(col * TILE, row * TILE)keself.wallsuntuk setiap#. Kode awal sudah membuatroom = Room(MAP). - Setelah menggambar lantai, gambar
wall_imgpada setiap Rect diroom.walls.
Coba sendiri
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 = []
# buat dindingnya di sini
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()
Semua pelajaran di Proyek
Latihan sendiri: Playground Pygame