Pelataran
Pelajaran 1 dari 20 dalam kursus Proyek Pygame: Pertahankan Benteng di Coddy.
Dalam kursus ini, kamu membuat satu game utuh, satu fitur dalam setiap pelajaran. Seorang ksatria berdiri di halaman kastel pada malam hari. Monster berdatangan melewati tembok, semakin lama semakin banyak, dan senjata ksatria menembak sendiri. Kamu hanya perlu bergerak. Bertahanlah sampai fajar dan benteng pun selamat.
Game ini dimulai dengan halaman: kisi ubin berukuran 48 piksel, 15 ubin mendatar dan 10 ubin menurun, lantai di bagian dalam dan tembok di sekeliling tepinya. Kamu bisa menggambar 150 ubin setiap frame, tetapi ubin-ubin itu tidak pernah berubah. Gambar ubin-ubin itu sekali saja ke Surface seukuran jendela, lalu tampilkan satu gambar itu di layar pada setiap frame:
background = pygame.Surface((WIDTH, HEIGHT))
for row in range(HEIGHT // TILE):
for col in range(WIDTH // TILE):
x = col * TILE
y = row * TILE
background.blit(floor_img, (x, y))courtyard adalah Rect di dalam tembok. courtyard.collidepoint(x, y) bernilai True ketika titik (x, y), dalam kasus ini sudut kiri atas sebuah ubin, berada di dalamnya.
Tantangan
Mudah- Di bawah
# build the courtyard here, lakukan perulangan untuk setiap baris dan kolom ubin. - Gambar
floor_imgkebackgroundsaatcourtyard.collidepoint(x, y)bernilai True, dan gambarwall_imgdi semua tempat lainnya. - Di dalam game loop, ganti
screen.fill((20, 20, 30))denganscreen.blit(background, (0, 0)).
Coba sendiri
import pygame
WIDTH, HEIGHT = 720, 480
TILE = 48
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Hold the Keep")
clock = pygame.time.Clock()
def load(name):
return pygame.image.load("assets/images/" + name).convert_alpha()
floor_img = load("floor.png")
wall_img = load("wall.png")
courtyard = pygame.Rect(TILE, TILE, WIDTH - 2 * TILE, HEIGHT - 2 * TILE)
background = pygame.Surface((WIDTH, HEIGHT))
# bangun halaman kastel di sini
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((20, 20, 30))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Semua pelajaran di Proyek Pygame: Pertahankan Benteng
Latihan sendiri: Playground Pygame