أدخل كلمة للبحث

‏إظهار الرسائل ذات التسميات التكنولوجيا و العلم. إظهار كافة الرسائل
‏إظهار الرسائل ذات التسميات التكنولوجيا و العلم. إظهار كافة الرسائل

 تاريخ اجهزة الالعاب منذ 1980 الى 2026 


لقد مر تطور الالعاب من عدة مراحل وكذلك من عدة اجهزة وطرق اللعب
في يومنا هذا لم يعد يقتصر مفهوم اللعب في لعب كرة القدم فقط والانشطة الرياضية بل ايضا الالعاب الالكترونية تعتبر من الاشياء التي يستمتع بها الكبار والصغار جنبا الى جنب ولا يتوجب علينا التفكير بان الالعاب مضيعة للوقت فذا تفكير خاطىء تماما لان الالعاب وسيلة لقضاء وقت ممتع مع الاحباب والاصدقاء سوى لوحدك بلعب العاب بدون انترنت او الالعاب الجماعية التي تكون بواسطة الانترنت ويتواجد داخلها نوافذ للدردشة الكتابية و الصوتية وتلتقي الناس فيهم من كل انحاء العالم و تتعلم اللغة بسهولة ومن اشهر الالعاب الجماعية التي فيها هذه الاشياء هي العاب الباتل رويال battle royal games ثم العاب العالم المفتوح الاونلاين MMORPG games و العاب مثل GTA RP و Read Dead redemption online و MTA SAN وغيرهم .

وتم الانتقال في الالعاب من العاب بيكسل الى العاب ثنائية الابعاد الى العاب ثلاثية الابعاد ثم الالعاب القريبة جدا للواقع . انقسمت كل هذه النوعيات الى اجهزة مختلفة 
منذ صدور اول جهاز الى اليوم وهذه هي القائمة بالترتيب .

Vectrex Mini 1982
NES Superset 1983
Toshiba T1100 (Intel 8088) 1986
SEGA Master System 1987
SEGA Mega Drive 1988
Game Boy 1989
Atari Lynx 1989
SXCHEN Brick Game 1990
Super Famicom 1990
Sega Game Gear 1990
IBM PC Intel28 4MB 1990 
TurboExpress 1991 
Nintendo SNES Super Set 1992 project ismas agamesdevice
SEGA Saturn 1994
PS1 1995
Nintendo 64 1996
Nokia 6110 (Snake Game)1997
Dream cast 1998
GameCube 2001
Game Boy Advance 2001 2vids
PS2 2001
Xbox 2001
Nintendo DS 2004
PSP 2004 2vid 
Xbox 360 2005
Nintendo DS Lite 2006
Wii 2006
ps3 Fat 2006
PSP 3000 2008 
ps3 160GB 2008 x
PSP SLIM And LITE 2008
PSP GO 2009
PS3 Slim 250GB/320GB 2009 x
PSP STREET 2011
Playstation vita 2011 (PSP Vita) 2vid
IPAD Air A7x 2013 2vids 
PS3 Super Slim 500GB 2013
PSP VITA 2000 SLIM 2013
Nvidia Shield 2013 2vids
Ps4  500GB 2013
PS4 1TB 2015
PS4 Slim 500GB/1TB 2016 3vids
PS4 PRO 1TB/2TB 2016
HTC Vive 2016 2vids
Nintendo Switch 2017
IPAD PRO 3 A12x 2018 2vids
SEGA Mega Drive Mini 1/2 2019
VR Valve Index pc 2019 2vids

Evercade 2020
EVERCADE VS Premium Pack 2021
PS5 Standard/Digital 825GB 2020
xbox Seies X/S 2020
PC MSI GE66 Raider 2020
HP Omen Obelisk (RTX 2080)2020
VR Meta Quest 2 2020 2vids
Analogue Pocket 2021
Razer Blade Pro 17 (RTX3080) 2021
MSI Aegis RS 2021
IPAD PRO 6 M2 2022
GPD Win 2022
AYN ODIN 2022
Anberic RG35XX 2022
Logitech G Cloud 2022
Steam Deck 2022
MSI Katana GF66 2022
Razer Blade 15 2022
Alienware Aurora R12 (RTX 3090) 2022
Super Pocket 2023
PS5 Slim Standard/Digital 1TB 2023
PLAYSTATION PORTAL 2023 (streaming games from ps5)
Asus Rog xbox Ally 2023
Razer Edge 5G 2023
R36 MAX 2023
Zx Touch 2023
Lenovo Legion 7i 2023
Alienware Aurora R16 2023


Gamestation 5 GS5 2024
IPAD PRO 7 M4 2024
MSI Claw A1M 2024
PS5 PRO 2024
HP OMEN Max 16 2024
Prebuilt Gaming ROG Dream PC (64RAM RTX5090/RX8900) 2024
Nintendo switch 2 2025
AYN ODIN 3 2025
GPD Win 4 2025
Mobiles :
Asus Rog phone 9 pro 2025
RedMagic 11PRO 2025
OnePlus 15 2025
PC HP OMEN MAX 45L(128RAM RTX5090) 2025
iPhone 17 Pro Max 2026
RedMagic 11 Air 2026
Samsung Galaxy S25 Ultra 2026
Retroid pocket 6 2026
ASUS ROG Strix SCAR 18 2026
ASUS ROG Zephyrus G16 (RTX 5080) 2026
Alienware Area-51
VR Treadmill/Kat walk C2/C2 Plus
Virtuix Omni One
 PS6 soon البلايستيشن الجديد قريبا في الاسواق 

وفي الاخير توجيه بسيط لطريقة شراء جهاز مناسب 
اذا كنت من محبي اجهزة الالعاب فخيارك الجيد هو بلايستيشن 5 برو او اكس بوكس سيريز . باقي الاجهزة بالاسفل بالفيديو.

اذا كنت من محبي الحواسب عليك بشراء حاسوب تكون في مساحته 500 جيكا او اكثر و في ذاكرة الرام 8 جيكا متوسط لكن الافضل الرام تكون 16جيكا فما فوق
ليكون الحاسوب جيد كلما كان اعلى كان الجهاز اقوى. ثم اهم شيء هو بطاقة الجرافيك يجب ان يتوفر على بطاقة انفيديا invidia او ما يعادلها بحجم 3 جيكا او الافضل هو تكون فيها 6جيكا ليكون الحاسوب جيد جدا , فقط هذه هي اهم الامور في الحاسوب سواء كان محمول او كان حاسوب المكتبي , طبعا المعالج ايضا مهم ولكن اذا كانت المواصفات السابقة متوفرة فان المعالج سيكون جيد ايضا.

