Menu
CoddyTech

היכן השחקן מתחיל

חלק מהיחידה עולמות במסלול ה-Pygame של Coddy. שיעור 4 מתוך 35.

רמה קובעת איפה השחקן מתחיל, לכן הוסיפו גם אותו למפה: אחד P. כשהלולאות קוראות את המפה, המשבצת P מציינת את המיקום ההתחלתי של השחקן.

elif char == "P":
    player = pygame.Rect(col * TILE + 4, row * TILE + 4, 28, 28)

השחקן הוא ריבוע בגודל 28 פיקסלים, לכן הוא מתחיל במרחק של (36 - 28) / 2 = 4 פיקסלים מפינת המשבצת, במרכז המשבצת. עכשיו הזזת ה-P בטקסט משנה את נקודת ההתחלה: אין צורך לחשב מספרים.

הלולאה רצה לפני לולאת המשחק, לכן player קיים עד שלולאת המשחק מזיזה אותו. ודאו ששום דבר אחרי הלולאות לא מגדיר שוב את player, אחרת השורה המאוחרת יותר היא שתקבע.

challenge icon

אתגר

קל

במפה יש עכשיו P. קוד ההתחלה מציב את השחקן במיקום קבוע (40, 40).

  1. בלולאות של המפה, עבור P, צרו את player = pygame.Rect(col * TILE + 4, row * TILE + 4, 28, 28).
  2. הסירו את השורה שמציבה את השחקן ב־(40, 40).

נסו בעצמכם

import pygame

TILE = 36
WALL = (120, 90, 60)
COIN = (255, 196, 0)
PLAYER = (80, 200, 120)

LEVEL = [
    "################",
    "#..............#",
    "#.C..####...C..#",
    "#..............#",
    "#....C....##...#",
    "#..##.....##.C.#",
    "#..##..P.......#",
    "#.C.......###..#",
    "#..............#",
    "####..####..####",
]

pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Map from Text")
clock = pygame.time.Clock()

walls = []
coins = []
for row, line in enumerate(LEVEL):
    for col, char in enumerate(line):
        if char == "#":
            walls.append(pygame.Rect(col * TILE, row * TILE, TILE, TILE))
        elif char == "C":
            coins.append(pygame.Rect(col * TILE + 10, row * TILE + 10, 16, 16))
player = pygame.Rect(40, 40, 28, 28)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player.x -= 4
    if keys[pygame.K_RIGHT]:
        player.x += 4
    if keys[pygame.K_UP]:
        player.y -= 4
    if keys[pygame.K_DOWN]:
        player.y += 4

    screen.fill((30, 30, 46))
    for wall in walls:
        pygame.draw.rect(screen, WALL, wall)
    for coin in coins:
        pygame.draw.rect(screen, COIN, coin)
    pygame.draw.rect(screen, PLAYER, player)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה עולמות

תרגלו בעצמכם: Pygame אונליין