Menu
CoddyTech

החדר הראשון במבצר

חלק מהיחידה פרויקטים במסלול ה-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))

כדי לצייר קיר, הצג את התמונה שלו במיקום של ה-Rect שלו: screen.blit(wall_img, wall) מציב את התמונה בפינה השמאלית העליונה של ה-Rect.

challenge icon

אתגר

קל

קוד ההתחלה פותח את החלון, מכסה אותו באריחי רצפה וטוען את הגופן ואת כל התמונות שהמבצר צריך, לקראת השיעורים הבאים: knight_img, key_img, slime_img וכן הלאה.

  1. בתוך Room.__init__, עברו על lines והוסיפו אל self.walls מלבן Rect בגודל 48 על 48 במיקום (col * TILE, row * TILE) עבור כל #. קוד ההתחלה כבר יוצר את room = Room(MAP).
  2. אחרי הרצפה, ציירו את wall_img בכל Rect שנמצא ב-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()

כל השיעורים ביחידה פרויקטים

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