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اختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس العوالم

تدرّب بنفسك: Playground لـ Pygame