قائمة من الكائنات
جزء من قسم الكائنات والصور في رحلة Pygame على Coddy. الدرس 13 من 36.
نجمتان مسمّاتان لا تصنعان سماءً. أربعون نجمة تحتاج إلى قائمة: أنشئ الكائنات داخل حلقة وأضف كلًّا منها إلى القائمة.
stars = []
for i in range(40):
x = random.randint(0, 639)
y = random.randint(0, 479)
speed = random.randint(1, 3)
stars.append(Star(x, y, speed))بعد ذلك، تحدّث حلقة واحدة جميع النجوم، وترسمها حلقة أخرى:
for star in stars:
star.update()داخل for، يشير star في كل مرة إلى كائن مختلف، لذا فإن star.update() يحرّك تلك النجمة بسرعتها الخاصة. إضافة مئة نجمة أخرى لا تتطلب سوى تغيير رقم واحد؛ ويظلّ رمز التحديث والرسم كما هو.
أنشئ القائمة مرة واحدة قبل حلقة اللعبة. القائمة التي تُنشأ داخل الحلقة تكون قائمة جديدة من نجوم جديدة في كل إطار، وتعود جميعها إلى مواضع البداية، لذلك لا يتحرك أي شيء أبدًا.
التحدي
متوسط- أضف
import randomفي الأعلى. - قبل الحلقة، أنشئ
stars: قائمةً تضم 40 كائنًا من Star، لكل منها قيمة x عشوائية من 0 إلى 639، وقيمة y عشوائية من 0 إلى 479، وسرعة عشوائية من 1 إلى 3. - في الحلقة، حدّث كل نجمة في
stars، وارسم كل نجمة بعد التعبئة. أزلslowوfast.
جرّب بنفسك
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Falling Stars")
clock = pygame.time.Clock()
class Star:
def __init__(self, x, y, speed):
self.x = x
self.y = y
self.speed = speed
def update(self):
self.y += self.speed
if self.y > 480:
self.y = 0
def draw(self, screen):
pygame.draw.circle(screen, (255, 255, 255), (self.x, self.y), 4)
slow = Star(200, 0, 1)
fast = Star(440, 0, 3)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
slow.update()
fast.update()
screen.fill((20, 22, 40))
slow.draw(screen)
fast.draw(screen)
pygame.display.flip()
clock.tick(60)
pygame.quit()
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الكائنات والصور
4الكائنات الرسومية والمجموعات
صنف Spriteالمجموعاتالإزالة باستخدام kill()الالتقاط باستخدام spritecollideمجموعة ضد مجموعة2دوّر واقلب وغيّر الحجم
التدوير حول المركزوجّهها في اتجاه الطيرانغيّر حجم الصورةدوّر انطلاقًا من الصورة الأصلية5تصادمات مثالية على مستوى البكسل
المستطيلات تبدو غير منصفةالأقنعةكائنات Sprite مثالية على مستوى البكسلمناطق التصادم الدائرية6التحريك باستخدام أوراق الرسوم المتحركة
قصّ ورقة الرسوم المتحركةعداد الإطاراتالتحريك باستخدام الوقتانفجار لمرة واحدةتدرّب بنفسك: Playground لـ Pygame