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.
Görev
Kolayset_mode'dan sonraassets/images/block.pngdosyasınıblock_img'ye veassets/images/coin.pngdosyasınıcoin_img'ye yükle; her ikisinde deconvert_alpha()kullan.- Oyun döngüsünden önce
tilesadlı bir liste oluştur: her#için(block_img, pygame.Rect(col * TILE, row * TILE, TILE, TILE))çiftini; herCiçinse aynı Rect'i içeren(coin_img, ...)çiftini ekle. - Oyun döngüsünde, kahverengi ve sarı dikdörtgenleri çizmek yerine
tilesiç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()
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
1Metinden Haritalar
Metinde Bir SeviyeSatırlar ve SütunlarAnlam Taşıyan HarflerOyuncunun Başladığı YerHer Seferinde Bir Ekran3Yerçekimi ve Zıplama
Yerçekimiyle DüşmeYerden ZıplamaKısa SıçrayışlarEn Yüksek Düşme HızıZıplama Tamponu6Devriye Gezen Düşmanlar
Devriye Gezen Bir BlobÜzerine Bas ya da Darbe AlYürüme DöngüsüHaritadaki DüşmanlarKendi başına pratik yap: Pygame playground