اما ان كنت من محبي الهواتف وتريد هاتف قوي للالعاب ابحث عن هاتف بمواصفات 8 جيكا رام او 12جيكا فما فوق ومساحة 120 او فما فوق, والمعالج من الافضل يكون من نوع snapdragon 8 Gen 4 او Dimensity 9400 او احدث 
كذلك في الهاتف لبد من التاكد من سعة البطرية حتى تتمكن من اللعب مدة طويلة دون نفاذها بسرعة لذلك يجب ان تكون بطريته بحجم 5500mAh الى 6000mAh
 فقط هذه اهم الاشياء في الهاتف القوي المناسب.

واليكم فيديوهات حول كل هذه الاجهزة مقسمة الى ثلاث مقاطع فيديو 
المقطع الاول



المقطع الثاني  : 


المقطع الثالث الاخير 


تم من صفحتنا yokagi 
yassine agourram HD 
يمكنكم ايضا متابعة الفيديوهات على الفايسبوك 





 زيادة متابعين للصفحات


 بعد زيادة المتابعين و تحقيق الشروط المطلوبة بهذه المواقع تقوم بعد ذلك بزيادة التفاعل والشهرة لصفحتك عن طريق اعلانات مالية التي يمكنك اطلاقها في اي منصة سواء كانت يوتيب او فايسبوك او تيك توك او غيرها 

وهذه هي الطريقة الوحيدة كي تكبر صفحتك بسرعة اما الاكتفاء بنشر محتوى دون الاعلانات فانت لن تتمكن ابدا من النجاح في قناتك حتى لو كان عندك اجمل محتوى بالعالم لانه بكل بساطة الشركات التي تدير هذه المواقع تريدك ان تدفع لها مقابل شهرتك وترويج محتواك ولا يهمها نوع المحتوى الذي تقدمه 

smm panels

per1000

--------------------------

https://mediafolow.com/services MAROC

facebook 6 /60Kmin 18usd video 1H

youtube 30

tiktok 6

insta 3

-------------------------------- 

https://figipanel.com/ 4.6 xxx

tajribat lkhidma 0.53

Facebook:2.86 /60Kmin 2.42usd video 2H 3sec

youtube:0.31norefill 6usd real /watchtime 5.42usd video 15min

tiktok: 2.86garunteed/1.6/0.99 - Views 0.61

instagram: 0.41

group member 0.53

kwai 0.5

---------------

website:https://flowlinesmm.com/services 4.7 xxx Mojarab good

Facebook:1.30 /60Kmin 0.81usd video 2H

youtube:2.52/watchtime 12.11usd video 6min

tiktok: 2.43/ views 0.0001 1min

instagram:0.38

----------------------

website:https://app.pigolikes.com/services 4.7 xxx

Facebook:0.51/ 60Kmin 0.72usd no refill video 3H

youtube:3.54 /watchtime 27.50usd video 1H

tiktok: 4.50 /views 0.36 +likes 

instagram:0.40

------------------------

website:https://smmxpanel.com/services 4.4 xxx

Facebook:0.60 /60Kmin 0.40 video 2H

youtube:2.18/1.90 /watchtime 2.95usd video 3min 1000=50h

tiktok: 2/1.72 /view 0.001

instagram:0.23

-----------------------

website:https://smbpanel.net/services 4.7 xxx

Facebook:1.08-2.08 /60Kmin 1.95 3min

youtube:5 /watchtime 30.75 Video Any

tiktok: 3.15 /views 0.0059 + 20shares 

instagram:0.79

--------------------

website:https://viralsmmpanel.com/ xxx

Facebook:2.2 /60Kmin 7.71 video 3H 

youtube:2.92 /watchtime 7.17 video 10min

tiktok: 1.45 27.12usd full mont / views 0.126

instagram:0.23


a shop for killer

a killer paradox

------------------------------

website:cheapestsmmpanel.com xxx

Facebook:0.47 /2.62profils /60Kmin 1.05 video 1H 

youtube:3.22 /watchtime views 0.93

tiktok: 2 /views 0.0012

instagram:0.44

-----------------------

website:https://smmpanelfather.com/ xxx

Facebook:1.92 /60Kmin 0.42 video 2H

youtube:2.44 /views 1.38

tiktok: 3.84 /view 0.0006

instagram:0.45

-------------------------

website:https://darksidepanel.com/services +freeservice xxx

Facebook:1.33 /60Kmin 3.52 Video 1H 3sec

youtube:1.80 /watchtime 4.64 Video 4min 

tiktok: 1.38 /views 0.01 

instagram: 0.54

----------------------------

website:https://smm-center.com/ xxx

Facebook:2 //60Kmin 0.95 video 3H

youtube:3.05 /watchtime 8.28 video 6min

tiktok: 2.64 /watch 213usd per1000

instagram:0.51

------------------------------

website:https://shoppera-smm.com/services xxx

Facebook:0.58 /60Kmin 0.84 video 3H

youtube:1.93 /views 2.23

tiktok:2.4 /views 0.01 

instagram:0.54

-----------------------------

website:https://5smm.com/services xxx

Facebook:0.74 /60Kmin 0.51 video 2H

youtube:2.47 /watchtime 3.60 VIDEO 4min

tiktok: 1.60 /views 0.02

instagram:1

------------------------------

website:https://www.smmrox.com/services MAROCxxx

Facebook:2 /views 1.4 

youtube:4.5 /views 2.6

tiktok: 2.4 NoGranteed /views 0.06

instagram:7

--------------------------------

website:https://ad4tube.com/ arab xxx

Facebook:2.08 /60Kmin 8.47 video 2H

youtube:4.59 /watchtime 33usd video 1H

tiktok: 1.92 /views 0.004

instagram:1.52

-------------------------------

website:igcpanel.com arab xxx

Facebook:0.83 /60Kmin 5.25 video 180min

youtube:3.40 /watchtime 58 video Any

tiktok: 3.02 /views 0.0014

instagram:1.18

-------------------------------

website:smmcpan.com arab ofih no9at xxx

Facebook:1.04 /60Kmin 0.98 video 2H

youtube:2.26 /watchtime 4.17 video 30min

