المعاملات
جزء من قسم Python في نافذة لعبة في رحلة Pygame على Coddy. الدرس 21 من 32.
الدالة التي ترسم دائمًا عند (320, 240) قليلة الفائدة. تتيح المعاملات للمستدعي الاختيار. سمِّها داخل الأقواس في def واستخدمها في جسم الدالة مثل المتغيرات:
def draw_star(x, y):
pygame.draw.line(screen, (255, 240, 200), (x - 10, y), (x + 10, y), 2)
pygame.draw.line(screen, (255, 240, 200), (x, y - 10), (x, y + 10), 2)
pygame.draw.circle(screen, (255, 240, 200), (x, y), 4)يمرر كل استدعاء قيمًا، هي الوسائط، بالترتيب نفسه: يشغّل draw_star(120, 100) جسم الدالة بقيمة 120 لـ x و100 لـ y. ويشغّله draw_star(520, 90) مرة أخرى بقيم أخرى. تعريف واحد، وعدد النجوم الذي تستدعيه.
لا توجد المعاملات إلا داخل الدالة أثناء تشغيلها. أما خارجها، فلا تعني x وy شيئًا، أو تعنيان ما خزّنته هناك تحت هذين الاسمين.
التحدي
متوسطدع المستدعي يحدد موضع النجمة:
- غيّر التعريف إلى
def draw_star(x, y):وارسم حول (x, y): الخطوط منx - 10إلىx + 10ومنy - 10إلىy + 10، والنقطة عند(x, y). - استدعِ الدالة ثلاث مرات: عند (120, 100)، و(320, 180)، و(520, 90).
جرّب بنفسك
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Night Sky")
clock = pygame.time.Clock()
# جهّز الأشياء هنا، قبل حلقة اللعبة.
def draw_star():
pygame.draw.line(screen, (255, 240, 200), (310, 240), (330, 240), 2)
pygame.draw.line(screen, (255, 240, 200), (320, 230), (320, 250), 2)
pygame.draw.circle(screen, (255, 240, 200), (320, 240), 4)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# غيّر الأشياء هنا، مرة واحدة لكل إطار.
screen.fill((20, 24, 48))
# ارسم هنا، بعد ملء الشاشة.
draw_star()
pygame.display.flip()
clock.tick(60)
pygame.quit()
جميع دروس Python في نافذة لعبة
تدرّب بنفسك: Playground لـ Pygame