Oyuncunun Başladığı Yer
Coddy'nin Pygame Journey'sinin Dünyalar bölümünün bir parçası. Ders 4 / 35.
Bir seviye, oyuncunun nerede başlayacağını belirler; bu yüzden bunu da haritaya ekle: bir P. Döngüler haritayı okurken P karosu, oyuncunun ilk konumunu belirler.
elif char == "P":
player = pygame.Rect(col * TILE + 4, row * TILE + 4, 28, 28)Oyuncu 28 piksellik bir karedir; bu yüzden karonun ortasında, köşesinden içeriye doğru (36 - 28) / 2 = 4 piksel mesafede başlar. Artık metindeki P'yi taşıyarak başlangıç konumunu değiştirebilirsin: hesaplaman gereken sayı yok.
Döngü, oyun döngüsünden önce çalışır; bu nedenle oyun döngüsü oyuncuyu hareket ettirdiğinde player zaten vardır. Döngülerden sonra hiçbir şeyin player'ı yeniden ayarlamadığından emin ol; yoksa sonraki satır geçerli olur.
Görev
KolayHaritada artık bir P var. Başlangıç kodu oyuncuyu sabit bir (40, 40) konumuna yerleştiriyor.
- Harita döngülerinde,
Piçinplayer = pygame.Rect(col * TILE + 4, row * TILE + 4, 28, 28)yaz. - Oyuncuyu
(40, 40)konumuna yerleştiren satırı kaldır.
Kendin dene
import pygame
TILE = 36
WALL = (120, 90, 60)
COIN = (255, 196, 0)
PLAYER = (80, 200, 120)
LEVEL = [
"################",
"#..............#",
"#.C..####...C..#",
"#..............#",
"#....C....##...#",
"#..##.....##.C.#",
"#..##..P.......#",
"#.C.......###..#",
"#..............#",
"####..####..####",
]
pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Map from Text")
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))
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 wall in walls:
pygame.draw.rect(screen, WALL, wall)
for coin in coins:
pygame.draw.rect(screen, COIN, coin)
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