حلقة داخل حلقة
جزء من قسم 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 مسافات من الحلقة الخارجية.
التحدي
متوسطأضئ المبنى بأكمله:
- أحط حلقة النوافذ بـ
for row in range(4):. - عيّن
y = 210 + row * 60، بحيث تقع الصفوف عند y 210 و270 و330 و390. - ستحصل على 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 في نافذة لعبة
4حلقات ترسم
التكرار باستخدام Forالبداية والنهاية والخطوةاستخدام متغير الحلقةحلقة داخل حلقةالعد باستخدام Whileتدرّب بنفسك: Playground لـ Pygame