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