عرض صورة بواسطة (PyGame) - كتاب المهارات الرقمية - الصف 9 - الفصل 1 - المملكة العربية السعودية

الكتاب: كتاب المهارات الرقمية - الصف 9 - الفصل 1 | المادة: المهارات الرقمية | المرحلة: الصف 9 | الفصل الدراسي: 1

الدولة: المملكة العربية السعودية | المنهج: المنهج السعودي - وزارة التعليم

الدرس: عرض صورة بواسطة (PyGame)

📚 معلومات الصفحة

الكتاب: كتاب المهارات الرقمية - الصف 9 - الفصل 1 | المادة: المهارات الرقمية | المرحلة: الصف 9 | الفصل الدراسي: 1

الدولة: المملكة العربية السعودية | المنهج: المنهج السعودي - وزارة التعليم

نوع المحتوى: درس تعليمي

📝 ملخص الصفحة

📚 عرض الصور والتحديث في PyGame

المفاهيم الأساسية

التخزين المؤقت المزدوج (Double Buffering): ميزة في PyGame لا تظهر التغييرات على الشاشة فورًا، بل تتيح إجراء الكثير من التغييرات ثم إظهارها جميعًا كإطار واحد. هذا يمنع وميض الشاشة المزعج أثناء الحركة السريعة.

خريطة المفاهيم

