اذهب إلى المحتوى
  • 0

مكتبة Pygame

Beshoy Ehab3

السؤال

السؤال الأول:

كيف اقوم برسم خطوط شبه شفافه مثال:

شخص يريد أن يرسم خط أحمر و خط ازرق و في تقاطعهما ينشأ اللون البنفسجي

السؤال الثاني:

هل يمكن عمل تطبيق اندرويد بمكتبة Pygame؟ 

السؤال الثالث:

هل هناك مكتبة تساعد في كتابة اللغه العربيه في مكتبة Pygame

تم التعديل في بواسطة Beshoy Ehab Hafez
لزياده الاسئله
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0
بتاريخ 20 ساعات قال Beshoy Ehab Hafez:

يريد أن يرسم خط أحمر و خط ازرق و في تقاطعهما ينشأ اللون البنفسجي

يمكنك أن تتحكم في الشفافية الخاصة بلون أي خط من خلال تمرير قيمة Alpha كعنصر ثالث عند كتابة لون الخط، كالتالي:

import pygame

pygame.init()

# تحديد خصائص النافذة
size = [600, 600]
screen = pygame.display.set_mode(size)
screen.fill((255, 255, 255))

vertical_line = pygame.Surface((100, 600), pygame.SRCALPHA)
vertical_line.fill((0, 0, 255, 50)) # يمكنك أن تقوم بتغير رقم 50 إلى أي رقم بين 0 و 255
screen.blit(vertical_line, (0, 0))

horizontal_line = pygame.Surface((600, 100), pygame.SRCALPHA)
horizontal_line.fill((255, 0, 0, 50)) # يمكنك أن تقوم بتغير رقم 50 إلى أي رقم بين 0 و 255
screen.blit(horizontal_line, (0, 0))

يقوم الكود السابق بعمل خطين أحدهما أحمر والثاني أزرق وعندما يتلاقى الخطين (في أعلى اليسار) ستجد مربع لونه بنفسجي، كما في الصورة:

6127e0516176e_Screenshot2021-08-26204118.thumb.png.5d871238aeb68d22f7b67a0a1550e416.png

أو يمكنك أن تستعمل التابع set_alpha أيضًا للحصول على نفس النتيجة كالتالي:

vertical_line = pygame.Surface((100, 600), pygame.SRCALPHA)
vertical_line.set_alpha(50)  # يمكنك أن تقوم بتغير رقم 50 إلى أي رقم بين 0 و 255
vertical_line.fill((0, 0, 255))
screen.blit(vertical_line, (0, 0))

horizontal_line = pygame.Surface((600, 100), pygame.SRCALPHA)
horizontal_line.set_alpha(50)  # يمكنك أن تقوم بتغير رقم 50 إلى أي رقم بين 0 و 255
horizontal_line.fill((255, 0, 0))
screen.blit(horizontal_line, (0, 0))

الأمثلة السابقة للتوضيح وبالتأكيد سوف تحتاج إلى حلقة لكي لا تغلق النافذة تلقائيًا.

بتاريخ 20 ساعات قال Beshoy Ehab Hafez:

هل يمكن عمل تطبيق اندرويد بمكتبة Pygame؟ 

مكتبة Pygame ليست معدة لعمل تطبيقات أندرويد بل لعمل الألعاب البسيطة على أنظمة التشغيل الخاصة بالحسوب مثل Windows و Linux و MacOS، كما أنه لا ينصح إستعمال لغة Python على العموم في عمل تطبيقات الهاتف، حيث أن هناك تقنيات أخرى أفصل وأسهل ومعدة خصيصًا لهذا الأمر مثل Flutter أو React Native أو حتى إستعمال لغات مثل Java و Swift لعمل تطبيقات أندرويد و iOS ، لكن هذا لا يمنع أنه يمكن إستخدام لغة بايثون لعمل تطبيقات الأندرويد، حيث يمكن إستعمال مكتبات مثل Kivy (التي تدعم شاشات اللمس، وتعدد الأصابع على الشاشة) لعمل تطبيقات أندرويد.

بتاريخ 20 ساعات قال Beshoy Ehab Hafez:

هل هناك مكتبة تساعد في كتابة اللغه العربيه في مكتبة Pygame

