Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah
  1. Di bawah # build the courtyard here, lakukan perulangan untuk setiap baris dan kolom ubin.
  2. Gambar floor_img ke background saat courtyard.collidepoint(x, y) bernilai True, dan gambar wall_img di semua tempat lainnya.
  3. Di dalam game loop, ganti screen.fill((20, 20, 30)) dengan screen.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