Satırlar ve Sütunlar
Coddy'nin Pygame Journey'sinin Dünyalar bölümünün bir parçası. Ders 2 / 35.
Bir döngü bir satır boyunca ilerler. Etrafındaki ikinci bir döngü satırlar boyunca aşağı iner; böylece birlikte haritadaki her karoyu ziyaret ederler. Dış döngü, LEVEL içindeki her dizgeyi satır numarasıyla birlikte line olarak verir; iç döngü ise o satırdaki karakterler boyunca ilerler.
walls = []
for row, line in enumerate(LEVEL):
for col, char in enumerate(line):
if char == "#":
walls.append(pygame.Rect(col * TILE, row * TILE, TILE, TILE))Duvarları, oyun döngüsünden önce, bir kez Rect listesi olarak oluştur. Oynarken harita değişmez ve Rect, çarpışmaları daha sonra denetleyeceğin şeydir. Oyun döngüsünde her duvarı çiz:
for wall in walls:
pygame.draw.rect(screen, WALL, wall)row dış döngüden gelir, bu yüzden karonun y değerini belirler; iç döngüden gelen col ise x değerini belirler. Bunları karıştırmak, seviyeyi yan yatırır.
Görev
Orta- Oyun döngüsünden önce,
wallsadlı bir liste oluştur. LEVELiçindeki her satır ve satırdaki her karakter üzerinde ikienumeratedöngüsüyle yinele. Her#içinpygame.Rect(col * TILE, row * TILE, TILE, TILE)değeriniwallslistesine ekle.- Oyun döngüsünde, yalnızca en alt sırayı çizmek yerine
wallsiçindeki her Rect'i kahverengiWALLrengiyle çiz.
Kendin dene
import pygame
TILE = 36
WALL = (120, 90, 60)
PLAYER = (80, 200, 120)
LEVEL = [
"################",
"#..............#",
"#....####......#",
"#..............#",
"#.........##...#",
"#..##.....##...#",
"#..##..........#",
"#.........###..#",
"#..............#",
"####..####..####",
]
pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Map from Text")
clock = pygame.time.Clock()
player = pygame.Rect(40, 40, 28, 28)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player.x -= 4
if keys[pygame.K_RIGHT]:
player.x += 4
if keys[pygame.K_UP]:
player.y -= 4
if keys[pygame.K_DOWN]:
player.y += 4
screen.fill((30, 30, 46))
for col, char in enumerate(LEVEL[9]):
if char == "#":
pygame.draw.rect(screen, WALL, (col * TILE, 9 * TILE, TILE, TILE))
pygame.draw.rect(screen, PLAYER, player)
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