نعم، يمكنك أن تستعمل مكتبات مثل arabic-reshaper للكتابة باللغة العربية في نافذة Pygame، أولًا يجب أن تقوم بتثبيت المكتبة عبر الأمر التالي:

pip install --upgrade arabic-reshaper

وإن كنت تستعمل anaconda فيمكنك أن تستعمل الأمر:
 

conda install -c mpcabd arabic-reshaper

بعد تثبيت المكتبة يجب أن تقوم بتثبيت حزمة python-bidi أيضًا من خلال الأمر التالي:

pip install python-bidi

وأخيرًا ستحتاج إلى خط يدعم العربية مثل خط Cairo ويمكنك تحميله من خلال خطوط جوجل من هنا، وفي النهاية يجب أن تقوم بتمرير النص إلى التابع reshape من مكتبة arabic-reshaper ثم يجب تمرير النتيجة إلى الدالة get_display من حزمة python-bidi وأخيرًا تستطيع عرض النص في النافذة:

import pygame
import arabic_reshaper
from bidi.algorithm import get_display

pygame.display.init()
pygame.font.init()

win = pygame.display.set_mode((500, 500))
font = pygame.font.Font('Cairo-Regular.ttf', 20)	# اسم ومسار الخط وحجم الخط

# هنا النص الذي ترغب بعرضه
text_to_be_reshaped = 'نص باللغة العربية'

# عملية تحويل النص
reshaped_text = arabic_reshaper.reshape(text_to_be_reshaped)
bidi_text = get_display(reshaped_text)
print(reshaped_text)

text = font.render(bidi_text, True, (255, 255, 255))



win.fill((0, 0, 0))
win.blit(text, (0, 0))

النتيجة:

6127e3d7ac20c_Screenshot2021-08-26205627.png.79754d53fe56bfc84f8063b41151b75c.png

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 19 ساعات قال سامح أشرف:
بتاريخ On 26‏/8‏/2021 at 00:41 قال Beshoy Ehab Hafez:

يريد أن يرسم خط أحمر و خط ازرق و في تقاطعهما ينشأ اللون البنفسجي

يمكنك أن تتحكم في الشفافية الخاصة بلون أي خط من خلال تمرير قيمة Alpha كعنصر ثالث عند كتابة لون الخط، كالتالي:


import pygame

pygame.init()

# تحديد خصائص النافذة
size = [600, 600]
screen = pygame.display.set_mode(size)
screen.fill((255, 255, 255))

vertical_line = pygame.Surface((100, 600), pygame.SRCALPHA)
vertical_line.fill((0, 0, 255, 50)) # يمكنك أن تقوم بتغير رقم 50 إلى أي رقم بين 0 و 255
screen.blit(vertical_line, (0, 0))

horizontal_line = pygame.Surface((600, 100), pygame.SRCALPHA)
horizontal_line.fill((255, 0, 0, 50)) # يمكنك أن تقوم بتغير رقم 50 إلى أي رقم بين 0 و 255
screen.blit(horizontal_line, (0, 0))

يقوم الكود السابق بعمل خطين أحدهما أحمر والثاني أزرق وعندما يتلاقى الخطين (في أعلى اليسار) ستجد مربع لونه بنفسجي، كما في الصورة:

6127e0516176e_Screenshot2021-08-26204118.thumb.png.5d871238aeb68d22f7b67a0a1550e416.png

أو يمكنك أن تستعمل التابع set_alpha أيضًا للحصول على نفس النتيجة كالتالي:


vertical_line = pygame.Surface((100, 600), pygame.SRCALPHA)
vertical_line.set_alpha(50)  # يمكنك أن تقوم بتغير رقم 50 إلى أي رقم بين 0 و 255
vertical_line.fill((0, 0, 255))
screen.blit(vertical_line, (0, 0))

horizontal_line = pygame.Surface((600, 100), pygame.SRCALPHA)
horizontal_line.set_alpha(50)  # يمكنك أن تقوم بتغير رقم 50 إلى أي رقم بين 0 و 255
horizontal_line.fill((255, 0, 0))
screen.blit(horizontal_line, (0, 0))

