الغرفة الأولى في الحصن
جزء من قسم المشاريع في رحلة Pygame على Coddy. الدرس 21 من 31.
لعبتك التالية هي Rune Keep: فارس يُرى من الأعلى، عالق في حصن مكوّن من ثلاث غرف. تحتوي كل غرفة على مفتاح وباب مقفل ووحوش. اعثر على المفتاح، وافتح الباب، واصل إلى الغرفة التالية، واخرج محتفظًا بقلوبك.
الغرفة خريطة نصية، كما في Moss Caves: 14 عمودًا × 10 صفوف من البلاطات، مقاس كل منها 48 بكسل، لتملأ نافذة مقاسها 672 × 480. الرمز # يعني جدارًا. وستدب الحياة في الأحرف الأخرى في الدروس التالية: P للفارس، وK للمفتاح، وD للباب، وS لهلام، وH لجرعة. أما الآن، فهي أرضية.
يبني الصنف Room كل ما تحتويه الغرفة انطلاقًا من خريطتها. لاحقًا، سيتنقل الفارس من غرفة إلى أخرى، ويكفي سطر واحد لإنشاء كل غرفة جديدة: 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))لرسم جدار، استخدم blit لوضع صورته عند Rect الخاص به: screen.blit(wall_img, wall) تضع الصورة عند الزاوية العلوية اليسرى لـ Rect.
التحدي
سهلتفتح الشيفرة الابتدائية النافذة، وتغطيها ببلاطات الأرضية، وتحمل الخط وكل صورة تحتاج إليها القلعة، استعدادًا للدروس التالية: knight_img وkey_img وslime_img وغيرها.
- داخل
Room.__init__، مرّ علىlinesوأضف مستطيلًاRectبأبعاد 48 × 48 عند(col * TILE, row * TILE)إلىself.wallsلكل#. تنشئ الشيفرة الابتدائية بالفعلroom = Room(MAP). - بعد الأرضية، ارسم
wall_imgعند كل مستطيل فيroom.walls.
جرّب بنفسك
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 = []
# أنشئ الجدران هنا
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()
جميع دروس المشاريع
تدرّب بنفسك: Playground لـ Pygame