Menu
CoddyTech

حلقة داخل حلقة

جزء من قسم Python في نافذة لعبة في رحلة Pygame على Coddy. الدرس 18 من 32.

يمكن أن يحتوي جسم الحلقة على حلقة أخرى. وتُنفّذ الحلقة الداخلية دورة كاملة في كل مرة تمرّ فيها الحلقة الخارجية:

for row in range(4):
    for col in range(8):
        x = 130 + col * 50
        y = 210 + row * 60
        pygame.draw.rect(screen, (255, 210, 90), (x, y, 20, 20))

عندما تكون قيمة row هي 0، ترسم الحلقة الداخلية 8 نوافذ على امتداد الصف العلوي. ثم تصبح قيمة row هي 1، وترسم الحلقة الداخلية 8 نوافذ أخرى على ارتفاع أقل بمقدار 60 بكسل. أربعة صفوف، في كل منها ثماني نوافذ، تُكوّن 32 نافذة. يكون للشبكة دائمًا هذا الشكل: حلقة للصفوف وأخرى للأعمدة.

ترسم pygame.draw.rect(screen, colour, (x, y, width, height)) مستطيلًا ممتلئًا، زاويته العلوية اليسرى عند (x, y).

انتبه إلى المسافات البادئة: تكون for الداخلية مزاحة إلى الداخل تحت الحلقة الخارجية، ويكون جسمها مزاحًا إلى الداخل مرة أخرى، بمقدار 8 مسافات من الحلقة الخارجية.

challenge icon

التحدي

متوسط

أضئ المبنى بأكمله:

  1. أحط حلقة النوافذ بـ for row in range(4):.
  2. عيّن y = 210 + row * 60، بحيث تقع الصفوف عند y 210 و270 و330 و390.
  3. ستحصل على 32 نافذة: 4 صفوف، في كل منها 8 نوافذ.

جرّب بنفسك

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Night Sky")
clock = pygame.time.Clock()

# جهّز العناصر هنا، قبل حلقة اللعبة.

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

    # غيّر العناصر هنا، مرةً واحدةً لكل إطار.

    screen.fill((20, 24, 48))
    # ارسم هنا، بعد ملء الشاشة.
    pygame.draw.rect(screen, (40, 44, 70), (100, 180, 440, 300))
    for col in range(8):
        x = 130 + col * 50
        y = 210
        pygame.draw.rect(screen, (255, 210, 90), (x, y, 20, 20))

    pygame.display.flip()
    clock.tick(60)

pygame.quit()

جميع دروس Python في نافذة لعبة

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