Şövalye
Coddy'nin Pygame Projesi: Kale Avlusunu Savun kursunda ders 2 / 20.
Şövalye bir sprite'tır: görselini self.image içinde, konumunu ise self.rect içinde tutan, pygame.sprite.Sprite tabanlı bir sınıftır.
class Knight(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = knight_img
self.rect = pygame.Rect(0, 0, 24, 24)
self.rect.center = courtyard.centerGörsel 48 piksel kare boyutundadır, ancak Rect yalnızca 24 boyutundadır. Canavarların çarpışacağı şey Rect olduğundan, canavarın etrafındaki boş alanın bir köşesine değil, şövalyenin bedenine ulaşması gerekir. Küçük bir çarpışma kutusu oyuncuya adil gelir.
Görsel ile Rect farklı boyutlarda olduğundan, görseli Rect'in merkezine ortalayarak çiz. image.get_rect(center=point), bir noktanın merkezine ortalanmış, görsel boyutlarında bir Rect verir ve blit bunu çizim konumu olarak kabul eder:
def draw(image, center):
screen.blit(image, image.get_rect(center=center))Görev
Kolay- Şövalyenin resmini yükle:
knight_img = load("knight.png"). - Yukarıdaki
Knightsınıfını yaz: resim olarakknight_img,courtyard.centerüzerinde ortalanmış 24'e 24 boyutunda birrect. draw(image, center)işlevini yaz.- Döngüden önce
knight = Knight()oluştur ve arka planı çizdikten sonradraw(knight.image, knight.rect.center)ile şövalyeyi çiz.
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))
for row in range(HEIGHT // TILE):
for col in range(WIDTH // TILE):
x = col * TILE
y = row * TILE
if courtyard.collidepoint(x, y):
background.blit(floor_img, (x, y))
else:
background.blit(wall_img, (x, y))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.blit(background, (0, 0))
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