Menu
CoddyTech

صور البلاطات

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

تُظهر المستطيلات البنية مواضع الجدران. تجعل الصور المستوى يبدو كمكان حقيقي. حمّل صورة كل بلاطة مرة واحدة، بعد set_mode:

block_img = pygame.image.load("assets/images/block.png").convert_alpha()
coin_img = pygame.image.load("assets/images/coin.png").convert_alpha()

قياس كل بلاطة 36 × 36، وهو قياس بلاطة الخريطة، لذا فهي تلائم الشبكة دون تغيير الحجم. لصورة العملة إطار فارغ، لذا ارسمها عند زاوية البلاطة لتظهر العملة في المنتصف.

احتفظ بما تريد رسمه في قائمة واحدة من الأزواج: أي صورة، وأين. يضيف tiles.append((block_img, rect)) زوجًا؛ وترسم حلقة اللعبة كلها:

for image, rect in tiles:
    screen.blit(image, rect)

تفك الحلقة كل زوج إلى image وrect.

challenge icon

التحدي

سهل
  1. بعد set_mode، حمِّل assets/images/block.png إلى block_img وassets/images/coin.png إلى coin_img، مع استخدام convert_alpha() لكلٍّ منهما.
  2. قبل حلقة اللعبة، أنشئ قائمة باسم tiles: لكل #، أضف الزوج (block_img, pygame.Rect(col * TILE, row * TILE, TILE, TILE))؛ ولكل C، أضف (coin_img, ...) مع Rect نفسها.
  3. في حلقة اللعبة، ارسم كل زوج في tiles باستخدام blit بدلًا من رسم المستطيلات البنية والصفراء.

جرّب بنفسك

import pygame

TILE = 36
WALL = (120, 90, 60)
COIN = (255, 196, 0)

LEVEL = [
    "###.............",
    "###.............",
    "..........C.....",
    ".........####...",
    "..C.............",
    ".####......C....",
    "..........###...",
    "#....C.........#",
    "###..##...###.##",
    "######..########",
]

pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Tiles")
clock = pygame.time.Clock()

walls = []
coins = []
for row, line in enumerate(LEVEL):
    for col, char in enumerate(line):
        if char == "#":
            walls.append(pygame.Rect(col * TILE, row * TILE, TILE, TILE))
        elif char == "C":
            coins.append(pygame.Rect(col * TILE + 10, row * TILE + 10, 16, 16))

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill((140, 200, 240))
    for wall in walls:
        pygame.draw.rect(screen, WALL, wall)
    for coin in coins:
        pygame.draw.rect(screen, COIN, coin)
    pygame.display.flip()
    clock.tick(60)

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

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

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

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