Menu
CoddyTech

Avlu

Coddy'nin Pygame Projesi: Kale Avlusunu Savun kursunda ders 1 / 20.

Bu kursta her derste bir özellik ekleyerek baştan sona tek bir oyun oluşturacaksın. Bir şövalye, gece vakti bir kale avlusunda duruyor. Duvarların üzerinden giderek daha fazla canavar geliyor ve şövalyenin silahları kendiliğinden ateş ediyor. Sen yalnızca hareket ediyorsun. Şafak sökene kadar dayan ve kale kurtulsun.

Oyun avluyla başlıyor: 48 piksellik karolardan oluşan, yatayda 15 ve dikeyde 10 karo genişliğinde bir ızgara; içeride zemin, kenarlarında duvar var. Her karede 150 karoyu çizebilirsin ama bunlar hiç değişmiyor. Bunları pencere boyutlarında bir Surface üzerine bir kez çiz, sonra her karede bu resmi ekrana koy:

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, duvarların içindeki Rect'tir. courtyard.collidepoint(x, y), nokta (x, y) — burada bir karonun sol üst köşesi — bu alanın içindeyse True değerini verir.

challenge icon

Görev

Kolay
  1. # build the courtyard here satırının altında, karo satırlarının ve sütunlarının her biri üzerinde döngü kur.
  2. courtyard.collidepoint(x, y) True olduğunda floor_img öğesini background üzerine, diğer tüm yerlerde ise wall_img öğesini çiz.
  3. Oyun döngüsünde screen.fill((20, 20, 30)) ifadesini screen.blit(background, (0, 0)) ile değiştir.

Kendin dene

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))
# avluyu burada oluştur


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()

Pygame Projesi: Kale Avlusunu Savun bölümündeki tüm dersler

Kendi başına pratik yap: Pygame playground