صور البلاطات
جزء من قسم العوالم في رحلة 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.
التحدي
سهل- بعد
set_mode، حمِّلassets/images/block.pngإلىblock_imgوassets/images/coin.pngإلىcoin_img، مع استخدامconvert_alpha()لكلٍّ منهما. - قبل حلقة اللعبة، أنشئ قائمة باسم
tiles: لكل#، أضف الزوج(block_img, pygame.Rect(col * TILE, row * TILE, TILE, TILE))؛ ولكلC، أضف(coin_img, ...)مع Rect نفسها. - في حلقة اللعبة، ارسم كل زوج في
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()
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس العوالم
تدرّب بنفسك: Playground لـ Pygame