Kenar Karoları
Coddy'nin Pygame Journey'sinin Dünyalar bölümünün bir parçası. Ders 8 / 35.
Bir platformun uçları yuvarlatıldığında tamamlanmış görünür. Pakette çimenli bir yüzeyin iki ucu için grass_left.png ve grass_right.png bulunur.
Artık her döşeme üç komşusuna bakar: üstüne, soluna ve sağına. Bazıları haritanın dışında, kenarlardadır. Bir yardımcı işlev, içeride olsun ya da olmasın, herhangi bir konum için yanıt verir:
def solid(row, col):
if row < 0 or row >= len(LEVEL) or col < 0 or col >= len(LEVEL[0]):
return False
return LEVEL[row][col] == "#"Haritanın dışı boş kabul edilir. Yardımcı işlevle seçim, kuralı şöyle ifade eder:
if solid(row - 1, col):
image = dirt_img
elif not solid(row, col - 1) and solid(row, col + 1):
image = grass_left_img
elif solid(row, col - 1) and not solid(row, col + 1):
image = grass_right_img
else:
image = grass_img
tiles.append((image, pygame.Rect(x, y, TILE, TILE)))Her iki yanında da zemin olan ya da iki yanında da zemin olmayan bir döşemede düz çimen kalır. Haritanın sol kenarında, 0. sütunda, soldaki döşeme haritanın dışındadır; bu nedenle boş kabul edilir ve oradaki zemin grass_left_img ile başlar.
Görev
OrtaBaşlangıç kodu, grass_left.png dosyasını grass_left_img içine ve grass_right.png dosyasını grass_right_img içine yükler.
- Haritanın dışında
False, içinde iseLEVEL[row][col] == "#"döndüren birsolid(row, col)işlevi yazın. - Her
#için: üstteki karo katıysadirt_img; değilse yalnızca sağ komşu katıysagrass_left_img; değilse yalnızca sol komşu katıysagrass_right_img; diğer durumlardagrass_imgkullanın.
Kendin dene
import pygame
TILE = 36
LEVEL = [
"###.............",
"###.............",
"..........C.....",
".........####...",
"..C.............",
".####......C....",
"..........###...",
"#....C.........#",
"###..##...###.##",
"######..########",
]
pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Tiles")
clock = pygame.time.Clock()
grass_img = pygame.image.load("assets/images/grass.png").convert_alpha()
grass_left_img = pygame.image.load("assets/images/grass_left.png").convert_alpha()
grass_right_img = pygame.image.load("assets/images/grass_right.png").convert_alpha()
dirt_img = pygame.image.load("assets/images/dirt.png").convert_alpha()
coin_img = pygame.image.load("assets/images/coin.png").convert_alpha()
tiles = []
for row, line in enumerate(LEVEL):
for col, char in enumerate(line):
x, y = col * TILE, row * TILE
if char == "#":
if row == 0 or LEVEL[row - 1][col] != "#":
image = grass_img
else:
image = dirt_img
tiles.append((image, pygame.Rect(x, y, TILE, TILE)))
elif char == "C":
tiles.append((coin_img, pygame.Rect(x, y, TILE, TILE)))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((140, 200, 240))
for image, rect in tiles:
screen.blit(image, rect)
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