tiktok: 1.83 /views 0.0024

instagram:1.35

-------------------------------

website:blashsmm.com

Facebook:1.14 /60Kmin 0.61 Video 3H

youtube:3 /watchtime 16.19 video 15min

tiktok: 1.14 /views 0.01

instagram:0.59

--------------------------------

website:mippanel.com maroc xxx

Facebook:3 /view 0.36

youtube:9.49 /views 4.67 for only 2min watching

tiktok: 5.87 /views 0.16

instagram:2.73

-------------------------------

website:https://speedservicen1.com/

Facebook:2 /60Kmin 1.60 Video 1H

youtube:5 /watchtime 16.80 video 1H

tiktok: 2 /views 0.0003

instagram:0.26

--------------------------------

website:smm-tiger.com arab

Facebook:1 /views 0.10

youtube:3.17 /views 0.48

tiktok: 2.36 /views 0.0009

instagram:1.65

--------------------------

video

https://fb.watch/wXHt38JZ9D/


---------------------------

تبدا سرعة التوصيل بعد وقت البدا الموجود بالوصف.


🔥 = افضل الخدمات.

💧 = خاصية تجزئة الطلب مفعلة.

♻ = زر التعويض مفعل.

⛔ = زر الالغاء مفعل.

Rxx = فترة التعويض (xx تدل على عدد ايام التعويض, مثال: R30 = 30 يوم ضمان تعويض).

ARxx = فترة التعويض التلقائي (xx تدل على عدد ايام التعويض التلقائي, مثال: AR30 = 30 يوم تعويض تلقائي).


- الطلبات ذات البدا الفوري يمكن ان تحتاج 0 -1 ساعة للبدا . (الطلبات التي تحتاج ساعة للبدا غالبا ما تبدا خلال دقائق قليلة).

- H كما في 1H, 12H, الخ تعني عدد الساعات للبدا.

- HQ/LQ = جودة عالية/جودة قليلة.

- السرعة تصل لغاية تعني xx/Day, مثال الطلب 10K/Day يمكن ان يكون 5K/Day, نحن نذكر هنا السرعة القصوى للخدمة, يرجى الرجوع الى صندوق الوصف لمزيد من التفاصيل..


المؤلف ياسين اكرام 

ادعي لي من قلبك 

 شرح برنماج اليونيتي Unity لتصميم العاب



تتمة للدرس الاول حول اليونيتي من هنا 
اسفل الدرس السابق هناك اساسيات البرنماج مهمة جدا

السلام عليكم ورحمة الله ونبدا مباشرة 

بعد تنصيب اليونيتي نسخة personel المجانية وانشاء new project سيكون لدينا برنمجين احدهما فيه ارقام ويدخلك مباشرة الى البرنماج والاخر Unity Hub ومن خلاله حين نختار Learn يعطينا مجموعة من الالعاب الجاهزة للتعلم منها او استغلالها
اثناء اختيار نوع المشروع 2D او 3D اذا كنت اعطاك عدة انواع من 3D فنحن نختار النوع 3D Sample Scene URP ولدينا في خيار Core بعد الضغط على على مشروع جديد يمكن ان تختار نوع المشهد و المنظور للعبة ولكن ليس من الضرورة الالتزام بهذه الاشياء لانه يمكن ان تختار نوع 2D وتعدل عليه ليصبح 3D لا مشكلة
عند الدخول لدينا في اعلى البرنماج كلمة Asset Store ندخل اليها هنا متجر لاشياء التي يمكن تضيفها الى مشروعك اذا نحن سنختار 3D بالاعلى ثم في القائمة سنختار by unity يعني الاضافات التي توفرها لنا الشركة ندخل نبحث عن اي اضافة تريد نحن نختار اضافة starter assets third person المنظور ثلاثي الابعاد اكب الاسم في البحث اضغط عليه ثم اضغط Add to my assets ثم open in unity ثم سياخذك الى البرنماج وتضغط download للتحميل الملفات ثم add to project لاضافتها ثم تحديث upgrade install وتنصيب سيطلب منا عمل اعادة تشغيل نقول لا ثم ثم نضغط import 
حين ندخل نضغط على اسم الملف الملف startedثم thirdperson ثم ملق المشاهد scenes folder سيعطينا المشهد وردي ولذلك نذهب الى قائمة window ثم rendering ثم render pipeline converter ثم نتاك هل الخيار الاول فيه Built-in URP ثم نضع علامة في النوافد الثلاثة ثم نضغط على convert assets فيقوم بتحويل المشهد الى مشهد مناسب
لفهم طريقة عمل اشكال هناك الطريقة العادية من خلال نافذة Hierarchy نضغط علامة زائد ثم اختيار 3D object ونختار الشكل
ولكن لفهم اكثر حول موضوع انشاء الاشكال نختار create empty سيعطينا صندوق مخفي لا يظهر نضغط اداة move كي نحرك الشكل الخفي حتى يكون واضح مكانه ثم في جانب الشاشة inspector لدينا اعدادات سنضغط Add component ثم نختار Mesh Filter ثم نضغط على الدائرة الصغيرة جدا امام خيار Box وسيعطينا اختيار الشكل في بعض الاشكال ثم سنلاحظ انه لا يظهر بعد ثم لذلك سنحتاج الى Add component ثم نختار Mesh Renderer وهكذا يظهر لدينا الشكل 
اما كي نغير اللون نقوم بنفس الطريقة التي تم شرحها سابقا وهي من قائمة project نضغط زائد ثم Material وسيعطينا كرات الالوان تلونها ب اي لون تريد على الجانب وتسحبها مباشرة لفوق الشكل 
حين نضغط على Material لدينا في اعدادته شيء مهم وهو shader بالضغط على المستطيل امامه يمكننا البحث عن نوع التاثير الذي نريده في اللون مثلا اذا كتبتا texture سيعطينا نوع عادي من الاضافة ويعطيك اختيار شكل العنصر تيكستر اما اذا كتبنا مثلا 
واذا اخترنا مثلا نوع standart يعطينا خيارات اخرى لكيفية تفاعل الشكل مع الاضاءة وغير ذلك سنجد مثلا ايقونة صغيرة امام كلمة Albedo نضغط عليها نختار شكل الذي سيظهر به اللون
وكما في الشرح السابق يمكنك مع اضافة الmesh يمكننا اضافة نضيف كذلك Rigidbody يقوم بعمل خواص فزيائية للشكل 
سنلاحظ انه لا يملك شكل فزيائي لذلك نضغط add component مرة اخرى ونختار مثلا sphere collider ثم في خانة Mesh بالجانب نضغط الدائرة الصغيرة ونختار مثلا شكل shphere يعني دائري وهكذا يتغير الشكل مباشرة
يمكننا انشاء مشاهد لامحدودة بالضغط على علامة زائد في نافذة المشروع project ثم تختار scene ودوبل كليك للدخول الى المشهد الجديد
نستطيع اخذ ايقونة المشهد game نسحبها ونضعها بجانب كي نستطيع رؤية ما تراه الكاميرة في المشهد 
مثال لعبة :
نفتح مشروع جديد ننشء صندوق نضع له في scale اعدادات الحجم X 50 و Z100 يصير لدينا مستطيل عريض جدا نعطيه اسم ground الان نقوم بتدوير وتحريك الارضية حتى تظهر كالطريق بالمشهد الان نستخرج الصندوقcube ونحركه الى امام الكاميرة في اتجاه الطريق  نعطيه اسم flyer مثلا ثم نلونه كما شرحنا سابقا الان كي نعطيه خصائص فزيائية كما شرحنا نضيف add component ونختار Rigidbody ويصير متفاعل اما خيار collider لمنع اختراق الشكل للاجسام الصلبة اما الmesh تتحكم في رسم او تواجد العنصر وخيارات transform لضبط اماكن الاشكال وحجمها بشكل دقيق كما قلما سابقا دائرة صغيرة في نافذة الmesh تعطينا تغيير الشكل واذا اخترنا مثلا الكرة سنلاحظ انها كرة غير سوية كي نجعلها كرة جيدة بكل بساطة في خيار الtransform نضغط يمين الماوس ونختار reset وتعود الكرة لحجمها المعتدل ولكن حين نحركها سنلاحظ انها تتحرك مثل الصندوق لذلك كي تتحرك معنا مثل الكرة سنلغي box collider ونضيف sphere collider
اما لتغيير منظر السماء الزرقاء في المشهد نضغط على MainCamera ثم في اعداداتها لدينا خيار Skybox نغييره الى solid color ثم نختار اللون الذي نريده حول المشهد 
حين اضغط على مشهد ثم shift+space سوف يقوم بتكبير المشهد لك للرؤية جيدا 
الان نذهب الى file ثم حفظ المشهد ونسميه مثلا level1 وسيعطينا ايقونة المشهد اسفل الشاشة وهذا يسهل عليك الانتقال بين المستويات والتعديل عليها 
كي نبدا في اعطاء اوامر برمجية للاشياء باللعبة نضغط على العنصر ثم على الجانب نضغط Add component ثم  new script ونعطي اسم للسكريبت نسميه مثلا playermovment وهنا نلاحظ ان سكريبتات تكون عبارة عن ملفات يمكن سحبها وافلاتها فوق اي عنصر فتتفعل عليه نفس الاوامر 
الان دوبل كليك على الملف وسيفتح معنا مباشرة برنماج الاكواد visual studio 
سيعطينا مكان void start نضع فيها كل الاكواد التي تستخذم في كل مرة ابدا اللعبة وفي لغة C# لا يهم اذا كان هناك فراغات بين الكلمات تستطيع حتى كتابة كل كود في سطر لوحده الان سنعطي امر بسيط لنتاكد ان اليونيتي يقراء الكود الذي نكتبه 
using UnityEngine;