```markmap

المكتبات والنماذج البرمجية في بايثون

مفهوم النموذج البرمجي

تعريف

  • حزمة ملفات تحتوي مقاطع برمجية
  • امتدادها .py
  • يتم استيرادها لتنفيذ وظائف

مصادر النماذج

المكتبة القياسية (Standard library)

#### تعريف

  • تُثبَّت تلقائياً مع بايثون
  • جزء أساسي من اللغة
  • تحتوي على أكثر من 200 نموذج برمجي
#### طرق الاستيراد

##### 1. استيراد الكل

  • الأمر: `from module_name import *`
##### 2. استيراد دوال من نموذج برمجي

  • الأمر: `from module_name import function_a, function_b, function_c`
##### 3. استيراد النماذج البرمجية

  • الأمر: `import module_name`
##### أمثلة على نماذجها

###### math

  • الهدف: الوصول إلى دوال وثوابت رياضية شائعة
  • طريقة الاستيراد: `import math`
  • أمثلة على استخدامه:
- الدوال الأكبتان (التقريب)

- `math.ceil(x)`: تقريب الرقم `x` إلى أقرب عدد صحيح أكبر (السقف).

- مثال: `math.ceil(10.1657)` ← 11

- `math.floor(x)`: تقريب الرقم `x` إلى أقرب عدد صحيح أصغر (الأرضية).

- مثال: `math.floor(10.1657)` ← 10

- مثال مع الأرقام السالبة: `math.floor(-10.1657)` ← -11

###### tkinter

  • الهدف: إنشاء واجهات رسومية (GUI).
  • طريقة الاستيراد: `from tkinter import *` (حالة نموذجية لاستيراد الكل بسبب كثرة الدوال المستخدمة).
  • خطوات إنشاء نافذة أساسية:
1. `window = Tk()`: إنشاء كائن النافذة.

2. `window.title("عنوان")`: تحديد عنوان النافذة.

3. `window.geometry("عرضxارتفاع")`: تحديد حجم النافذة.

4. `window.mainloop()`: إبقاء النافذة مفتوحة.

###### time

  • الهدف: توفير دوال للعمل مع الأوقات.
  • طريقة الاستيراد: `import time`
  • أمثلة على استخدامه:
- معرفة الوقت بالساعة والدقيقة (تنسيق 24 ساعة) واليوم من الأسبوع وما إذا كان صباحًا أم مساءً.

- الأمر: `print(time.strftime("%H:%M"), time.strftime("%A %p"))`

- مثال على المخرجات: `10:49 Wednesday AM`

###### datetime

  • الهدف: التعامل مع التواريخ والوقت بكثرة في البرامج المختلفة.
  • طريقة الاستيراد: `import datetime`
  • أمثلة على استخدامه:
- معرفة تاريخ اليوم.

- الأمر: `print(datetime.date.today())`

- مثال على المخرجات: `2023-11-15`

- يمكن استخراج السنة والشهر واليوم من التاريخ.

- استخدام سمة (Attribute) الدالة:

- الصيغة العامة: `module_name.function_name().attribute_name`

- مثال لاستخراج اليوم: `datetime.date.today().day`

- مثال لاستخراج الشهر: `datetime.date.today().month`

- مثال لاستخراج السنة: `datetime.date.today().year`

- حساب الأيام المتبقية لحدث (مثال: يوم التأسيس):

1. استيراد `date` من `datetime`.

2. الحصول على تاريخ اليوم: `today = date.today()`.

3. تحديد تاريخ الحدث: `foundationDay = date(today.year, 2, 22)`.

4. التحقق إذا مضى الحدث هذا العام باستخدام `date.replace()`:

- `if foundationDay < today: foundationDay = foundationDay.replace(year=today.year + 1)`

5. حساب الفرق بالأيام: `time_to_foundationDay = foundationDay - today`.

6. طباعة النتيجة: `print("Days left:", time_to_foundationDay.days)`.

###### pygame

  • الهدف: استخدام النموذج لإنشاء أشكال هندسية على الشاشة.
  • خطوات التثبيت في PyCharm:
1. الضغط على Packages (الحزم).

2. كتابة باي جايم (pygame) في شريط البحث.

3. اختيار pygame والضغط على Install (تثبيت).

4. ظهور رسالة تؤكد اكتمال التثبيت.

  • خطوات إنشاء شاشة:
- `import pygame`: استيراد جميع الدوال المنتمية لهذا النموذج البرمجي.

- `pygame.init()`: تهيئة جميع دوال pygame التي يتم استدعاؤها.

- `screen = pygame.display.set_mode((x,y))`: فتح نافذة بالحجم (x,y) وحفظها في متغير اسمه (screen).

- `colorName = (r,g,b)`: تعريف متغير اللون في نظام (RGB).

- `screen.fill(colorName)`: تعبئة الشاشة باللون المحدد.

- `pygame.display.update()`: عرض جميع الرسومات الخاصة بك منذ آخر استدعاء.

  • دوال الرسم:
- رسم مستطيل:

- الدالة: `pygame.draw.rect()`

- مثال: `pygame.draw.rect(screen, red, pygame.Rect(30, 30, 60, 60))`

- رسم خطوط:

- الدالة: `pygame.draw.lines()`

- مثال: `pygame.draw.lines(screen, pink, False, [(i,10), (250,350)], 1)`

- معاملات الدالة:

- `screen`: الشاشة المرسوم عليها.

- `pink`: لون الخط.

- `False`: عدم إغلاق الشكل (عدم توصيل نقطة النهاية بالبداية).

- `[(i,10), (250,350)]`: قائمة بنقاط البداية والنهاية للخط.

- `1`: سمك الخط.

- إبقاء النافذة مفتوحة:

- استخدام دالة `time.sleep(5)` من نموذج `time` لإبقاء النافذة مفتوحة لمدة 5 ثوانٍ قبل إغلاقها بـ `pygame.quit()`.

  • عرض الصور والتحديث
- إنشاء نافذة جديدة:

- الأمر: `window=pygame.display.set_mode((1200,800))`

- الأرقام (1200,800) تمثل العرض والارتفاع.

- تحميل وعرض الصور:

- `background=pygame.image.load("file name").convert()`: تحميل صورة جديدة من ملف.

- `window.blit(background, (x,y))`: وضع صورة داخل صورة أخرى.

- تحديث الشاشة:

- `pygame.display.update()`: تحديث الشاشة لعرض الرسومات.

- تستخدم ميزة التخزين المؤقت المزدوج لمنع وميض الشاشة.

مميزات إنشاء المقطع البرمجي الخاص

  • يلائم احتياجاتك الحقيقية
  • التحكم الكامل والقدرة على التصحيح والتغيير الفوري
  • أكثر موثوقية (معلومات التوثيق في النماذج الخارجية قد تكون غير كافية أو غير صحيحة)
  • تجنب مشكلة توقف التحديثات إذا توقف المطور الأصلي
  • تجنب التكلفة العالية أو القيود على ترخيص النماذج الخارجية

مدير حزم بايثون (PIP)

دوره

  • تثبيت حزم غير متوفرة في المكتبة القياسية

فهرس حزمة بايثون (PyPI)

  • مستودع برامج خاص ببايثون
  • موقع افتراضي للبحث عن الحزم
  • يستضيف الحزم التي يساهم بها المجتمع

طريقة التثبيت

  • الأمر: `install`
  • مثال: تثبيت حزمة `pygame` (مكتبة مفتوحة المصدر لإنشاء تطبيقات الوسائط المتعددة والألعاب)

الحزمة

  • تحتوي على جميع الملفات المطلوبة في النموذج البرمجي
```

