صفوف وأعمدة
جزء من قسم العوالم في رحلة 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()
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس العوالم
تدرّب بنفسك: Playground لـ Pygame