Menu
CoddyTech

שורות ועמודות

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

לולאה אחת עוברת לאורך שורה. לולאה שנייה שסובבת אותה עוברת מטה לאורך השורות, כך שיחד הן מבקרות בכל אריח במפה. הלולאה החיצונית נותנת כל מחרוזת של LEVEL בתור line, יחד עם מספר השורה שלה; הלולאה הפנימית עוברת על התווים של אותה שורה.

walls = []
for row, line in enumerate(LEVEL):
    for col, char in enumerate(line):
        if char == "#":
            walls.append(pygame.Rect(col * TILE, row * TILE, TILE, TILE))

בנה את הקירות פעם אחת, לפני לולאת המשחק, כרשימה של Rect. המפה אינה משתנה במהלך המשחק, ו-Rect הוא מה שבעזרתו תבדוק התנגשויות בהמשך. בלולאת המשחק, צייר כל קיר:

for wall in walls:
    pygame.draw.rect(screen, WALL, wall)

row מגיעה מהלולאה החיצונית, ולכן היא קובעת את ה-y של האריח; col מהלולאה הפנימית קובעת את ה-x. אם תחליף ביניהן, השלב יתהפך על צדו.

challenge icon

אתגר

בינוני
  1. לפני לולאת המשחק, צור רשימה בשם walls.
  2. עבור על כל שורה ב-LEVEL ועל כל תו בה באמצעות שתי לולאות enumerate. עבור כל #, הוסף את pygame.Rect(col * TILE, row * TILE, TILE, TILE) אל walls.
  3. בלולאת המשחק, צייר כל Rect ב-walls בצבע חום של WALL, במקום לצייר רק את השורה התחתונה.

נסו בעצמכם

import pygame

TILE = 36
WALL = (120, 90, 60)
PLAYER = (80, 200, 120)

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

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

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 col, char in enumerate(LEVEL[9]):
        if char == "#":
            pygame.draw.rect(screen, WALL, (col * TILE, 9 * TILE, TILE, TILE))
    pygame.draw.rect(screen, PLAYER, player)
    pygame.display.flip()
    clock.tick(60)

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

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

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

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