public class playermovment : MonoBehaviour
{
    // Start is called once before the first execution of Update after the MonoBehaviour is created
    void Start()
    {
      ;Debug.Log("hello world yasin")  
    }

    // Update is called once per frame
    void Update()
    {
       
    }
}

كتبنا الامر Debug ونضغط ctrl+s للقيام بحفظ التغييرات او من القائمة file ثم save حتي يعمل قراءة للكود, والان نذهب للبرنماج وكما شرحنا سابقا دائما الاحرف الكبيرة تكتب كبيرة وكل سطر يجب ان ينتهي بفاصلة منقوطة نكتب بين مزدوجتين كلمة "hello world" ثم نعود للبرنماج نضغط play ومن نافذة console يجب تظهر الكلمة التي كتبنها بالكود ان لم يظهر عندك نافذة console ستجدها من قائمة النوافذ window ثم console تستطيع اضافة ما لا ناهاية من الوظائف في اليونيتي مما يعطيك لا حدود مما تستطيع انشائه 
الان اول خطوة سنفعلها هي نقوم بتعريف الشكل الذي سنجري عليه تغييرات داخل الكود وكي نفعل ذلك سنتجه الى فوق دالة void start اعلى منها سنكتب التالي 

public class playermovment : MonoBehaviour
{
    // Start is called once before the first execution of Update after the MonoBehaviour is created
    ;public Rigidbody rb
    void Start()
    {

سنلاحظ ظهور ملف عندنا بالبرنماج بنفس الاسم عندما نضغط على الكيوب وننزل في اعادادات السكريبت الذي قمنا بانشائه الى الاسفل هناك مستطيل يظهر امام خيار rb 
الان سنسحب Rigidbody الخاص بالشكل ونضعه فوق هذا الاخير اللي اسمه rb الان كلنا ذكرنا rb في الكود سوف يعرف ان المقصود هو هذا العنصر الذي وضعناه فيه ولا ننسى عمل حفظ للمشروع كي ينجح الكود في العمل من file نختار save اذا لم يعمل الكود حاول التاكد من وجود rigidbodey داخل مربع السكريبت احيانا تجد الملف لم يعد بداخل السكريبت لذلك لا يعمل معك الكود
الان لو جربنا وكتبنا كود ايقاف الجاذبية داخل دالة void start 
;rb.useGravity=false  

سنلاحظ ان الجاذبية توقفت تماما لاننا اعطينها امر false فلو اعطينها true ستعمل 
واذا كتبنا في مكانها الامر التالي 
;rb.AddForce(0, 200, 500)

فاننا نلاحظ ان هناك قوة مطبقة على الشكل وللتوضيح الصفر هو اتجاه X و 200 اتجاه Y و 500 اتجاه Z 
البرنماج مجرد كتابة ارقام هكذا يعلم مباشرة انك تقصد الاتجاهات الثلاثة 
الان اذا مسحنا دالة void start وقمنا بوضع الكود التالي في دالة update بالشكل التالي 

using UnityEngine;

public class playermovment : MonoBehaviour
{
    // Start is called once before the first execution of Update after the MonoBehaviour is created
    public Rigidbody rb;
   

    // Update is called once per frame
    void Update()
    {
       rb.AddForce(0, 0, 2000 * Time.deltaTime);  
    }
}


سنلاحظ انه كود يقوم بتدحرج الشكل للوراء ويستمر في التحرك للامام بلا نهاية كانها الرياح تجر الصندوق بعيدا
لكن كي نجعل الشكل يتحرك بشكل مباشر فوق الطريق من اعدادات Rigidbody وفي خيار constrains نضع علامة في x من خيار Rotation لكن افضل طريقة للقيام بالامر هو بالقيام بضغط يمين الماوس ثم create ثم نختار physics material 
ثم في اعدادات هذا العنصر سنقوم بتحويل اعدادات dynamic و static الى الصفر والان نسحب هذا العنصر ونضعه فوق الارضية في المشهذ وسيعطينا نفس حركة تحرك الصندوق بشكل زلق على الارضية 
الان للتحكم اكثر بحركة الشكل علينا تخزينه بالذاكرة وهذا يعني استعمال المتغايير لان المتغاييرات كما راينا سابقا هي مثل صناديق تخزين للبيانات تخزن فيها كل ما يتحرك باللعبة للتحكم في حركته ووقت حركته ووقت توقفه عن الحركة طيلة مدة اللعبة 
وهنا سنضيف هذا الكود فوق دالة void update بالاعلى بالشكل التالي : 

public Rigidbody rb;

    public float forwordforce = 2000f;

    // Start is called once before the first execution of Update after the MonoBehaviour is created
   

    // Update is called once per frame
    void Update()
    {
      rb.AddForce(0, 0, forwordforce * Time.deltaTime);  
    }

في دالة update نقوم بوضع اسم التخزين forwordforce مثلا في مكان 2000 التي وضعنها سابقا

اذا ضغطنا الان على الصندوق سنجد بان اصبح لدينا مستطيع forwordforce للتحكم بقوة الدفع يمكننا جعل الحركة سريعة او بطيئة 
الان للتحكم في تحرك الصندوق نضيف الكود التالي في دالة void  على الشكل التالي 
كود تحريك لليمين بواسطة الضغط على حرف d

 void Update()
    {
      rb.AddForce(0, 0, forwordforce * Time.deltaTime);

      if(Input.GetKey("d")) {

        rb.AddForce(500 * Time.deltaTime, 0, 0);
      }

    }

اما كي نضيف الزر الثاني لليسار نقوم بنسخ الكود بالشكل التالي مع مراعات الاقواس واحجام الحروف مهم جدا كان عندي مشكلة فب الكود حتى لاحظت غياب احد الاقواس بالكود 

void Update()
    {
      rb.AddForce(0, 0, forwordforce * Time.deltaTime);

      if(Input.GetKey("d")) {

        rb.AddForce(500 * Time.deltaTime, 0, 0);  
      }
if(Input.GetKey("a"))
 {

        rb.AddForce(-500 * Time.deltaTime, 0, 0);
    }
    }
}









سيتم اضافة معلومات جديدة مع مرور الوقت 
اترك لي دعوة من قلبك
بالتوفيق للجميع 


