Tempat Pemain Memulai
Termasuk bagian Dunia Game dalam perjalanan Pygame di Coddy. Pelajaran 4 dari 35.
Sebuah level menentukan tempat player mulai, jadi tambahkan juga satu P ke dalam peta. Saat perulangan membaca peta, tile P menentukan posisi awal player.
elif char == "P":
player = pygame.Rect(col * TILE + 4, row * TILE + 4, 28, 28)Player berbentuk persegi dengan sisi 28 piksel, jadi posisinya dimulai 4 piksel dari sudut tile, tepat di tengah tile, dengan perhitungan (36 - 28) / 2 = 4. Sekarang, memindahkan P di teks akan mengubah titik mulai, jadi kamu tidak perlu menghitung angka.
Perulangan ini berjalan sebelum game loop, jadi player sudah tersedia saat game loop menggerakkannya. Pastikan tidak ada kode setelah perulangan yang mengatur ulang player, atau nilai dari baris berikutnya akan menggantikannya.
Tantangan
MudahSekarang peta memiliki P. Kode awal menempatkan pemain di (40, 40) yang tetap.
- Di dalam perulangan peta, untuk
P, buatplayer = pygame.Rect(col * TILE + 4, row * TILE + 4, 28, 28). - Hapus baris yang menempatkan pemain di
(40, 40).
Coba sendiri
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()
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Dunia Game
1Peta dari Teks
Level dalam TeksBaris dan KolomHuruf yang Memiliki MaknaTempat Pemain MemulaiSatu Layar Setiap KaliLatihan sendiri: Playground Pygame