Metinde Bir Seviye
Coddy'nin Pygame Journey'sinin Dünyalar bölümünün bir parçası. Ders 1 / 35.
Sayılarla duvar duvar bir bölüm çizmek yavaş yazılır ve değiştirmesi zordur. Bunun yerine bölümü metin olarak yaz: her satır bir döşeme satırını, her karakter bir döşemeyi temsil eden bir dizeler listesi.
LEVEL = [
"################",
"#..............#",
"#....####......#",
"#..............#",
"#.........##...#",
"#..##.....##...#",
"#..##..........#",
"#.........###..#",
"#..............#",
"####..####..####",
]Burada # bir duvarı, . ise boş alanı belirtir. LEVEL[9], en alttaki satır olan bir dizgedir ve LEVEL[9][4] onun beşinci karakteridir. Satırlar yukarıdan, sütunlar soldan başlayarak sayılır ve her ikisi de 0'dan başlar.
TILE = 36 piksel genişliğindeki döşemelerde, col sütunundaki ve row satırındaki döşeme x = col * TILE, y = row * TILE konumunda başlar. Bir satırın üzerinde ilerlemek için enumerate her karakteri diziniyle birlikte verir:
for col, char in enumerate(LEVEL[9]):
if char == "#":
pygame.draw.rect(screen, WALL, (col * TILE, 9 * TILE, TILE, TILE))Alt satırdaki iki boşluk boş kalır, çünkü bir döşemeyi yalnızca # çizer.
Görev
KolayBaşlangıç sürümü, alt sıranın tamamını tek bir kahverengi çubuk olarak çiziyor. Bunun yerine haritadan çiz:
- Çubuğu çizen satırı kaldır.
LEVEL[9]üzerindeenumerateile döngü oluştur.- Her
#için(col * TILE, 9 * TILE, TILE, TILE)konumunda birWALLdikdörtgeni çiz.
Haritayı olduğu gibi bırak. Yeşil kare ok tuşlarıyla hareket eder ve şimdilik her şeyin içinden geçer: onu durduran duvarlar bu bölümün ilerleyen kısmında ele alınacak.
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))
pygame.draw.rect(screen, WALL, (0, 324, 576, 36))
pygame.draw.rect(screen, PLAYER, player)
pygame.display.flip()
clock.tick(60)
pygame.quit()
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