 تعلم لغة سي شارب C# لتصميم العاب Unity


السلام عليكم ورحمة الله

اما بعد فان هذا الموضوع لتعلم لغة سي شارب مع التركيز اكثر على اليونيتي لتطوير العاب 

هذا درس اخر مشابه للدرس السابق حول لغة C#

الدرس السابق من هنا

كنت دخلت الى انرل انجن سابقا وكانت تجربة صعبة لان المشكلة كانت في اغلب الدروس باليوتيب تشرح في نسخة unreal engine 5 

والمشكلة ان هذا الاصدار الجديد يحتاج جهاز حاسوب قوي لذلك كان عندي لاق بتلك النسخة فحاولت العمل على نسخة 4.27 لكن مع الاسف هناك اختلافات بين هذا الاصدار والاصدار الخامس فمثلا انت تتابع دورة معينة حتى تجد نفسك عالق في نافذة معينة توجد بالشرح ولا توجد عندك انت في نسختك واكتشفت لاحقا ان انرل انجن فيه عيب كبير وهو ان كل نسخة جديدة تكون مختلفة عن الاخرى في بعض الاضافات ونوافذ جديدة وهذا يشكل مشكيل عند المبتدئين للتعلم البرنماج 

ثم الدروس باليوتيب فيها نوع من السطحية فلا يشرحون لك مثلا اذا قام باضافة نود جديد لماذا قام باضافته وكيف تتعامل معه بل فقط يقولك اتبع وافعل ما افعله ويغفلون شروحات مهمة لا يخبرونك بها بالدورات 

المشكلة الاخرى التي واجهتني بالبرنماج هي الملفات التي اقوم بحفظها بمجرد فتح واغلاق البرنماج تختفي كل الملفات ويختفي معها البلوبرينت الذي وضعته سابقا وهذا فعلا مثير للاعصاب هه المهم يمكن اضافات معلومات جديدة اذا توفرت عن انرل انجن ولان دعونا نبدا الرحلة في عالم سي شارب واليونيتي 

لغة سي شارب C#

اولا سنحتاج محرر اكواد للعمل عليه اثناء تنفيد اوامر الكود

لذلك قمت بتجربة اقوى برنماج لتحرير الاكواد وهو برنماج Visual studio community تقوم بتحميله ثم اثناء التثبيت سيطلب منك اختيار الاضافات التي تريد تحميلها وعلينا اختيار الاضافات التي تناسب لغة C# 

ASPNET و NET Desktop وNET Multi PLatform APP و Applications windows و Unity Games سيكون الحجم الكلي تقريبا 25GB جيكا 

ولكن اذا كنت تريد فقط سي شارب لليونيتي unity فان اضافة Develeppement Unity كافية للعمل على البرنماج ويعطيك حجم تحميل الاداة فقط 3 جيكا فقط وهذا جيد ثم يمكنك فيما بعد تحميل ادوات اخرى اذا كنت تريد العمل على تطبيقات و اشياء اخرى

للتاكد ان البرنماج يعمل مع اليونيتي تفتح يونيتي unity ثم تذهب الى قائمة Edit ثم Preferences ثم في External tools تاكد من اختيار Visual studio او اي محرر اكواد عندك بالحاسوب الذي تستخذمه

وهذا هو عيب البرنماج ان مساحات الملفات كبيرة لانه يحتوي على كل ما ستحتاجه مستقبلا يعني ولكن عيبه الثاني هو انه ثقيل على الجهاز وياخذ بعض الوقت ليفتح معك

ثم لدينا برنماج اخر لمحرر الاكواد وهو Visual studio code هو خفيف على الاجهزة ومناسب جدا 

ولكن فيه مشاكل كثيرة اثناء محاولة تنصيب سي شارب داخله او اي لغة اخرى وفيه مشاكل اثناء محاولة عمل compile للاكواد ومزعج جدا من هذه الناحية ويحتاج الى صيانة هذا العيب الكبير بكل صراحة

لذلك لدي حل نهائي لهذه البرامج التي تسبب وجع الراس وهو برنماج اخر صغير جدا وخفيف بحجم 35 ميغا فقط وهو برنماج Sharpdevelope انه البرنماج الذي استعمله مؤقتا فقط حتى اقوم بتنصيب visual studio community الاساسي 

Download here تحميل البرنماج هنا https://bit.ly/4aq65OY You will need also SDK ستحتاج لهذا البرنماج كذلك ضروري لكل برامج محرر الاكواد Download SDK Here https://dotnet.microsoft.com/en-us/download/dotnet/9.0


تقوم بتنصيب SDK اولا ثم تفتح البرنماج تضغط New solution ثم console application

وهكذا نكون مستعدين للبدء الان

اساسيات سي شارب C#

اي كود سنكتبه لبد من كتابته بين هذه الاقواس

