שורות ועמודות
חלק מהיחידה עולמות במסלול ה-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. אם תחליף ביניהן, השלב יתהפך על צדו.
אתגר
בינוני- לפני לולאת המשחק, צור רשימה בשם
walls. - עבור על כל שורה ב-
LEVELועל כל תו בה באמצעות שתי לולאותenumerate. עבור כל#, הוסף אתpygame.Rect(col * TILE, row * TILE, TILE, TILE)אלwalls. - בלולאת המשחק, צייר כל 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()
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה עולמות
תרגלו בעצמכם: Pygame אונליין