Obrazy kafelków
Część sekcji Światy ścieżki Pygame w Coddy. Lekcja 6 z 35.
Brązowe prostokąty pokazują, gdzie znajdują się ściany. Obrazy sprawiają, że poziom wygląda jak miejsce. Wczytaj każdy obraz kafelka raz, po set_mode:
block_img = pygame.image.load("assets/images/block.png").convert_alpha()
coin_img = pygame.image.load("assets/images/coin.png").convert_alpha()Każdy kafelek ma wymiary 36 na 36, czyli tyle samo co kafelek mapy, więc pasuje do siatki bez skalowania. Obraz monety ma pusty margines, więc narysuj go w rogu kafelka, a moneta znajdzie się na środku.
Przechowuj elementy do narysowania na jednej liście par: który obraz i gdzie. tiles.append((block_img, rect)) dodaje parę; pętla gry rysuje je wszystkie:
for image, rect in tiles:
screen.blit(image, rect)Pętla rozpakowuje każdą parę na image i rect.
Wyzwanie
Łatwy- Po
set_modewczytajassets/images/block.pngdoblock_img, aassets/images/coin.pngdocoin_img, każde z użyciemconvert_alpha(). - Przed pętlą gry utwórz listę o nazwie
tiles: dla każdego#dodaj parę(block_img, pygame.Rect(col * TILE, row * TILE, TILE, TILE)); dla każdegoCdodaj(coin_img, ...)z tym samym wywołaniem Rect. - W pętli gry wywołaj blit dla każdej pary z
tileszamiast rysować brązowe i żółte prostokąty.
Spróbuj swoich sił
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()
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Światy
1Mapy z tekstu
Poziom w tekścieWiersze i kolumnyLitery ze znaczeniemGdzie zaczyna graczJeden ekran narazPoćwicz samodzielnie: Edytor online Pygame