Menu
CoddyTech

ابنِ الكهوف

جزء من قسم العوالم في رحلة Pygame على Coddy. الدرس 28 من 35.

لعبة «كهوف الطحالب» هي لعبة منصات من صنعك: اركض عبر كهف مغطى بالطحالب، واجمع العملات، واقفز فوق الأشواك والحفر، واسحق الكتل الهلامية، واعثر على المفتاح، وافتح الباب، واصل إلى العلم. تضيف كل خطوة جزءًا واحدًا، مبنيًا مما أنجزته في هذا القسم.

المستوى بأكمله هو الخريطة الموجودة في المشروع الابتدائي، وعرضها 64 عمودًا. يرمز # إلى الأرض، ويمثل P نقطة البداية، أما الأحرف الأخرى فهي عناصر ستضيفها: C للعملات، و^ للأشواك، وE للكتل الهلامية، وK للمفتاح، وD للباب، وF للعلم. يظل المربع فارغًا إلى أن تقرأ إحدى الخطوات حرفه.

ابدأ ببناء الأرض. تمريرة واحدة على الخريطة تملأ walls بمستطيلات للتصادمات، وtiles بأزواج (image, Rect) للرسم، مع اختيار العشب أو التراب أو مربع الحافة باستخدام solid()، كما في فصل المربعات:

rect = pygame.Rect(col * TILE, row * TILE, TILE, TILE)
if char == "#":
    # اختر الصورة باستخدام solid()، كما في السابق
    walls.append(rect)
    tiles.append((image, rect))
elif char == "P":
    start = rect.midbottom

يقف اللاعب على start، في منتصف الحافة السفلية لمربع P.

challenge icon

التحدي

متوسط
  1. قبل حلقة اللعبة، أنشئ walls وtiles، ثم مرّر على الخريطة. لكل #، اختر dirt_img أو grass_left_img أو grass_right_img أو grass_img باستخدام solid() كما في البلاطات الطرفية، وأضف Rect إلى walls والزوج إلى tiles.
  2. بالنسبة إلى P، عيّن start إلى midbottom للبلاطة.
  3. أنشئ player = player_img.get_rect(midbottom=start).
  4. في حلقة اللعبة، بعد الخلفية، ارسم كل بلاطة عند Rect الخاص بها، ثم اللاعب.

جرّب بنفسك

import pygame

TILE = 36
WIDTH, HEIGHT = 576, 360

LEVEL = [
    "................................................................",
    "................................................................",
    "................................................................",
    "................................................................",
    "#..............................................................#",
    "#....................C.........................#####...........#",
    "#......CC...C................CC.....CC.........#####.....CC....#",
    "#....................#.........................D...............#",
    "#.P.........#...E....#...^.......K......E......D.C....^......F.#",
    "#######..####################..##########################..#####",
]

pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Moss Caves")
clock = pygame.time.Clock()


def load(name):
    return pygame.image.load("assets/images/" + name).convert_alpha()


background = pygame.image.load("assets/backgrounds/forest.png").convert_alpha()
grass_img = load("grass.png")
grass_left_img = load("grass_left.png")
grass_right_img = load("grass_right.png")
dirt_img = load("dirt.png")
player_img = load("player.png")


def solid(row, col):
    if row < 0 or row >= len(LEVEL) or col < 0 or col >= len(LEVEL[0]):
        return False
    return LEVEL[row][col] == "#"


running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    for y in range(0, HEIGHT, 72):
        for x in range(0, WIDTH, 72):
            screen.blit(background, (x, y))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس العوالم

تدرّب بنفسك: Playground لـ Pygame