الأمثلة السابقة للتوضيح وبالتأكيد سوف تحتاج إلى حلقة لكي لا تغلق النافذة تلقائيًا.

اذا اردت ان افعل نفس الشئ بالنسبه لدائرة او مثلث ماذا أفعل؟ 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 3 ساعات قال Beshoy Ehab Hafez:

اذا اردت ان افعل نفس الشئ بالنسبه لدائرة او مثلث ماذا أفعل؟ 

يمكنك أن تستخدم نفس الطريقة من خلال تمرير معامل ثالث إلى اللون، كالتالي:

import pygame

def draw_rect_alpha(surface, color, rect):
    shape_surf = pygame.Surface(pygame.Rect(rect).size, pygame.SRCALPHA)
    pygame.draw.rect(shape_surf, color, shape_surf.get_rect())
    surface.blit(shape_surf, rect)

def draw_circle_alpha(surface, color, center, radius):
    target_rect = pygame.Rect(center, (0, 0)).inflate((radius * 2, radius * 2))
    shape_surf = pygame.Surface(target_rect.size, pygame.SRCALPHA)
    pygame.draw.circle(shape_surf, color, (radius, radius), radius)
    surface.blit(shape_surf, target_rect)

def draw_polygon_alpha(surface, color, points):
    lx, ly = zip(*points)
    min_x, min_y, max_x, max_y = min(lx), min(ly), max(lx), max(ly)
    target_rect = pygame.Rect(min_x, min_y, max_x - min_x, max_y - min_y)
    shape_surf = pygame.Surface(target_rect.size, pygame.SRCALPHA)
    pygame.draw.polygon(shape_surf, color, [(x - min_x, y - min_y) for x, y in points])
    surface.blit(shape_surf, target_rect)

pygame.init()
window = pygame.display.set_mode((250, 250))
window.fill((255, 255, 255))

# نقوم بتحديد الألوان هنا
# يمكنك تغير رقم 127 لكي تغير الشفافية
YELLOW = (255, 255, 0, 127)
BLUE = (0, 0, 255, 127)
RED = (255, 0, 0, 127)

draw_rect_alpha(window, BLUE, (55, 90, 140, 140))
draw_circle_alpha(window, RED, (150, 100), 80)
draw_polygon_alpha(window, YELLOW, 
    [(100, 10), (100 + 0.8660 * 90, 145), (100 - 0.8660 * 90, 145)])

في الكود السابق ثلاث دوال كل منها تقوم برسم شكل معين، وتأخذ إحداثيات مكانه ولونه وحجمه.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

شكرا لك لكن هناك سؤال آخر لماذا عند استعمال الامر collidepoint في الدائره و المثلث يعتبرهما مثل المربع مثال: 

import pygame

pygame.init()

screen = pygame.display.set_mode((600, 600))

c = pygame.draw.circle(screen, (255, 0, 0), (100, 100), 100)

if c.collidepoint((1, 1)):

 print("yes")

تم التعديل في بواسطة Beshoy Ehab Hafez
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 4 ساعات قال Beshoy Ehab Hafez:

شكرا لك لكن هناك سؤال آخر لماذا عند استعمال الامر collidepoint في الدائره و المثلث يعتبرهما مثل المربع مثال: 

import pygame

pygame.init()

screen = pygame.display.set_mode((600, 600))

c = pygame.draw.circle(screen, (255, 0, 0), (100, 100), 100)

if c.collidepoint((1, 1)):

 print("yes")

يحدث هذا الأمر لأن التابع collidepoint يستخدم في الأساس للتحقق مما إذا كانت نقطة معينة موجودة داخل مربع الشكل ، فعلى سبيل المثال، النقط الزرقاء في الشكل التالي تقوم بإرجاع True بينما النقط الخضراء تقوم بإرجاع False لأنها خارج مربع الشكل:

61298a56b010a_Screenshot2021-08-28025756.png.3f4493220de9d4172ca626b6b1e350d0.png

ويستخدم هذا التابع في حالة أردت حدوث شيء ما عندما يكون مؤشر الفأرة قريب من الشكل على سبيل المثال، ويقترح توثيق pygame الرسمي أن تستعمل التابع clipline والذي يقوم بالتأكد من وجود خط كامل داخل الشكل.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...