Menu
CoddyTech

בנו את המערות

חלק מהיחידה עולמות במסלול ה-Pygame של Coddy. שיעור 28 מתוך 35.

Moss Caves הוא משחק פלטפורמה משלך: רוצו דרך מערה מכוסה טחב, אספו מטבעות, קפצו מעל קוצים ובורות, רמסו כתמים, מצאו את המפתח, פתחו את הדלת והגיעו לדגל. כל שלב מוסיף חלק אחד, שנבנה ממה שיצרתם ביחידה הזאת.

כל השלב הוא המפה שבקוד הפתיחה, ברוחב של 64 עמודות. # הוא קרקע, P הוא נקודת ההתחלה, והאותיות האחרות מייצגות דברים שתוסיפו: מטבעות C, קוצים ^, כתמים E, המפתח K, הדלת D, הדגל F. עד ששלב כלשהו יקרא אות, האריח שלה נשאר ריק.

קודם כול, בנו את הקרקע. מעבר אחד על פני המפה ממלא את walls במופעי Rect להתנגשויות ואת tiles בזוגות (image, Rect) לציור, תוך בחירה בין דשא, אדמה או אריח קצה באמצעות solid(), כמו בפרק Tiles:

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בחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה עולמות

תרגלו בעצמכם: Pygame אונליין