نقاط مهمة

  • دالة `pygame.display.update()` تستخدم ميزة التخزين المؤقت المزدوج لمنع وميض الشاشة أثناء الحركة السريعة.
  • لإنشاء نافذة جديدة في PyGame، استخدم `pygame.display.set_mode((العرض, الارتفاع))`.
  • لتحميل صورة خلفية، استخدم `pygame.image.load("اسم الملف").convert()`.
  • لوضع صورة داخل النافذة، استخدم `window.blit(الصورة, (x,y))` حيث (x,y) هي إحداثيات وضع الصورة.

📋 المحتوى المنظم

📖 محتوى تعليمي مفصّل

نوع: محتوى تعليمي

لا تظهر التغييرات التي تجريها على الشاشة فورًا، فدالة pygame.display.update() تطبق ميزة تسمى التخزين المؤقت المزدوج (double buffering)، وهي إحدى مميزات باي جايم التي تتيح لك إجراء الكثير من التغييرات على الشاشة ثم إظهارها جميعًا كإطار واحد، أما إذا كان هناك حركة سريعة فإن الشاشة "ستومض" وسيكون ذلك مزعجًا.

عرض صورة بواسطة (PyGame)

نوع: محتوى تعليمي

يمكنك باستخدام بايثون تحميل وعرض الصور في تطبيقنا البيئة بك، وتوجد هناك مجموعة متنوعة من الطرق لعرض الصور الرسومية حسب الغرض من المشروع. ستستخدم نموذج PyGame البرمجي في هذا المشروع. يجب أن تستخدم الأوامر الآتية لإنشاء نافذة جديدة:

نوع: محتوى تعليمي

import pygame import time pygame.init() # أنشئ النافذة window=pygame.display.set_mode((1200,800))

نوع: محتوى تعليمي

لتحميل الخلفية في النافذة يجب أن تضيف الأوامر الآتية إلى المقطع البرمجي:

نوع: محتوى تعليمي

نوع: METADATA

167

🔍 عناصر مرئية

pygame window

A window titled 'pygame window' displaying a pattern of converging lines, starting wide at the top and narrowing towards a point at the bottom. The lines are thin and white, against a dark blue background. The overall effect is like a fan or a perspective drawing.

A blue speech bubble containing the Arabic text 'العرض والارتفاع' (Width and Height). An arrow originates from this bubble and points towards the code line 'window=pygame.display.set_mode((1200,800))'.

📄 النص الكامل للصفحة

لا تظهر التغييرات التي تجريها على الشاشة فورًا، فدالة pygame.display.update() تطبق ميزة تسمى التخزين المؤقت المزدوج (double buffering)، وهي إحدى مميزات باي جايم التي تتيح لك إجراء الكثير من التغييرات على الشاشة ثم إظهارها جميعًا كإطار واحد، أما إذا كان هناك حركة سريعة فإن الشاشة "ستومض" وسيكون ذلك مزعجًا. --- SECTION: عرض صورة بواسطة (PyGame) --- يمكنك باستخدام بايثون تحميل وعرض الصور في تطبيقنا البيئة بك، وتوجد هناك مجموعة متنوعة من الطرق لعرض الصور الرسومية حسب الغرض من المشروع. ستستخدم نموذج PyGame البرمجي في هذا المشروع. يجب أن تستخدم الأوامر الآتية لإنشاء نافذة جديدة: import pygame import time pygame.init() # أنشئ النافذة window=pygame.display.set_mode((1200,800)) لتحميل الخلفية في النافذة يجب أن تضيف الأوامر الآتية إلى المقطع البرمجي: 167 --- VISUAL CONTEXT --- **FIGURE**: pygame window Description: A window titled 'pygame window' displaying a pattern of converging lines, starting wide at the top and narrowing towards a point at the bottom. The lines are thin and white, against a dark blue background. The overall effect is like a fan or a perspective drawing. Context: Illustrates the visual output of Pygame, likely related to drawing or display updates. **DIAGRAM**: Untitled Description: A blue speech bubble containing the Arabic text 'العرض والارتفاع' (Width and Height). An arrow originates from this bubble and points towards the code line 'window=pygame.display.set_mode((1200,800))'. Context: Explains that the numbers (1200, 800) in the set_mode function represent the width and height of the Pygame window.

