הליכה
שיעור 3 מתוך 20 בקורס פרויקט Pygame: להגן על המצודה של Coddy.
pygame.key.get_pressed() מציינת אילו מקשים לחוצים כרגע. קראו לה בכל פריים, והאביר ילך כל עוד מקש חץ לחוץ, בלי להמתין לחזרות על הקשות.
תנו לאביר speed ומתודת move, כדי שהכללים של אופן הליכתו יהיו חלק מהאביר:
def move(self, keys):
if keys[pygame.K_LEFT]:
self.rect.x -= self.speed
if keys[pygame.K_RIGHT]:
self.rect.x += self.speed
self.rect.clamp_ip(courtyard)ארבע הוראות if נפרדות, ולא elif: כשהמקשים למעלה ולימינה לחוצים יחד, האביר הולך באלכסון.
clamp_ip מחזירה Rect אל תוך Rect אחר אם הוא יצא ממנו, כך שהאביר נעצר בקירות. המשמעות של _ip היא במקום: היא משנה את self.rect עצמו במקום להחזיר Rect חדש.
אתגר
קל- ב-
Knight.__init__הגדירו אתself.speed = 3. - כתבו
move(self, keys): כל אחד ממקשי החצים מזיז את המלבן ב-self.speed, ולאחר מכן קוראים ל-self.rect.clamp_ip(courtyard). - בלולאת המשחק, לפני הציור, קראו ל-
knight.move(pygame.key.get_pressed()).
נסו בעצמכם
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")
knight_img = load("knight.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))
def draw(image, center):
screen.blit(image, image.get_rect(center=center))
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.center
knight = Knight()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.blit(background, (0, 0))
draw(knight.image, knight.rect.center)
pygame.display.flip()
clock.tick(60)
pygame.quit()
כל השיעורים ביחידה פרויקט Pygame: להגן על המצודה
תרגלו בעצמכם: Pygame אונליין