 {
        public static void Main(string[] args)
        {
            Console.Title ="lhob";
            Console.WriteLine("Hello yass baby");
    
            
            // TODO: Implement Functionality Here
            
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);

        }

consol writeline هو امر بقراءة الاكواد او استخرج لي العبارة التالية

console title هو امر بتغيير اسم النافذة التي يظهرها لنا الconsole

console readkey هو امر بتوقيف الشاشة كي لا تنغلق تلقائيا حتى نضغط على احد ازرار

الامر باللون الاخضر // لاضافة ملاحظات وعناوين داخل محرر الكود ولا يستطيع البرنماج قراءتها

الاكواد لبد ان تنتهي دائما ب علامة ; يطلق عليها statment

نضغط F5 للقيام بعملية compile او قراءة للكود

العلامات المطلوبة دائما اثناء كتابة الكود في حاسوب محمول مثلا

" " تجدها بالضغط رقم 3 بالاعلى الكيبورد

; تجدها بالضغط زر النقطة فوق Alt Gr

= تجدها عند الضغط زر يساوي بالاعلى

. النقطة تجدها بالضغط shift مع زر النقطة

) تجدها قرب زر يساوي

( تجدها في الرقم 5 بالاعلى

{ تجدها بالضغط Alt Gr مع 4 بالاعلى

} تجدها بالضغط Alt Gr وزر يساوي

[ تجدها بالضغط Alt Gr ورقم 5 بالاعلى

] تجدها بالضغط Alt Gr وزر قرب الصفر بالاعلى

> بالضغط على زر قرب واحد بالاعلى

< بالضغط shift مع نفس الزر قرب واحد

/ زر المتواجد فوق ctrl

\ بالضغط Alt Gr و 8

; فاصلة منقوطة انتباه هذه العلامة دائمة في نهاية كل سطر اكواد لكن في هذا الموضوع تظهر لي في بداية العملية اوك كي لا تختلط عليكم الامور


المتغاييرات Variables

المتغاييرات تستعمل لتخزين بيانات مؤقتة او دائمة في الذاكرة memory بغرض التعامل معها اثناء تنفيد البرنماج

مثلا لو اردنا انشاء برنماج يعطينا مجموع عددين سيكون علينا حجز في الذاكرة مكانين لمتغايرين رقميين

ثم نعطي كل متغايير منهما قيمة كي نتمكن من حساب المجموع

وطريقة الاعلان عن متغايير كما يلي

كتابة نوع المتغايير اولا لان فيه انواع متعددة والقيمة التي نريد تخزينها فيه

قيمة رقمية --- متغايير رقمي

قيمة حرفية --- متغايير حرفي

قيمة نصية --- متغايير نصي الى اخره

الرقمي اعداد صحيحة : int // العشري ذات دقة عالية : Double

النصي : String // العشري ذات ذقة عادية : Float

منطقي صح او خطاء : bool // التاريخ : DateTime

الحروف : Char // وانواع اخرى

شروط كتابة المتغايير

يجب ان يبدا بحرف ام علامة _

لا يحتوي على مسافة ولا يبدا برقم ولا يبدا برمز ولا يجب استعمال اسماء محجوزة مثل int لانها اسمها متغاييرات ولا اي اسم يستعمله البرنماج مثل static وغيره

الفرق بين float و Double

float يصل فقط الى سبع احرف بعد الفاصلة

يحجز فقط 4 بايت من الذاكرة نواة 32بايت ونطاق اضيق و سريع في العمليات الحسابية مناسب للارقام غير حاسمة مثل الالعاب او الرسومات ثلاثي الابعاد فهو يكفي ويوفر اداء افضل واستهلاك اقل للذاكرة

Double تصل اعداده العشرية الى 15 رقم بعد الفاصلة

يحجز 8 بايت من الذاكرة نواة 64بايت ونطاق اوسع بطيء بالعمليات الحسابية لكنه اكثر دقة ضروري فقط اثناء الحسابات الدقيقة جدا مثل الفزياء او الاموال

1. المتغيرات الأساسية (Primitive Types) أ. الأرقام الصحيحة int: لتخزين الأعداد الصحيحة. int score = 100; long: لتخزين أعداد صحيحة أكبر حجمًا. long highScore = 1000000L; ب. الأرقام العشرية float: للأرقام العشرية ذات الدقة العادية. float speed = 5.5f; double: للأرقام العشرية ذات الدقة الأعلى. double precision = 3.141592653589793; ج. القيم المنطقية bool: لتخزين قيم "true" أو "false". bool isGameOver = false; د. الأحرف والنصوص char: لتخزين حرف واحد. char grade = 'A'; string: لتخزين النصوص. string playerName = "Alice"; 2. المتغيرات المصفوفية (Array and List Types) Array: لتخزين قائمة ثابتة من العناصر. int[] scores = { 10, 20, 30 }; List<T>: لتخزين قائمة ديناميكية يمكن تعديل حجمها. List<string> inventory = new List<string>(); inventory.Add("Sword"); 3. المتغيرات المرجعية (Reference Types) GameObject: يشير إلى كائن في المشهد. GameObject player = GameObject.Find("Player"); Transform: يُستخدم لإدارة الموقع والدوران والقياس. Transform playerTransform = player.transform; Component: للإشارة إلى مكونات معينة مثل Rigidbody أو Collider. Rigidbody rb = GetComponent<Rigidbody>(); 4. أنواع Unity المخصصة أ. المتغيرات ثلاثية الأبعاد Vector2: يُستخدم لتمثيل الإحداثيات ثنائية الأبعاد. Vector2 position = new Vector2(5, 10); Vector3: للإحداثيات ثلاثية الأبعاد. Vector3 position = new Vector3(1, 2, 3); ب. Quaternions تُستخدم لتحديد الدوران. Quaternion rotation = Quaternion.Euler(0, 90, 0); ج. Color لتحديد الألوان. Color color = Color.red; 5. الأنواع المخصصة (Custom Types) يمكنك إنشاء أنواع مخصصة باستخدام struct أو class. public struct PlayerStats { public int health; public int mana; } 6. المتغيرات الزمنية Time.deltaTime: لحساب الفرق الزمني بين الإطارات، مما يجعل الحركة سلسة. transform.Translate(Vector3.forward * speed * Time.deltaTime); 7. المتغيرات الفيزيائية Rigidbody: للتحكم في الجسم الفيزيائي. Rigidbody rb = GetComponent<Rigidbody>(); rb.AddForce(Vector3.up * 10); 8. المتغيرات المتعلقة بالدخل (Input Variables) Input.GetAxis: للحصول على القيم من لوحة المفاتيح أو وحدة التحكم. float horizontal = Input.GetAxis("Horizontal"); 9. الأنواع الثابتة (Constant Types) const: متغير لا يمكن تغييره بعد التهيئة. const int MaxHealth = 100; readonly: متغير يُحدد عند التشغيل فقط. readonly string GameTitle = "My Unity Game"; 10. المتغيرات الثابتة عالميًا (Static Variables) تُستخدم لمشاركة القيم عبر جميع الكائنات من نفس النوع. public static int playerCount = 0; اختر نوع المتغير بناءً على احتياجات اللعبة لتحسين الأداء.

لكتابة ملاحظات داخل البرنماج في عدة اسطر نستعمل كود

/* ....... */

الثوابت مثل المتغاييرات لكنها تبقى ثابتة ولا تتغير اثناء تنفيد البرنماج

الاعلان عن الثوابت نستعمل كلمة const 

مثلا

const int myNumber=3;

const string name="karim";


الفرق بين اوامر الاخراج write و writeLine

write يطبع الكلمات في سطر واحد

writeline يطبع كل كلمة في سطر لوحدها


الان سنقوم بانشاء برنماج يطلب منا ادخال الاسم وحين نكتب الاسم سوف يظهر لنا رسالة ترحيبية

Console.Write("enter your name: ");

string name=Console.ReadLine();


Console.Write("Hello mr: "+name);


ملاحظة تاكد من الحجم الصحيح للحروف فمثلا لبد الحرف C كبير في كلمة Console والحرف الكبير ايضا في كلمة Write اوك حجم الحروف مهم جدا لان اي حرف كبير اذا كتبته صغير سيعطيك خطاء في قراءة الكود 

نستعمل + لدمج مع المتغايير 

طلبنا من البرنماج حفظ القيمة التي سيكتبها الشخص ثم يستدعي الرسالة الترحيبية بعد ادخال الاسم المخزن داخل name 


لو حاولنا القيام مثلا بطلب الشخص ادخال عمره باستعمال متغايير رقمي int هكذا

Console.Write("enter your age: ");

int age=Console.ReadLine();

فسوف يعطينا خطاء لان الدالة Console.ReadLine هي دالة نصية ولا يمكن وضعها داخل متغايير الرقمي 

اذا طريقة تحويل الدالة النصية الى دالة رقمية بطريقتين

الطريقة الاولى باستعمال Parse على الشكل التالي


Console.Write("enter your name: ");

string name=Console.ReadLine();


Console.Write("enter your age: ");


التحويل

int age=int.Parse(Console.ReadLine());

ثم نكتب

Console.Write("Hello Mr: "+ name +"your age is: "+age);


الطريقة الثانية

int age=Convert.ToInt32(Console.ReadLine());


ToInt32 تقوم باخذ قيمة مدخلة من نوع معين مثل string - float-double

وتحاول تحويلها الى عدد صحيح int


امثلة

تحويل نص رقمي الى عدد صحيح

لدينا

string numberText="123";

int number=

الحل

Convert.ToInt32(numberText);

Console.WriteLine(number);

الناتج 123


تحويل رقم عشري الى عدد صحيح تقريبي

لدينا

double decimalNumber=12.9;

int integer=

الحل

Convert.ToInt32(decimalNumber);

Console.WriteLine(integer);

الناتج 13


تحويل قيمة منطقية boolean

لدينا

bool isTrue=true;

int number =

Convert.ToInt32(isTrue);

Console.WriteLine(number);

الناتج 1 true

لدينا الروابط او القواعد

وهي مجموعة من الرموز المستعملة لانجاز مجموعة من العمليات

1 روابط رياضية

تستعمل من اجل القيام بعمليات حسابية وهي رموز معروفة

+ للجمع . - للطرح , / القسمة , * الضرب , % باقي القسمة

2 الروابط المنطقية

ترجع لنا النتيجة صح او خطا حسب العملية المنطقية سواء كانت عبارة او مجموعة عبارات

الرابط && : يعني And و : يعطي قيمة صحيحة اذا كانت كل الاطراف صحيحة

الرابط II : يعني Or او : يعطي قيمة صحيحة اذا كانت كل الاطراف صحيحة

الرابط Cond?Var1:Var2 : يتحقق من الشرط اذا لم يتحقق يمر الى الامر الذي يليه

3 الروابط المقارنة

تستعمل للمقارنة بين المتغايرات غالبا يستعمل معها متغايير bool

IS : للتحقق من نوع المتغايير

> : اصغر قطعا

< : اكبر قطعا

=> , =< : اصغرمن او يساوي , اكبر من او يساوي

=! : يخالف

== : يساوي

4 روابط اعطاء قيمة :

= : لاعطار قيمة لمتغايير

- - , ++ : تزيد او تنقص بمقدار واحد

=% , =* ; =/ ; =- ; =+ : لها نفس دور العمليات الحسابية العادية

مثال عمليات حسابية

Arithmetic Operators

int x , y,sum;

x=7;

y=9;

sum=x+y;

للطباعة الامر نكتب

;Console.Write("answer is:"+sum)

هذا الكود لوقف الشاشة طبعا اذا لم تكتبه سابقا نكتبه تحته ِ;()Console.readkey

يمكنك تغير عبارة answer is وتضع في مكانها اي عبارة اخرى

وسيعطينا النتيجة 16 التي هي عملية الجمع بين قيمة X و Y

مثال روابط المقارنة :
تعطينا فقط صح true او خطا false
لذلك سنعلن عن متغايير من نوع bool ونكتب التالي
bool test = 5>6 ;
;Console.Write(test)
سيعطينا النتيجة خطا false لان 5 ليس اكبر من 6

البنية الشرطية الجزء الاول IF اذا احيانا نحتاج لاجراء تحقق من شرط معين وطلب تنفيد كود معين دون باقي الاكواد وتنقسم الى ثلاث انواع سنشرحها في هذا الموضوع انشاء الله

كل انواع الجمل الشرطية

1. جملة if (الشرط الأساسي) 🔹 تستخدم عندما يكون هناك شرط واحد فقط نريد التحقق منه وتنفيذ كود بناءً عليه. 🔹 لا يجب استخدامها عندما يكون لديك العديد من الشروط المتفرعة التي يمكن إدارتها بطريقة أفضل، مثل switch. مثال :
int age = 20;
if (age >= 18)
{
    Console.WriteLine("أنت بالغ ويمكنك الدخول.");
}

🔹 متى لا يجب استخدامها؟
إذا كان لديك اختيارات متعددة، فمن الأفضل استخدام switch.

2. جملة if-else (الشرط مع بديل)
🔹 تُستخدم عندما يكون لديك خيارين (شرطان متعاكسان).
🔹 يجب تجنب استخدامها إذا كان هناك أكثر من خيارين، لأن switch قد يكون أوضح.

مثال:
int age = 16;
if (age >= 18)
{
    Console.WriteLine("يمكنك القيادة.");
}
else
{
    Console.WriteLine("لا يمكنك القيادة بعد.");
}

🔹 متى لا يجب استخدامها؟
عندما يكون لديك أكثر من خيارين متفرعين، عندها من الأفضل استخدام if-else if أو switch.

3. جملة if-else if-else (عدة شروط متتابعة)
🔹 تُستخدم عندما يكون هناك أكثر من احتمال للحالة، ولكن ليس عددًا كبيرًا جدًا.

مثال:
int score = 85;
if (score >= 90)
{
    Console.WriteLine("تقدير ممتاز!");
}
else if (score >= 75)
{
    Console.WriteLine("تقدير جيد.");
}
else
{
    Console.WriteLine("تحتاج إلى التحسين.");
}

🔹 متى لا يجب استخدامها؟
عندما يكون لديك الكثير من القيم المحتملة، عندها من الأفضل استخدام switch.

4. جملة switch (لاختيار أحد القيم المحددة)
🔹 تُستخدم عندما يكون هناك عدة خيارات محتملة ولكن جميعها تعتمد على قيمة واحدة.
🔹 لا يجب استخدامها عندما تعتمد الشروط على عمليات حسابية أو منطقية معقدة.
  مثال :
char grade = 'B';
switch (grade)
{
    case 'A':
        Console.WriteLine("ممتاز!");
        break;
    case 'B':
        Console.WriteLine("جيد جدًا.");
        break;
    case 'C':
        Console.WriteLine("جيد.");
        break;
    default:
        Console.WriteLine("لم تنجح.");
        break;
}

🔹 متى لا يجب استخدامها؟
عندما يكون القرار يعتمد على مقارنات رياضية (>, <, <=، إلخ)، لأنه لا يمكن تنفيذ ذلك في switch.

5. جملة الشرط الثلاثي (?: - Ternary Operator)
🔹 تُستخدم عندما يكون لديك شرط بسيط جدًا، وتريد كتابة الكود بشكل مختصر.

مثال:
int age = 20;
string result = (age >= 18) ? "بالغ" : "قاصر";
Console.WriteLine(result);

🔹 متى لا يجب استخدامها؟
عندما يكون هناك أكثر من شرطين، لأن الكود يصبح صعب القراءة.

أنواع الشروط التي يستخدمها Unity في تطوير الألعاب

في Unity، تُستخدم شروط C# نفسها ولكن غالبًا داخل تحديثات اللعبة (Update، FixedUpdate، إلخ). من الشروط الأكثر استخدامًا في Unity:

1. استخدام if للتحقق من مدخلات اللاعب
مثال :
void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))  // عند الضغط على زر المسافة
    {
        Debug.Log("تم الضغط على زر القفز!");
    }
}

2. استخدام if مع تصادم الكائنات
مثال :
void OnTriggerEnter(Collider other)
{
    if (other.gameObject.tag == "Enemy")  // عند لمس عدو
    {
        Debug.Log("لقد اصطدمت بالعدو!");
    }
}

3. استخدام switch لمعالجة حالات اللعبة
مثال :
enum GameState { Start, Playing, GameOver }
GameState currentState = GameState.Start;
void Update()
{
    switch (currentState)
    {
        case GameState.Start:
            Debug.Log("اللعبة في وضع البداية.");
            break;
        case GameState.Playing:
            Debug.Log("اللعبة قيد اللعب.");
            break;
        case GameState.GameOver:
            Debug.Log("انتهت اللعبة!");
            break;
    }
}

شرح بصيغة اخرى :
























 











سيتم اضافة معلومات جديدة في هذا الموضوع كلما توفر لدينا الوقت لذلك

فابقى على الاطلاع قدر الامكان ونتمنى للجميع الاستفادة والنفع وتكون صدقة جارية انشاء الله ادعي لنا من قلبك وبتوفيق انشاء الله

اشترك بالقناة لدعمنا

Yokagi

ProvigiL