Menu
CoddyTech

Karo Görselleri

Coddy'nin Pygame Journey'sinin Dünyalar bölümünün bir parçası. Ders 6 / 35.

Kahverengi dikdörtgenler duvarların nerede olduğunu gösterir. Görseller, seviyenin bir mekân gibi görünmesini sağlar. Her karo görselini set_mode sonrasında bir kez yükle:

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

Her karo 36'ya 36 boyutundadır; bu, harita karosunun boyutudur, dolayısıyla ölçeklendirme yapmadan ızgaraya sığar. Madeni para görselinin kenar boşluğu vardır, bu yüzden görseli karonun köşesine çiz ve madeni para ortada kalır.

Çizilecek öğeleri tek bir çiftler listesinde tut: hangi görsel ve nerede. tiles.append((block_img, rect)) bir çift ekler; oyun döngüsü hepsini ekrana çizer:

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

Döngü, her çifti image ve rect olarak ayırır.

challenge icon

Görev

Kolay
  1. set_mode'dan sonra assets/images/block.png dosyasını block_img'ye ve assets/images/coin.png dosyasını coin_img'ye yükle; her ikisinde de convert_alpha() kullan.
  2. Oyun döngüsünden önce tiles adlı bir liste oluştur: her # için (block_img, pygame.Rect(col * TILE, row * TILE, TILE, TILE)) çiftini; her C içinse aynı Rect'i içeren (coin_img, ...) çiftini ekle.
  3. Oyun döngüsünde, kahverengi ve sarı dikdörtgenleri çizmek yerine tiles içindeki her çifti blit et.

Kendin dene

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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Dünyalar bölümündeki tüm dersler

Kendi başına pratik yap: Pygame playground