🎴 بطاقات تعليمية للمراجعة

عدد البطاقات: 3 بطاقة لهذه الصفحة

ما الغرض من استخدام دالة `pygame.display.update()` في مكتبة PyGame؟

  • أ) إنشاء نافذة جديدة بأبعاد محددة للعرض.
  • ب) تحميل صورة خلفية في النافذة.
  • ج) تطبيق التخزين المؤقت المزدوج لعرض جميع التغييرات على الشاشة كإطار واحد، مما يمنع وميض الشاشة.
  • د) إغلاق النافذة وإنهاء تطبيق PyGame.

الإجابة الصحيحة: c

الإجابة: تطبيق التخزين المؤقت المزدوج لعرض جميع التغييرات على الشاشة كإطار واحد، مما يمنع وميض الشاشة.

الشرح: 1. تستخدم PyGame تقنية التخزين المؤقت المزدوج (double buffering). 2. تسمح هذه التقنية بإجراء جميع التغييرات على الشاشة في الخلفية أولاً. 3. ثم يتم عرضها دفعة واحدة كإطار واحد عند استدعاء `pygame.display.update()`. 4. هذا يمنع وميض الشاشة (flickering) خاصة عند الحركة السريعة.

تلميح: تتعلق هذه الميزة بكيفية عرض التغييرات على الشاشة وليس بإنشاء النافذة.

التصنيف: مفهوم جوهري | المستوى: متوسط

ما الوظيفة الأساسية لتقنية التخزين المؤقت المزدوج (double buffering) في PyGame؟

  • أ) زيادة سرعة تنفيذ الكود البرمجي.
  • ب) تقليل استهلاك ذاكرة الكمبيوتر.
  • ج) منع وميض الشاشة (flickering) عند عرض الحركة السريعة.
  • د) تمكين استخدام الصور ذات الدقة العالية.

الإجابة الصحيحة: c

الإجابة: منع وميض الشاشة (flickering) عند عرض الحركة السريعة.

الشرح: 1. تقنية التخزين المؤقت المزدوج تعني وجود مخزنين (buffers) للشاشة. 2. يتم الرسم على المخزن الخلفي (back buffer) بينما يعرض المخزن الأمامي (front buffer) الإطار الحالي. 3. عند اكتمال الرسم، يتم تبديل المخازن لعرض الإطار الجديد دفعة واحدة. 4. هذا التبديل الفوري يمنع ظهور ومضات أو تشويه أثناء تحديث الشاشة، خاصة في الحركات السريعة.

تلميح: المشكلة التي تحلها هذه التقنية مرتبطة بالإزعاج البصري.

التصنيف: مفهوم جوهري | المستوى: متوسط

ما الذي تمثله القيمتان (1200, 800) في الأمر `pygame.display.set_mode((1200,800))`؟

  • أ) موقع النافذة على الشاشة من أعلى اليسار.
  • ب) عرض وارتفاع النافذة بالبكسل.
  • ج) عدد الألوان ودقة الصورة.
  • د) سرعة تحديث الشاشة (refresh rate).

الإجابة الصحيحة: b

الإجابة: عرض وارتفاع النافذة بالبكسل.

الشرح: 1. الدالة `pygame.display.set_mode()` تستخدم لإنشاء نافذة العرض. 2. تأخذ الدالة وسيطاً واحداً على شكل tuple (مجموعة). 3. القيمة الأولى في الـ tuple (1200) تمثل عرض النافذة (width) بالبكسل. 4. القيمة الثانية في الـ tuple (800) تمثل ارتفاع النافذة (height) بالبكسل.

تلميح: تتعلق هذه القيم بحجم النافذة التي ستظهر على الشاشة.

التصنيف: تعريف | المستوى: سهل