post

لمحة حول ميزات 2018.1 Unity النسخة التجريبية

السلام عليكم ورحمة الله وبركاته ، طرحت شركة unity تسخة تجريبية للإصدار الجديد لمحركها لعام 2018 تحت رقم إصدار 2018.1 ، حيث قامت بذكر أهم الأجزاء التي سيحتويه والتي ستكون مضمنة في النسخة النهائية من الإصدار، حيث سيحتوي الإصدار على الكثير من التحسينات والإضافات الجديدة مثل نظام التفاصيل الزائدة Tessellation for Metal و إستحدام كرت الشاشة في الإضاءة غير المباشرة GPU Instancing ، إضافة منظور ال PS4 لنافذة Game Resolution وتحسينات على نظام الجزئيات Particle system والتحسين على بلجت التصدير FBX وغيرها الكثير. وهنا ذكر لأهم الميزات لهذه النسخة :

* نظام تصيير جديد  Scriptable Render Pipeline

حيث قدمت الشركة في هذه النسخة نظام إظهار آني real-time rendering ذو الإختصار SRP ، حيث أنه تم تصميمه خصيصاً لمواكبة الأجهزة الحديثة وكروت الشاشة السريعة جداً ، فبدلاً من النظر إلى ملايين أسطر البرمجة بلغة السي ++ أصبح الآن بالإمكان التعامل معه بواسطة لغة السي شارب و عمل شيدرز سريع للمواد Material Shaders بسهولة. حيث ستقوم الشركة بوضع أنظمة جاهزة Templates تستطيع من خلالها إختيار طريقة العرض التي ستلائم مشروعك بتقسيمين : Lightweight  حيث سيكون مثالي لأجهزة الموبايل والأجهزة الخفيفة و High-Definition حيث سيكون ملائم للمواصفات العالية جداً مثل أجهزة الحاسوب وغيرها.

* أداة visual shader creation

حيث تم تطوير هذه الأداة خصيصاً للمصممين والرسامين ، فبواسطة هذه الأداة يمكنك عمل مواد معقدة من خلال طريقة ال Graph Nodes  ،  فبدلاً من كتابة Shaders خاصة بواسطة الأسطر البرمجية أصبح بإمكانك عمل Shader كامل بواسطة ربط ال Nodes ببعضها لتحصل على الشكل النهائي الذي تريده ، وهذه الميزة كانت من أكثر الميزات طلباً من جمهور المطورين وتم الإستجابة لهم من الشركة .

* قريباً C# Job System

تحسينات وتطويرات ستكون متاحة قريباً تزيد من كفاءة اللعبة خاصة لمن يقوم بكتابة الأسطر البرمجة بلغة السي شارب

* تعديل على المواصفات الدنيا System Requirements

قامت الشركة بحذف العديد من الأمور التي كانت ضمنياً متاحة داخل المحرك وذلك بهدف جعل المحرك أكثر مرونة، وتركت باب الحصول على الميزات السابقة متاحة بتنزيلها منفصلة عن المحرك ، فقد قامت بفصل إمكانية إستيراد مواد Substance Designer materials وفصل Wii U  و فصل Windows XP in standalone player و فصل محرر MonoDevelop حيث أنها تنصح بإستخدام فيجوال ستوديو من شركة مايكروسوفت ، وقامت بزيادة مواصفات macOS إلى النسخة 10.11 على الأقل ، وهي تعمل على فصل نظام الجزئيات التقليدي  Legacy Particle System في النسخة القادمة وإستبداله بنظام جديد

يجدر بالذكر أن النسخة هي نسخة تجريبية ويمكنك تنزيلها والمشاركة بها من خلال هذا الرابط : https://unity3d.com/unity/beta

 

 

post

بولي Poly مقصدك للمجسمات الخاصة بالواقع الإفتراضي

السلام عليك ورحمة الله وبركاته، أطلقت شركة Google موقع متخصص بتحميل المجسمات القليلة التفاصيل والتي قامت بتسميته Poly ، حيث أنها أعطت الفرصة لمن يقومون بتطوير تطبيقات الواقع الإفتراضي Virtual Reality المعروف بالإختصار VR والواقع المعزز Augmented Reality المعروف بالإختصار AR ،بإستخدام ألاف النماذج 3D Models القابلة للتحميل المباشر والإستخدام في تطوير التطبيقات السابقة.

استخدم Poly في كل مكان:

من الجدير بالذكر أن معظم التصاميم الموجودة هي من خلال تطبيقي  Tilt Brush  و Blocks  التي تمكنك من تصميم النموذج داخل الواقع الإفتراضي، بالتالي يمكنك تصديره ليراه الجميع، حيث قامت شركة Google  بإيجاد خدمة Poly خصيصاً لرفع تصاميمك من التطبيقين السابقين، لكن هناك إمكانية لرفع النماذج التي قمت بصنعها خارج هذين التطبيقات بواسطة الإمتداد OBJ وملف الخامة الخاصة به MTL . أيضاً يمكنك إستدعاء أي نموذج للتعديل عليه أو إستخدامه في التطبيقين السابقين أو حتى في تطوير لعبتك على محرك الألعاب Unity.

ألاف النماذج تنتظرك:

يمكنك زيارة الموقع poly.google.com لتجد العديد من النماذج، فإن قمت بالبحث عن طائرة مثلاً ووضعت Plane ستجد عشرات النماذج، قم بإختيار أي واحدة منها وقم بتصديرها لتستخدمها في مشاريعك، لكن إنتبه أن هناك بعض النماذج يشترط عليك أن تقوم بذكر إسم صاحبه في حال إستخدمته في مشروعك. ليس هذا فحسب، بل يمكنك تحويل أي مجسم أعجبك إلى صورة متحرك Gif لتستطيع نقلها لأي مكان آخر بعد ذلك، كما في الصورة التالية:

 

 

post

محاكاة حركة أمواج البحار في محرك Unity

 

مقدمة :

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

إعرف ميزانيتك قبل البدء :

عندما أتكلم هنا عن الميزانية، لا أقصد إطلاقًا النقود، وإن كانت جزء من الميزانية إلا أنها ليست كل شيء، فعندما تريد إنجاز أي شيء ( نتكلم هنا عن مجال الألعاب )، تحتاج إلى معرفة تفاصيل معينة مثل، كم من الوقت تجتاجه لإنجاز هذا الأمر، أيضاً هل يتوافق مع متطلبات مشرعك، فمثلاً يمكننا الإستعانة بمحاكاة متوفرة على المتجر ومناسبة، إلا أنها تفتقر للعمل بشكل سلس على متصفح الويب مثلاً, بمعنى آخر أنك لن تستطيع الإستفادة من تلك المحاكاة إن كان مشروعك على متصفح الويب، لذلك لا تضع الوقت بالحصول عليها وتجربتها إن كانت لا تتناسب مع منصتك أصلاً!
مسك، المشروع الحالي الذي أعمل عليه وأديره، تطلب مني محاكاة لبحر يحيط جزيرة، ليس هذا فحسب، بل تطلب أيضاً محاكاة حركة السفن التي يحملها هذا البحر، فللوهلة الأولى قمت إختصاراً للوقت بالذهاب إلى متجر Asset Store للبحث عن شيء يتناسب مع ما أريد، ووجدت العديد منها هذه الأداة :

للوهلة الأولى بدى لي أن هذا ما أريده،  لكن بعد البحث والقراءة عن هذه الأداة وجدت أنها لا تتناسب مع ميزانيتي ( الوقت + المنصة ) فمشروعي سيصدر على منصة Web GL وهذا ال Shader لا يدعها بشكل كلي، فضاع جزء من وقتي بلا فائدة!

الحل أبسط مما تتخيل أحياناً :

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

  • – قمت بوضع وجه Quad واحد وقمت بجعله بحجم كبير لكي يبدوا وكأنه البحر، أي قمت بجعل الـ Scale له 2000 كل كل محور.
  • – ثم قمت بوضع صورة لموج قابلة للتكرار Seamless .
  • – ثم قمت بكتابة أسطر برمجية تقوم بعمل تحريك لإكساء المجسم Texture Scrolling ، كما في الصورة التالية :

عند هذه النقطة، حصلت على البحر كما في الصورة التالية :

لكن هذا وحده لم يكفي بالغرض، فضفاف الجزيرة وإمتداد الرمل يجب أن يبدوا واضحاً لإعطاء مصداقية بتدرج العمق، وكان الحل بتحويل Shader المادة التي أستخدمها من Standard إلى Particle –> Multiply كما في الصورة التالية :

عند هذه النقطة، إنتهيت من البحر نفسه، لكن بقي المشكلة هي حركة الأجسام التي تطفو عليه، فالبحر هنا عبارة عن وجه واحد فقط Quad وليس فيه أي حساب للتضاريس Deformation لكي يتأثر بها مجسم السفينة!

حركة السفينة :

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

بهذه الطريقة حصلت على المطلوب تماماً، وكنت راضياً جداً عن النتيجة!

الخلاصة المستفادة :

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

 

أسامة ديب
مطور ألعاب

 

 

post

بناء نموذج ذو جودة عالية وإظهاره داخل محرك Unity

خطوات تحويل صور إلى مجسم ثلاثي الأبعاد لإظهاره داخل محرك Unity

 لمحة عن المقالة:

السلام عليكم ورحمة الله وبركاته، في الآونة الأخيرة ظهرت برامج تساعد المنمذجين 3D Modelers لبناء نماذج حقيقية Models تحتوي على تفاصيل كثيرة High Details بالإضافة إلى الخرائط الخاصة بها Textures ، ولعل من أشهرها تطبيق Reality Capture ، هذه النماذج غالباً تحتاج لإعادة تنقيح قبل إستخدامها في محركات الألعاب بسبب حجمها الكبير، وغالباً يتم ذلك بواسطة برامج النمذجة مثل 3Ds Max أو Maya، قامت شركة Unity بكتابة درس تفصيلي من 100 صفحة تقريباً خطوة بخطوة من تجهيز الأدوات إلى تجهيز النموذج لوضعهم داخل لعبتك، سنقوم بسرد أهم العمليات المستخدمة في المقالة ثم وضع رابط للنسخة المفصلة.

الأدوات والتطبيقات المستخدمة :

بالنسبة للأدوات، تتراوح حسب قدرتك وحسب إمكانياتك المتاحة، كل ما كانت أدوات التصوير أفضل كلما حصلت على جودة أعلى، يمكنك إستخدام كاميرا الموبايل لكن النتيجة بالتأكيد لن تكون كمن يقوم بإستخدام كاميرا متخصصة للتصوير الفوتوغرافي، الكاميرا المستخدمة في المقالة هي Canon 6D مع العدة الخاصة بها.
أما بالنسبة للتطبيقات التي سيتم إستخدامها للتعديل وللإخراج النهائي فهنا أهمها:

– Reality Capture : البرنامج الذي ستستخدمه لتحويل الصور إلى مجسمات ثلاثية الألعاب ، رابط موقع البرنامج هنا.
– Autodesk 3ds Max : البرنامج الذي ستقوم بتعديل النموذج الأولي Raw model وإعادة بناءه Retopology لكي يصبح جاهز للإستخدام، أيضاً سيستخدم لعملية فرد الخرائط Unwrap UV ، رابط موقع البرنامج هنا.
– Adobe Photoshop : البرنامج الذي ستستخدمه لعمل تعديل على الخرائط الناتجة من البرنامج الأول Textures بحيث تتناسب مع النتيجة النهائية، رابط موقع البرنامج هنا.
– Unity : بالتأكيد لا ننسى المحرك الذي سنقوم بإظهار النموذج النهائي عليه، محرك اليونيتي مجاني ويمكن تحميله من هنا.
هناك بعض التطبيقات التي ستحتاجها في بعض التعديلات البسيطة أيضاً.

ما قبل التصوير:

هناك بعض القواعد الأساسية التي يجب أن تأخذها بالحسبان قبل البدء بعملية التصوير، أهمها:
– الإجابة على The 3 W’s : الشيء الذي تود تصويره What،  أفضل موقع يمكن الحصول عليه Where، أفضل وقت تستطيع الحصول على جودة عالية عليه When.
– صور أم فيديو : في النهاية يجب الحصول على صور من كل الزوايا لإعطاء إمكانية لبرنامج Reality Capture الحصول على جودة عالية.
– إعدادات الكاميرا : النتيحة تختلف كلياً حسب إعدادات الكاميرا المختارة، يجب أن تكون على دراية تامة بهذه الإعدادات.

الحصول على الصور :

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

معالجة النموذج :

بعد الحصول على الصور ووضعهم داخل تطبيق Reality Capture سيقوم بمعالجتهم وتحويلهم إلى مجسم 3D Model ، يجدر الإشارة إلى أن النموذج الناتج غالباً يحتاج إلى تعديل، سواءاً بإعادة ترتيب الأوجه Polygons Retopology ، أو بإعادة تركيب طريقة فرد المجسمات على الخريطة Unwrap UV Texture ، ويتم ذلك بإستخدام تطبيق 3ds Max .

معالجة خرائط النموذج :

أو ما يسمى 3D Model Textures ، وهناك العديد من الخرائط التي يتوجب عليك العناية بها للحصول على جودة عالية في إظهار النموذج، حيث ستستخدم هذه الخرائط في إخراج المادة النهائية Material التي تتأثر بفيزيائية المادة، ويتم إستخدام تطبيقات للحصول على هذه الخرائط أشهرها Xnormal، وهنا لمحة عن أهم الخرائط Textures المهمة :

– خريطة الألوان الأساسية Albedo Map: أو تسمى Diffuse Map، هذه الخريطة أساسية وتحتوي على الألوان الحقيقية للمجسم.
– خريطة التفاصيل Normal Map : وتحتوي على معلومات يتم إستخدامها لإظهار تفاصيل إضافية على المجسم إستناداً إلى زاوية الضوء.
– خريطة الظل الغير مباشر Ambient Occlusion Map : وتحتوي على الظلال الخفيفة التي تتواجد في حال عدم وجود مصدر ضوء مباشر على المجسم.
هناك العديد من الخرائط الأخرى أيضاً منها : Height Map, Vertex color Map,Object space Normals Map.

تجميع النموذج النهائي :

بعد الحصول على نموذج نظيف يمكن تصديره كـ FBX ، وبعد الإنتهاء من الخرائط الأساسية يمكن تصديرها كـ TGA لجودة عالية أو يمكن تحويلها إلى PNG لحجم أقل، بعد السابق يتم تجميعهم وإضافتهم داخل محرك الألعاب Unity ، لتظهر كما في الصورة التالية:

الكتاب الإلكتروني الأصلي الذي يحتوي على التفاصيل تجده هنا.

post

كيف تصبح مصمم ألعاب ناجح

تعرف على مصمم الألعاب وما هي المهارات التي يجب أن يمتلكها

دور مصمم الألعاب Game Designer

السلام عليكم ورحمة الله وبركاته، يبقى الدور العام لمصمم الألعاب Game Designer هو كيفية عمل اللعبة بشكل صحيح أثناء عملية تصميمها، فهو يقوم بوضع الأهداف Objectives و القواعد Rules و الإجراءات Procedures ، ويقوم بوضع القصة وإعطاءها الحياة وهو أيضاً المسؤول عن التخطيط لكل ما يجعل اللعبة مقبولة، وهو من يقوم ببناء المرحلة Level Design سواءً بناءها على أسس الهندسة المعمارية أو رسم سكيتشات على الورق Blueprint، وهو أيضاً يقوم بتنسيق القصة (السيناريو العام) للعبة. فكل من كان يحلم في عمل مميز في هوليوود أصبح الآن بإمكانه فعل ما يريده بواسطة كتابة سيناريو القصة وإخراجها بشكل كامل، التخصصات السابقة أصبحت الآن متجزءة بشكل تخصصات كاملة، كل شخص مسؤول عن إحداها، لكن مطور الألعاب الناجح يجب أن يكون ملم بتفاصيل كل تخصص من باب تعلم شيء عن كل شيء، ولكن ما هي الأمور المطلوبة لتصبح مصمم ألعاب؟ وما هي المواهب والقدرات المطلوبة؟ وما هي أفضل طريقة لتصميم لعبة؟ هذا كله سنكتشفه من خلال هذه المقالة.

مصمم الألعاب يضع نفسه بدل اللاعب

يتمركز دور مصمم الألعاب وقبل كل شيء أن يتصرف وكأنه اللاعب، فالمصمم يجب أن يشاهد لعبته من زاوية أخرى وهي الزاوية التي يرى بها اللاعب Player هذه اللعبة، وعلى الرغم من أن هذا شيء سهل ولكنه للأسف يتم تجاهله، مما قد ينتج فجوة كبيرة في اللعبة بسبب هذا الخطأ البسيط، من البسيط أن نقوم بالتأكد أن تصميم الجرافيكس والقصة والبرمجة تسير بشكل صحيح، ولكننا نغفل عن أهم ميزة في اللعبة، وهي وجود الإثارة التي تدمج جميع ما سبق لنخرج بشيء متميز. وكمصمم ألعاب Game Designer فإن الجزء الأكبر من دورك يتمثل بالتركيز والحفاظ على تجربة اللاعب User Experience وملاحظة الأمور التي سيكتسبها من عملية اللعب، وأيضاً يجب أن لا تجعل الأمور التقنية (جرافيكس، وتأثيرات، وبرمجة) تطغى على هذا الجانب. دع كل شخص يهتم بتخصصه، فدع مسؤول الرسوميات Art Director يبدع بالتخيلات، ودع المنتج Producer يهتم بالميزانية، ودع المدير التقني Technical Director يهتم بمحرك الألعاب ومشاكله فمهمتك الأساسية هي أنه عندما يتم تسليم اللعبة للاعب يجب أن يندهش من طريقة اللعب Game play وببساطة أن يقول: !!Wow ولا يدع اللعبة في وقت قصير. وعندما نذكر مصطلح Game play يجب مباشرة أن يتبادر لذهنك الأمور التي سيكتسبها اللاعب من خلال لعبة وما هي الخبرات والأسس التي سيجدها في اللعبة.

 

مختبري اللعبة Game Testers

أي لعبة يجب أن تحتوي على من يختبرها Game Testers، وهم الأشخاص الذين يقومون بلعب اللعبة كاملة واستخراج الخلاصة إن كانت عن طريق زيادة أمور.. أو تصحيح أمور أخرى، وأيضاً هناك منظور مختلف عندما تقوم بمشاهدة شخص غيرك يقوم بعملية اللعب، فستولد أمور لم تكن تحسبها والتي من هدفها إثراء لعبتك. فستقوم بملاحظة اللاعب في تصرفاته، وعلى ماذا يركز، وما الأمور التي قد تسبب له حالة ملل، فكل ما يقوله يجب أن تدونه وتأخذه بالحسبان، فهو سيكون دليلك لتسليط الضوء على هذه الجوانب. وإن كنت تريد أن تكون في موقع مختبري اللعبة فيجب عليك وضع الأهداف الرئيسية التي ستقوم بها، وبالنهاية يمكنك أخذ جميع ميزات المختبر لتصبح مصمم ومختبر في نفس الوقت.

وهناك الكثير من المصممين الذي لا يدرجون الـ Game Tester بعملية تصميم اللعبة، لربما بسبب ضيق وقت العمل، أو أنه لا يريد أن يقوم المختبر بإزالة أشياء يظنها المصمم تضفي إيجابية على اللعبة، أو لربما أنهم يعتقدون أن ذلك سيكلفهم الكثير من النقود، أو أن اعتقادهم بأن عملية الاختبار تأتي ما بعد التسويق ومن خلال اللاعبين عبر العالم ولكنهم فعلياً يقومون بتضييع المزيد من الوقت والمزيد من التكلفة وأيضاً الكثير من الإبداع المتوقع من مختبري اللعبة، وذلك بسبب أن اللعبة ليست بطريق واحد للاتصال One-way بمعنى أنه ليس عليك طرح اللعبة ومن ثم إنتظار قدوم النقود!!، وليس الأمر أن يقوم المصمم بالتأكد من أن كل جزء من الأجزاء الوظيفية باللعبة تعمل بنجاح، الأمر يكمن في إيجاد الميزات التي يحب اللاعب أن تكون موجودة في لعبته المثالية Game Play وبالتأكد هذا لن تقوم بإكتشافه إلا من خلال الـ Game Tester.

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

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

 

المهارات

ما هي الأمور المطلوبة لتصبح مصمم ألعاب؟ بالطبع لا يوجد إجابة واحدة، وأيضاً لا يوجد طريق واحد للنجاح، فهناك بعض المزايا والمهارات المشتركة في مصمم الألعاب المتميز، أولها يكمن في حب الألعاب نفسها، فإذا كنت لا تُحب ذلك، فلن تستطيع أبداً النجاح في هذا الأمر لأنك لن تقوم بالجلوس الساعات الطويلة لتقوم بالإبداع واختراع اللعبة وإعطاءها حقها.

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

1 – مهارة التواصل مع مختلف الأشخاص

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

ومهارة الإتصال لا تقتصر على الكتابة وفن الخطابة، بل هي تعني أيضاً فن الإستماع والإستعداد للتناقش بوسطية ومنطقية، فإستعدادك لسماعك رأي مختبري اللعبة Game Tester ولزملائك في الفريق Teammate سينتج أفكار جديدة وباتجاهات جديدة، فما هي ردة فعلك عندما تسمع شيئاً لا تحب سماعه؟ نحن نعلم أنه من الصعب أن نقدم بعض التنازلات، ولكن هنا الأمر مختلف ويجب عليك التنازل في هذا الموضوع لأنه من هدفه زيادة الإنتاجية، وفي الحقيقة أن معظم مصممي الألعاب يعتقدون أنه لا يجب التنازل أبداً عن الرأي والأفكار التي جمعها، ولكن التنازل مطلوب في بعض الأمور فإن كان الرأي الجديد جيداً فسيقوم بإضافة أفكار من هدفها أن تعطي الإبداع للعبة. فعلى سبيل المثال، قد ترى أن بعض التأثيرات من هدفها أن تقوم بإضافة أشياء مفيدة للعبة تجعلها أجمل، ولكن من الناحية التقنية Technical، لا يمكنك فعل ذلك لأنها مكلفة على نوع الجهاز الذي ستنزل عليه اللعبة، ولربما أن الوقت غير كافي لعمل، ولكن ماذا لو قدّم المبرمج طريقة ثانوية للتأثيرات التي تريد بحيث تكون قابلة لبرمجتها وبوقت قصير وبكلفة أقل؟ هل ستحتفظ برأيك الأول في ظل هذه المعطيات؟ في النهاية يكمن هدفك في إيجاد الفكرة المناسبة التي يمكن تكييفها من كل متطلبات العمل، فيجب أن تصغي لأي رأي جديد من هدفه إنجاح المشروع.

2 – مهارة العمل ضمن فريق

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

ولأنك مصمم ألعاب، فستقوم بالتعامل مع معظم التخصصات السابقة وستفهم أنه لكل شخصية وجهة نظر مختلفة عن سابقتها وطريقة تفكير تناسب المنظور الذي يرى منه، فعندما تتحدث مع مبرمج في قضية، ستجد إختلافاً في الرأي بينه وبين المنتج الذي يهتم بتأمين الجانب المادي، وهنا يأتي دورك لتكون حلقة الوصل بين جميع الشخصيات والوسيط بينهم للتأكد من أن هذه المجموعة كلها ستقوم بعمل اللعبة كما هو متوقع إلى النهاية.

3 – قادر على معالجة الأمور عند الضرورة

في أغلب الأحيان وعندما يكون عندك حط زمني معين للمشروع Deadline ، ستضطر لأخذ قرار أحياناً يؤثر سلباً على جودة اللعبة ككل أو على سير عملية التطوير، ومن شأنه أن يولد مشاكل مستقبلية تستمر بالظهور واحدة تلو الأخرى حتى تصبح اللعبة ككل مجموعة من المشاكل لا يمكن حلها!!، فالألعاب نظامها ضعيف، وكل العناصر ترتبط إرتباطاً وثيقاً ببعضها، فعند ظهور خلل في عنصر معين، سيؤثر هذا العنصر سلبياً على كل العناصر وبالتالي على كل المشروع، وهذه القضية خطيرة خصوصاً في المراحل النهائية لتصميم اللعبة، فحين ينفذ الوقت ستظهر بعض المشاكل التي لم تتمكن من حلها، وستضطر لحذف بعض المراحل وبعض العناصر للحفاظ على العناصر التي تم تصميمها بشكل سليم، إنها كارثة حقيقية، ولكنها بالنهاية تساعدنا على فهم سبب إحتواء الكثير من الألعاب على تناقضات والتي غالباً ما تميت اللعبة قبل وصولها للسوق (Dead On Arrival (D.O.A بفترة وجيزة.

4 – قادر على الإستنباط من حوله

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

إن أردت أن تصبح مصمم ألعاب مميز حاول أن تقوم بالنظر للعالم من حولك على أنه لعبة كبيرة جداً تحتوي مهمات ومستويات ومراحل مختلفة. حاول تفسير الوظائف الأساسية والمهمة في حياتك، وحاول إكتشاف القواعد التي تقوم عليها، حاول معرفة كيفية عمل الآليات والإلكترونيات، بإستنتاجك لها ستحصل على إمكانية بناء أنماط  وأفكار جديدة لم يتم التفكير بها سابقاً، كل ما عليك فعله هو كتابة ملاحظاتك وتحليلاتك ومعرفة أساساتها وستصبح بإذن لله من أنجح المصممين.
لكن لماذا لا نقوم بالنظر إلى الألعاب الموجودة في السوق على أنها مصدر للإلهام؟ فعلياً إن قمت بذلك فستقوم بعمل فكرة تم إيجادها سابقاً وبالتالي لن تحصل على ميزات الأفكار الجديدة، حاول أن تقوم بالنظر حولك وإكتشاف شيء جديد، ودائماً إجعل الحياة المحيطة بك هي مصدر لإلهامك لا ألعاب سابقة تم عملها. ومن أهم القضايا التي تلهم مصمم الألعاب بأفكار جديدة هي: العلاقات الإجتماعية، طريقة جمع النقود، البيع والشراء، المنافسة في العمل، وغير ذلك. مع ملاحظة أن كل ثقافة وبلد وطبيعة في العالم يمكن أن تغرس فيك فكرة لعبة جديدة، فيمكنك بالتالي إختيار أي فكرة تراها جيدة وتقوم بتطبيقها.
فمثلاُ في طبيعة الأرض أفكار مشعبة ومعقدة وكثيرة مثل: مستعمرات النمل، فهم منظمون إلى مجموعة من القواعد، وهم يتنافسون ويسعون لإثبات أنهم الأ فضل من خلال جمعهم الكثيف للغذاء، ويتنافسون مع مستعمرات أخرى لإثبات قدرتهم على العيش، والأمر نفسه مع كل أنظمة الحياة، من طرق إثبات القدرة على الحياة لدى الأسود الإفريقية إلى فعل ذلك لدى القطة الموجودة في أزقة الطرق.
قم بدراسة الأنظمة السابقة وقم بتقسيمهم: لعناصر objects و علاقات relationships، وسلوكيات behaviors، وإلى غير ذلك. وحاول إكتشاف كيفية التفاعل مع العناصر الأخرى، فلربما تخلق أساس لفكرة جديدة، وهذا الشيء نفسه عندما تنظر كيف يتم التعامل مع الأشخاص في مجال السياسة، وفي مجال الفن، وفي العلاقات الإجتماعية مثل الزواج، فهناك قصة لعبة في كل علاقة. من خلال إستنتاجك لجميع ما سبق، فإنك لا تكتسب زيادة المهارة في كونك مصمم ألعاب فحسب، ولكنك تفتح أفاقاً جديدة وتخيلات في ماهية لعبتك و قواعدها وطرق تصميمها.

5 – قادر على الإبداع

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

من أكبر وأشهر مصممي الألعاب Nintendo’s Shigeru Miyamoto يقول:
“دائماً ما أنظر لطفولتي ولأحلامي وهواياتي التي تتميز بالإلهام عندما كنت طفلاً، ذهبت لحديقة ووجدت بحيرة كانت لطيفة ومذهل بالنسبة لي أن أعثر عليها وعندما تجولت في البلدان بدون خريطة، حاولت شق طريقي الخاص، ووجدت أشياء مذهلة، وأدركت مدى سعادتي بمغامرة مثل هذه.”
“When I was a child, I went hiking and found a lake. It was quite a surprise for me to stumble upon it. When I traveled around the country without a map, trying to find my way, stumbling on amazing things as I went, I realized how it felt to go on an adventure like this”
وفي كثير من ألعابه قام بالإستفادة مما حلم به ورآه في طفولته.

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

 

post

#13 المصفوفات Arrays – البرمجة بواسطة #C

رمز فتح مرحلة هذا الدرس في تطبيق طورني : YIL

تَعلُمُ البرمجةِ للمبتدئينَ كلياً بواسطةِ #C –  المصفوفات Arrays

السلام عليكم و رحمة الله و بركاته , و أهلا بكم في درس جديد من دروس سلسلة تعلم البرمجة للمبتدئين كلياً بواسطة الـ #C

في درس اليوم سنتكلم إن شاء الله عن المصفوفات أو الـ Arrays

تعريف المصفوفات :

يمكن تعريفها على أنها وعاء يحتوي على قيم بداخلها , أو هي عبارة عن صندوق فواكه يحتوي على عدداً من التفاح على سبيل المثال , و كل تفاحة لها قيمة الخاصة  ، و الصندوق الحامل لها يسمى المصفوفة .

 

نذهب إلى File  ثم New ثم project و نتأكد من اختيار #Visual Cو نختار Console App
تكلمنا سابقاً أن المكان المخصص لكتابة الأكواد البرمجية هو بين قوسي الدالة void Main

كي لا نضيع الوقت قمت بكتابة هذه الاسطر سابقاً و سأقوم بلصقها هنا

لاحظو أنني قمت بتعريف خمسة متغيرات هنا ، و كل متغير يحتوي على قيمة معينة

نريد الآن أن نقوم بالبحث عن الرقم 16 ، عندها سأكون مجبراً على كتابة جمل شرطية if statement  لكل متغير لكي أحصل على القيمة و أقارنها بالقيمة المطلوبة

في البداية نسأل هل قيمة المتغير number1 تساوي 16

ثم ننتقل إلى الثاني … الثالث ……. الخامس و هكذا

في هذه الحالة سأكون مضطراً لكتابة كل المتغيرات و كتابة عدد كبير من جمل if statement

هنا يأتي دور المصفوفة Array

سأقوم مبدئيا بتحويل الجمل السابقة إلى جمل ملاحظات

يمكن تعريف الـ array كالتالي

;int[ ] myNumber = new int [5]

لاحظو في هذا السطر قمت بتعريف مصفوفة اسمها myNumber  من النوع integer و تحتوي على خمس قيم

قمنا بكتابة الأقواس المربعة بعد النوع مباشرةً

الآن أصبح عندي 5 عناصر أو خمس خانات استطيع التعامل معهم

كيف يمكنني أن أقوم بإدخال قيم إلى هذه العناصر ؟

يمكننا فعل ذلك كالتالي :

;myNumber[0] = 10
;myNumber[1] = 22
;myNumber[2] = 14
;myNumber[3] = 66
;myNumber[4] = 22

الخانة الموجودة بين القوسين [ ] تسمى index

لذلك عندما تريد استدعاء عنصر ضمن المصفوفة تضع اسم المصفوفة و رقمه بين الأقواس [  ] مع ملاحظة أن الخانة الأولى يجب أن تحمل الرقم 0

إذاً من خلال الأسطر السابقة قمت بإدخال قيم إلى العناصر الموجودة ضمن الـ Array

الآن ماذا لو أردت أن أقوم بعملية استدعاء للقيم ؟

سأقوم من خلال التالي بطباعة قيمة أحد العناصر في المصفوفة

;Console.WriteLine(myNumber[2] )

 و لا ننسى كتابة الدالة ReadLine لنتمكن من مشاهدة النتائج.

نقوم بتشغيل التطبيق و نلاحظ أن التطبيق قام بطباعة القيمة 14

طريقة ثانية

الآن هناك طريقة ثانية لتعريف المصفوفة و إدخال القيم بها مباشرةً .

;int [ ] myNumbes = new int [ ] {1, 5 , 3 , 4 , 66 , 55 }

و كما تكلمنا لو اردنا طباعة القيمة رقم 3 فسنكتب :

; Console.WriteLine(myNumber[2] )

 

هناك إمكانية لطباعة ” عدد العناصر الموجودة داخل المصفوفة “

عن طريق التالي :

;Console.WriteLine(myNumber.Length)

هنا قمنا بطلب أخذ الـ Length ، و هو كم عدد العناصر الموجودة ضمن المصفوفة

و لو قمنا بعمل تشغيل للتطبيق ، سنحصل على القيمة 6 ، و هو فعلاً عدد عناصر المصفوفة السابقة .

في الاسطر السابقة استعملنا النوع integer ، و بالمثل يمكننا استعمال أي نوع آخر

مثلا هنا أقوم بكتابة

;  string[] myStrings = new string[] { “Ahmad”, “Mohammad”, “Shady”, “Safaa” }

و بالمثل سنقوم بطباعة قيمة العنصر رقم 3

 

;Console.WriteLine(myStrings[2] )

و لاحظ أنه قام بطباعة شادي

 

تحدثنا في المحاضرة السابقة عن For Loop Statement  التي تقوم بعملية تكرار لأوامر معينة ، لاحظة الآن سأقوم باستخدامها لطباعة كل عناصر المصفوفة

و ذلك كالتالي :

 

لاحظو أنه قام بطباعة كل عنصر من عناصر المصفوفة و ذلك بناءً على الـى Length

لاحظو أن عدد العناصر في المصفوفة هو 4 و هذا يعني أن myStrings.Length يساوي 4

و لذلك عندما وصل إلى الرقم 3 لقيمة i  فهو فعلياً وصل إلى آخر عنصر في المصفوفة ، و عندما أصبحت i = 4 يقوم بالخروج من الحلقة و ذلك لأن 4 تساوي 4 و ليست أصغر منها طبقاً لشرط الحلقة و بالتالي بعد أن أصبح شرط الحلقة غير محقق قام بالخروج منها

حلقة foreach

هناك أيضاً حلقة يتم استخدامها بشكل كبير مع المصفوفات ، ألا و هي  foreach

شرح هذه الحلقة :

بعد إضافة foreach  نقوم بتعريف متغير من النوع الذي تم تعريف المصفوفة به
و هنا قمنا بتعربفه من النوع string  تبعاً لنوع المصفوفة myStrings و بالنسبة لاسم المتغير الجديد فهو اختياري لأننا سنقوم باستخدامه حصراً ضمن الاقواس {  }

ثم نقوم بإضافة الكلمة المحجوزة in ثثم اسم المصفوفة و ذلك بدون أقواس [  ]

عمل الحلقة :

في كل مرة سيقوم بأخذ أحد العناصر (على الترتيب) ثم يقوم بإسناده الى المتغير name و يقوم بطباعته

و لاحظ أننا لم نقم بإعطائه الـ index  الخاص بالعنصر و إنما طلبنا منه أن يقوم بجلب جميع العناصر الموجودة داخل المصفوفة

 

 

هناك أيضاً إمكانية للتعامل بشكل أكبر مع المصفوفات :

 

إذا كان لدي نص معين و أردت أن أقوم بطباعة هذا النص بالعكس ( عمليةReverse )

هناك نوع جديد من أنواع البيانات هو النوع char و تكلمنا سابقاً أنه يقبل حرفاً واحداً فقط

;’char x = ‘a

الآن لدينا التالي :

;!! string myWords = “i need to go to the hospital now

يمكنني  أن أحصل على مصفوفة من myWords عن طريق الجملة :

;()Char[ ] x = myWords.ToCharArray

من خلال هذا الجملة نقوم بفصل جميع الحروف الموجودة في النص و تحويلها إلى عناصر في المصفوفة

myWords.ToCharArray تقوم بالعودة بمصفوفة يتم اسنادها للمصفوفة x  من النوع char

و نلاحظ هنا أننا قمنا بكتابة char و ليس فقط Array في myWords.ToCharArray لأنني أريد تحويل جميع الخانات خانة خانة إلى النوع char

الآن لو قمت بوضع بكتابة الحلقة foreach كما في التالي :

لو قمت بتنفيذ التطبيق سيقوم بطباعة الجملة حرف حرف في كل سطر

و لعكس المصفوفة نقوم بكتابة التالي :

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

 

طبعاً المصفوفات لها استخدامات أكثر مما تم ذكره ، و الدروس القادمة ستكون كفيلة بصقل مهارتك باستخدام الـ Array

نصل الآن إلى نهاية هذا الدرس ، ألقاك في الدرس التالي إن شاء الله .

ملخص الدرس :

تعريف المصفوفات:

السلامُ عليكم ورحمةُ اللهِ وبركاته، وأهلاً بكمْ في الدرسِ الثالث عشر من دروسِ سلسلةِ، تَعلُمِ البرمجةِ للمبتدئينَ كلياً بواسطةِ السي شارب، في هذا الدرس سنتعرف على المصفوفة وكيف يمكننا تعريف عدد كبير من المتغيرات تحت سقف واحد، وكيف أنه يمكننا إستدعاء العناصر بواسطة حلقات تكرارية.

المصفوفة Array :

يمكن تشبيه المصفوفة أنا عبارة عن صندوق فاكهة يحتوي تفاح، حيث أن هناك عدد كبير من التفاح غير أنه غير متساوي في المواصفات، فهناك الكبير وهناك ذو الحلاوة أكثر وهناك ذو الحمرة أكثر، غير أنهم يتشاركون بصفه أنهم جميعاً من النوع الواحد ألا وهو التفاح، والمصفوفة يمكن أن تكون أي نوع من أنواع البيانات الموجودة بداخل لغة السي شارب، سواءاً كانت نصية أو رقمية أو حتى متجهات ثلاثية البعد.
ويتم حجز المصفوفة بكنابة نوعها ثم أقواس مربعة ثم إسم المصفوفة ثم إعطاءها رقم للعناصر التي ستكون بداخلها هكذا :
int[] myNumbers = new int[5];

أو كما في المثال التالي :

مصطلحات الدرس :

Arrays :

Length :

foreach :

 index  :

Zero Base :

Reverse :

char :

ToCharAray :

 

post

#11 التعبيرات Expressions – البرمجة بواسطة #C

رمز فتح مرحلة هذا الدرس في تطبيق طورني : OSO

تَعلُمُ البرمجةِ للمبتدئينَ كلياً بواسطةِ #C –  العوامل والجمل والتعبيرات

العوامل والجمل والتعبيرات:

السلامُ عليكم ورحمةُ اللهِ وبركاته، وأهلاً بكمْ في الدرسِ الحادي عشر من دروسِ سلسلةِ، تَعلُمِ البرمجةِ للمبتدئينَ كلياً بواسطةِ السي شارب، سنتعرفُ على كافة أنواع الجمل البرمجية في لغة السي شارب، بالإضافة إلى كافة عوامل Operators اللغة و مفهوم التعبير Expression داخل تراكيب هذه اللغة. كما تعلمنا لبداية مشروع جديد نذهب إلى File ==> New ==> Project ، و سأقوم باختيار #Visual c  و من ثم Console Application ، وتكلمنا سابقاً أن المكان المخصص لكتابة الكود هو بين قوسي الدالة void Main ، سأقوم بتعريف المتغيرات التالية :

int x,   y,   z;

في السطر السابق، تسمى العملية عملية تعريف المتغيرات و تكون طبيعة هذه الجملة هي Variable Declaration  ، و هي جملة برمجية لحجز المتغيرات في الذاكرة، كما تعلمنا في الدروس السابقة، سأتابع وأكتب التالي :

;x  =  6
;y  =  44
;z  =  66

تسمى الأسطر السابقة: أسطر إسناد للمتغير Variables Assignment ، ولكن نتذكر وظيفة هذه الأسطر، دعنا نكتب جملة ملاحظة عنها، و تكلمنا عن كيفية كتابة جمل الملاحظة ، و تكلمنا عن أهمية جمل الملاحظة لتذكيرك بوظيفة الأسطر التي قمت بكتابتها، نكمل كتابة :

x  =  5 + 7;

في السطر السابق، استخدمنا عامل Operator الجمع المسمى Addition operator ، و إذا قمنا باستعمال الإشارات الباقية لعمليات الحساب فستكون كالتالي :

x  =  5 + 7;
y  =  4 – 2;
z  =  10 * 50;
x  =  10 / 2;

وهذه العوامل هي العوامل الأساسية للعمليات الحسابية Mathematical Operators ، أما في حال كانت القيمة المراد اسنادها لمتغير عبارة عن شيء مركب، فيمكن استخدام الأقواس لتحديد ترتيب أولويات العمليات المطلوبة كما في المثال التالي :

x  =  x + y * x – z;

قد تجد أن هذا التركيب للوهلة الأولى غير مفهوم لديك، و قد لا تكون على دراية بكيفية ترتيب العمليات الحسابية، فستسأل نفسك ما هي العملية التي تجري أولاً ، هل y * x ، ثم يتم جمع ناتجهما مع x  ثم يتم لاحقاً طرح z أم ماذا ؟ والحقيقة أن ترتيب الأولويات Order of Operations  هنا يتم باستخدام الأقواس ، حيث يتم إضافة الأقواس لإعطاء أولويات العمليات الحسابية و لتسهيل القراءة . فتصبح هذه الجملة بالشكل التالي :

x  =  ( x + y ) * ( x – z );

و يصبح المعنى ؛ قم بجمع (  x و y ) ثم قم بطرح ( z من x ) ثم قم بضرب الناتجين ببعضهما ، و حدث ذلك لأن الأولوية للأقواس دوماً

 

نكتب الآن :

If ( x == y)
}

{

تعلمنا أنه إذا اردنا أن نقوم بمقارنة ؛ هل قيمة هذا الجانب (x) تساوي قيمة الجانب الثاني (y)

هذا الـ Expression الموجود بين القوسين يسمى Equality operator و هو يقوم بعمل مقارنة بين طرفين و يقوم بإعطاء قيمة منطقية (True or False) و هذا عبارة عن Expression  و ليس عبارة حسابية أو إسناد قيم ، فعندما نرى x = 5 فهذا يعدّ عملية إسناد ، أما اذا رأينا إشارة مساواة مزدوجة فيكون عبارة عن Expression  و تكون القيمة True or False

 

لدينا هنا Expression  جديد يمكن أن نستخدمه ؛ ألا و هو :

If ( x < y )
}

{

هذا الـ Expression يسأل هل x  أكبر من y   ؟

ملاحظة: يخطئ البعض في تمييز الاشارتين أكبر و أصغر (  < & >)

لذلك بإمكانك اعتبار أن فتحة الإشارة مشابهة لفم السمكة فهي تأكل الصغير و لا تأكل الصغير ، و يبقى الكبير مواجهاً لفم السمكة

و يسمى هذا الـ Expression  بـ ” Greater than operator “

و بالمقابل لدينا الـ Expression  المسمى “Less than operator”

و تكون جهة فم السمكة بالجهة المعاكسة للـ Expression السابق

 

لدينا الآن Expression  جديد ، و هو يسأل هل الطرف الأول x أكبر أو يساوي y

و  نلاحظ أن إشارة المساواة تمت اضافتها بعد العامل Greater than و

يسمى هذا الـ Expression بالاسم ” Graeter or equal operator ” و يكون بالشكل التالي :

if ( x >= y)
}

{

و بالطبع لدينا بالمثل الـ Expression  المعاكس للسابق و يكون بالشكل التالي :

if ( x <= y)
}

{

 و هو يسأل هل الطرف الأول أصغر أويساوي الطرف الثاني ؟ و يسمى Less than or equal operator

 

الآن سوف نتعلم إمكانية عمل أكثر من Condition  داخل الـ Expression  الواحد

تكلمنا سابقاً أن جملة الشرط تحتاج إلى شرط موجود بين القوسين (….)  لتقوم بتحديد هل هو [True or False]

الآن سوف نكتب التالي :

if ( x > y && z > y )
}

{

في هذا الـ Expression يلزم تحقق الشرطين (x > y) و (z > y) حتى تكون نتيجة الشرط ككل True  و يمكن توضيح ذلك من خلال التالي :

True && True = True

True && false = false

False && True = False

False && False = False

 

و في حال كانت النتيجة True  يتم تنفيذ جملة الشرط
و لتسهيل القراءة نستخدم الأقواس كما يلي :

if  (  (x  > y) && (z > y)  )

و يسمى العامل الشرطي ”  و  ” /  Conditional AND operator

 

نذهب الان لدراسة العامل الشرطي ”  أو  ” / Conitional OR operator  

و يكون بالشكل التالي :

if  (  (x  > y) || (z > y)  )

و هو يعني هل التعبير (x > y) أو (z > y) صحيح ؟؟

و يكتفي بتحقق أحد الشرطين لاعتبار النتيجة النهائية True و يمكن تلخيص ذلك كما يلي :

True || True = True

True || false = True

False || True = True

False || False = False

و كما نعلم إذا كانت القيمة النهائية True يتم تحقيق الشرط و البدء بتنفيذه

و الفرق بين ” العامل الشرطي (و) و العامل الشرطي (أو) هو أن العامل الشرطي (و) يتطلب تحقق كلا الشرطين ليعطي النتيجة True  … أما العامل الشرطي (أو) فيكتفي بتحقق أحدهما أو كليهما ليعتبر النتيجة النهائية True.

 

لاختبار ما سبق نكتب

;y = 6
;z = 7

if ( x == y)
}
;Console.WriteLine(“True”)
{

else
;Console.WriteLine(“False”)

;()Console.ReadLine

و يجب أن نضع الدالة Console.ReadLine  لنتمكن من مشاهدة نتيجة التطبيق

و نلاحظ أن كل ما كتبناه سابقاً لن يتم تنفيذه ،  و ذلك لأنه عبارة عن جمل شرطية فارغة

ملاحظة : كما تكلمنا سابقاً اذا كان لدينا تحت if  جملة واحدة فيمكننا إزالة الأقواس

عند تشغيل البرنامج نلاحظ أنه لا يعطينا أي شيء ، فقد وصل إلى نهايته حيث ينتظر ادخال جملة من المستخدم تنتهي بالزر Enter

نقوم بإضافة الجملة else

else
;Console.WriteLine(“False”)

نعود و نشغل التطبيق
و نلاحظ أن التطبيق أعطانا القيمة False ، و ذلك لأنه بالفعل الشرط لم يتحقق ، حيث أن x لا تساوي y

 

كذلك لدينا بالمثل الـ Condition  الذي يقول هل x لا تساوي  y

و تكون كتابته بالشكل

if ( x != y)
}

{

و لو قمنا بتطبيق هذا الكلام على تطبيقنا السابق لوجدنا النتيجة True  لأنه فعلا x لا تساوي y .

 

لنقم بتطبيق التالي على تطبيقنا السابق

نقوم بتغيير التعبير إلى (x > y) فنجد أن التطبيق سيعطينا False  و ذلك لأن x في الحقيقة أصغر من y

و لو قمنا بعكسه من “أكبر من” إلى “أصغر من” أي (x < y) فسنجد النتيجة True  لأن المقارنة صحيحة

 

الآن سنقوم بتجربة العامل الشرطي && كما سوف نرى :

if (  (z > y)  &&  (y > x)  )
}
;Console.WriteLine(“True”)
{
;()Console.ReadLine

فإذا كان True && True  تكون النتيجة النهائية True و يظهر التطبيق الكلمة True

لنقم بجعل النتيجة False  ، لذلك سنغير (y > x)  إلى (y == x)
عندها تصبح النتيجة النهائية False على رغم تحقق الشرط الأول ، إلا أن العامل && يتطلب تحقق الشرطين سوياً ليصبح True

 

نصل الآن إلى نهاية هذا الدرس ، ألقاك في الدرس التالي إن شاء الله .

 

ملخص الدرس :

 

الجملة البرمجية Statement :

كما تعرفنا في الدروس السابقة أنه يجل وضع فاصلة منقوطة في آخر كل سطر، بالتالي يطلق على هذا السطر إسم جملة برمجية،

التعبير البرمجي Expression :

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

التعبير الحسابي : x = 5 + 7
إستدعاء الدوال : Console.WrieLine(x)

العوامل البرمجية Operators :

هناك العديد من العوامل البرمجية أكثرها إستعمالاً هي :
– العوامل الحسابية ( الرياضية ) : لإجراء عمليات حسابية والتعامل مع الناتج، وهناك 4 عمليات أساسية هي الجمع + والطرح – والضرب * والقسمة / .
– العوامل المنطقية : هي عوامل غالباً تستخدم في مقارنة قيمتين وأشهرها معامل و ذو الإختصار && And Operator ومعامل أو ذو الإختصار || Or Operator .

مصطلحات الدرس :

Variable Declaration :

Assignment Operator :

Addition Operator :

Mathematical  Operator :

Order of Operations :

Expression :

Greater than Operator :

Less than Operator :

Greater or Equal Operator :

Less than or Equal Operator :

Conditional AND Operator :

Conditional OR Operator :

Condition :

 

post

إستخدام مصادر جاهزة لتطوير لعبتك

إستخدام مصادر جاهزة لتطوير الألعاب، تزيد من كفاءة لعبتك وتقلل وقت التطوير

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

يتناقش معي العديد من المطورين الذين يدخلون عالم تطوير الألعاب عن حلمهم في تطوير فكرة لعبة يعتبرونها مميزة، ويتابعون أن العناصر التي يودون إستخدامها في مرحلة التطوير يجب أن تكون من صنعهم، بالتالي فهم من سيقومون بتصميم النماذج ثلاثية الأبعاد 3D Models على برنامج 3Ds Max أو Maya وهم من سيقومون بعمل هيكلية وتحريك لها Rigging and Animation ، وهم من سيقومون ببناء واجهات اللعبة 2D UI وهم من سيقومون برسم كافة الرسومات التي تحتاجها اللعبة على برنامج Photoshop ، ليس هذا فحسب بل سيقومون بتسجيل و تحرير الأصوات والموسيقى التي ستحتاجها اللعبةـ وفوق هذا كله هم من سيقومون ببرمجة اللعبة نفسها.

السيناريو السابق ليس مستحيلاً، ولكن كوقت تقديري أنت تحتاج لما يقارب الـ 10 سنوات لإنهاء لعبتك، وإن صبرت كل هذه المدة ولم يصبك الإحباط في منتصف الطريق، فلن تكون لعبتك ذات جودة عالية، والسبب هو أنك لست مختص في أي مجال من المجالات السابقة، مما يترك فرصة لتدني جودة اللعبة ككل.

إبحث عن المصادر الجاهزة

من الأفضل أن تقوم بالبحث أولاً عن شيء قريب لفكرة لعبتك بحيث يتماشى مع الثيم الخاص بها سواءاً كانت لعبة ثلاثية الأبعاد أو لعبة ثنائية الأبعاد، حيث أن هناك العديد من المواقع التي تتيح لك كافة المستلزمات التي تحتاجها في رحلة تطوير لعبتك، سواءاً كانت مدفوعة الأجر أو مجانية، ولعل من أشهر المواقع التي تحتاجها كمطور ألعاب تستخدم محرك Unity هو Unity Asset Store ، الموقع الغني بكل ما تحتاجه سواءاً مجسمات ثلاثية الأبعاد 3D Models أو ملفات حركة Animation أو صوتيات Audio أو برمجيات جاهزة Scripting أو حتى مشاريع كاملة Complete Projects .

 

لم تجد ضالتك في المصادر الجاهزة؟

في بعض الأحيان لن تجد مبتغاك خصوصاً إن كنت تبحث عن شيء محدد بمواصفات معينة، بالتالي أنت بحاجة للبحث عن شخص مختص ليقوم بعملها ألا وهو الـ Freelancer ، حيث يمكنك توظيفه بمقابل مالي أو بعرض نسبة من الأرباح بعد إنهاء اللعبة، بل إن هناك أنواعاً من الموهوبين الذين لم يدخلوا إلى سوق العمل بعد مستعدين أن يعملوا معك مجاناً مقابل الحصول على خبرة العمل الجماعي أو مقابل وضع إسمه في قائمة العاملين على اللعبة Credits .

هناك العديد من المواقع والأماكن التي تتيح لك التعرف وإيجاد مطورين ورسامين مستقلين ولعل خدمة Unity Connect سهلت عملية البحث والتواصل بينهم، أيضاً هناك العديد من المجموعات على شبكة التواصل الإجتماعي تعج بالخبرات الفريدة والتي تحتاج للعمل على مشاريع جماعية منها مجموعة طورني على شبكة الفيسبوك.

الخلاصة 

إعطاء كل وظيفة للشخص المناسب والمتخصص تزيد من كفاءة الناتج، وتنمي مهارات العمل الجماعي والتي إن إمتلكتها ستزيد فرصك في الدخول إلى سوق تطوير الألعاب، ليس عيباً أن تقوم بإستخدام مصادر جاهزة للعبتك، ولا بأس في إستخدامها في مرحلة البداية، لاحقاً إن إمتلكت الميزانية الكافية يمكنك إستبدالها بشيء تريده أنت من خلال توظيف فريق يعمل لأجل مشروعك. ولكن هناك قضية يجب التنويه لها، فليس كل المصادر المجانية صالحة للإستخدام، فهناك بعض المصادر مجانية ولكن مشروطة بإضافة إسم صانعها إلى قائمة ال Credits لذلك توخى الحذر في إنتقاء المصادر وخصوصاً المجانية منها.

post

#8 المتغيرات Variables – البرمجة بواسطة #C

رمز فتح مرحلة هذا الدرس في تطبيق طورني : XVD

تَعلُمُ البرمجةِ للمبتدئينَ كلياً بواسطةِ #C –  المتغيرات الجزء الأول

المتغيرات Variables

السلامُ عليكم ورحمةُ اللهِ وبركاته، وأهلاً بكمْ في الدرسِ الثامن من دروسِ سلسلةِ، تَعلُمِ البرمجةِ للمبتدئينَ كلياً بواسطةِ السي شارب،  في البداية أحب أن أشارككم فرحتي، بحصولي على شهادة مطور معتمد من Unity، الشركة الرائدة في مجال تطوير الألعاب، من خلال محركها الشهير Unity، والذي يمكنك بواسطته تطوير ألعاب، لجميع أنواع المنصات المتوفرة حالياً، سواء للـ PC أو الـ Mobile، أو حتى الـ Consoles مثل PlayStation وغيرها، فالشهادة التي حصلت عليها، ستكون تعزيزاً لما هو معلن على منصة طورني، حيث ستكون السلسلة التالية لسلسلة البرمجة هذه، سلسلة تعلم أساسيات تطوير الألعاب باستخدام محرك الألعاب Unity، والتي أعدك أن تقضي أوقاتاً ممتعة فيها بإذن الله، في هذا الدرسْ سنتكلمُ عن مفهوم المتغيرات Variables، وكيف تقوم بحجز مكان مناسب لمتغيرك في ذاكرة الحاسوب، وكيف تقوم بإعطائه قيماً تستخدمها في تطبيقك، بالبداية دعنا ننظر إلى المعادلة الموجودة على الشاشة،

3 + x = 8

فإن قمت بدراسة مادة الحساب، فلابد أنك شاهدت مثل هذه المعادلة الحسابية، فإن طلبتُ منك أن تقوم بإيجاد قيمة x، فأنا متأكد أنك ستجيب من غير تردد أن قيمة المتغير x هي 5، بنفس التحليل الذي استخدمته في المعادلة السابقة، قم بالنظر الى الأسطر البرمجية الظاهرة على الشاشة:

x = 3;
y = x + 4;
Console.WriteLine(y);

بإستخدام الخبرة البرمجية التي تمتلكها، ستجد أن ناتج y سيكون الرقم 7، وهذا بالضبط ما سيتم طباعته على الـ Console،

المعادلات الرياضية :

كما تعلنا سابقاً عن لغة الـ C#، أنها لغة مفهومة للبشر، فالأسطر الظاهرة على الشاشة، مطابقة تماماً لما تعلمناه في المعادلات الرياضية، عدا عن أن هناك فاصلة منقوطة في نهاية كل سطر، وأصبحنا نعرف معناها بناءً على الدروس السابقة، وستجد نفسك خلال تقدمنا في الدروس القادمة، أنك في معظم الأحيان ستفهم الأسطر البرمجية، حتى قبل أن أقوم بشرحه لك.

وغالباً ستكون مطابقة لجمل استخدمتها في الماضي، مثل التعامل مع الحساب والمعادلات الرياضية وغيرها. بالعودة إلى المثال الظاهر على الشاشة، فإن الحرفين x وy الموجودين أمامنا، يطلق عليها اسم المتغيرات أو Variables، ويمكن تعريف المتغير على أنه صندوق وهمي، يتواجد في ذاكرة الحاسوب، حيث بإمكانك استدعاءه لمعرفة القيمة التي يخزنها، وبالتالي يمكنك أيضاً أن تودع قيماً فيه، أو أن تستبدلها بقيم جديدة كلياً، وهذه هي استخدامات الـ Variables الأساسية.

 

أنواع البيانات  Variables Data Types :

ويمكن للمتغيرات أن تحتوي على قيم متنوعة، منها العدد الصحيح كما هو في مثالنا الحالي، ويمكن أن تحتوي على خانة واحدة فقط، ويمكن أن تحتوي على فقرات نصية طويلة، ويمكن أيضاً أن تحتوي على التاريخ والوقت، أو حتى أنواعاً جديدةً تقوم أنت بإنشائها، كما سنلاحظ في الدروس القادمة إن شاء الله. نعود لمثالنا حيث ستجد أن قيمة المتغيرات هي قيمة عددية، فقيمة المتغير x هي العدد الصحيح 3، وقيمة المتغير y هي حاصل جمع قيمة المتغير x، مضافاً إليها الرقم 4 ليصبح الإجمالي هو العدد الصحيح 7.

التطبيق الحالي نظرياً صحيح، لكنه غير مقبول لدى لغة الـ C#، لأننا لم نقم بحجز الصندوق الوهمي الخاص بكل متغير. تعرفنا في الدروس السابقة أنه بعد الـ Compile Process، سيقوم الـ .NET run-time بتنفيذها، ومن مسؤولياته الأساسية حجز مساحاتٍ كافيةٍ في الذاكرة، للمتغيرات التي قمنا باستخدامها بناءً على نوع قيمها، ففي مثالنا هنا يجب أن نخبر الـ Run-time، بضرورة حجز مساحة في الذاكرة للمتغيرين x,y، بما يتناسب مع حجم القيمة العددية لكليهما، كيف نقوم بذلك؟ هذا ما سوف نتعرف عليه معاً في هذا الدرس إن شاء الله.

حجز المتغيرات Variables Declaration :

لإنشاء مشروع جديد، سأقوم بتكرار ما قمنا به في الدروس السابقة، سأذهب إلى قائمة File — > New — > Project، ومن شاشة New Project سأحرص على اختيار Visual C#، ثم اختيار Console Application، سأقوم بعدها بإعادة تسمية هذا المشروع إلى Variables، ومن ثم نضغط على زر OK، ليبدأ برنامج الـ Visual Studio بتهيئة مشروعنا الجديد، ببناء الـ Solution والـ Project بالهيكلية التي تعرفنا عليها في الدرس السابق، وسأجد ملف Program.cs ظاهر في وسط الشاشة، حيث يمكنني البدء بكتابة الأسطر البرمجية، بين الأقواس الموجودة في السطر 12 والسطر 14.

أنوه أن كل الملاحظات التي ذكرتها في الدروس السابقة، يمكنك تطبيقها متى شعرت بعدم وصول المعلومة، قم بإيقاف الفيديو وكرره متى احتجت لذلك، خذ وقتك حتى تتمكن من تطوير مهارة تمييز الفروقات، سواءً حالة الحروف الصغيرة Small Letter أو الكبيرة Capital Letter، أو بالفروقات بين علامات الترقيم والفواصل والمسافات، التي سنستخدمها خلال كتابتنا الأسطر البرمجية، قم بتطوير مهارة المطابقة بين ما أقومُ بكتابتهِ على شاشتي، وبين ما تقومُ أنتَ بكتابته على نسختك من برنامج الـ Visual Studio، وفي حال ظهور خطوط حمراء متعرجة تحت الجمل، قم بالتحري بطريقتك الخاصة لاكتشاف حلٍ لهذا الخطأ.

لحجز مكان يتناسب مع نوع المتغير في الذاكرة، نحن بحاجة لإخبار الـ Compiler بفعل ذلك، وعملية الحجز هذه تسمى Variables Declaration، أي أننا سنخبر الـ .NET Run-time، بحجز مساحة كافية في ذاكرة الحاسوب، من خلال تحديد إسم ونوع لهذا المتغير، كما سأقوم بكتابته الآن:

int x;
int y;

في السطرين السابقين سألنا الـ .NET run-time، أن يقوم بحجز مساحة للمتغيرين x وy، من النوع int وهي إختصار لكلمة Integer أي عدد صحيح، والعددُ الصحيحُ هو مصطلحٌ في علم الرياضيات، يمثل العدد الكامل الذي لا كسور عشرية فيه، فمثلاً الرقم 5 هو رقم صحيح، لكن الرقم 5.6 هو رقم غير صحيح لأنه يحتوي على رقم بعد الفاصلة العشرية، بالإضافة إلى أن النوع Integer في لغة الـ C# يمثل الأعداد الصحيحة، فإن القيمة يجب أن تكون بين سالب بليونين وكسور، وموجب بليونين وكسور، وهذا حجم القيمة التي يتم حجزها في الذاكرة لهذا النوع، أما في حال كنا نحتاج أن نتعامل مع رقم أكبر من القيم السابقة، فنحن نحتاج إلى نوع غيرِ نوعِ العدد الصحيح Integer، وسنتعرف على الأنواع الأخرى لاحقاً إن شاء الله.

مثال عملي على المتغيرات Variables :

بعد الـ Variables Declaration، دعنا نقوم بإكمال كتابتنا للأسطر البرمجية كما في المثال أول الدرس،

x = 3;
y = x + 4;
Console.WriteLine(y);
Console.ReadLine();

لنتمكن من مشاهدة النتائج قبل خروج البرنامج بسرعة. إن قمنا بتنفيذ التطبيق سنجد أن المخرجات هي نفسها التي توقعناها سابقاً، كما نشاهد الآن على الشاشة أننا حصلنا على قيمة 7. إن لم تحصل على هذه القيمة، قم بإيقاف الفيديو وتتبع ما قمتُ بكتابته لتتأكد من صحةِ ما قمتَ أنت بكتابته.

الآن بعد ما قمنا بحجز المتغيرات في السطر رقم 13 و14، قمنا في الأسطر 16 و17 بإسناد قيم للمتغيرات، باستخدام إشارة المساواة =، وهذه الإشارة تسمى Assignment Operator، وسنتعرف على حالات خاصة منها في دروس متقدمة إن شاء الله. وإشارة المساواة تقوم بأخذ كل ما على الجانب الأيمن وتضعه في الجانب الأيسر،

وتطبيق ذلك على مثالنا هنا، يمكننا القول، أعطني قيمة 3 وضعها في المتغير الذي اسمه x، وبالمثل في السطر التالي، نقوم بإضافة قيمة إلى المتغير y، عدا أننا نقوم بشيء إضافي هنا، ألا وهو استدعاء قيمة المتغير x أولاً، فنحن نسأل الحاسوب أن يقوم بالبحث عن موقع المتغير x في الذاكرة، ثم نقوم بأخذ قيمته وجمعها مع الرقم 4، ليتم إسناد القيمة الكلية إلى المتغير y. وفي السطر رقم 19، نقوم بطباعة قيمة المتغير y، على شاشة الـ Console من خلال استدعاء موقعه في الذاكرة.

لتأكيد ضرورة حجز المتغيرات قبل استخدامها، سأقوم بتحويل السطر الذي يحتوي على تعريف المتغير x إلى سطر ملاحظة، تعلمنا أنه لفعل ذلك يلزم إضافة double slash // إلى بداية السطر،  بعد فعل ذلك، سنلاحظ ظهور خطوطٍ حمراءَ متعرجة، تحت المتغير في السطر رقم 16 والسطر رقم 17، وإن قمت بوضع مؤشر الفأرة على موضع الخطأ ستجد رسالة:

The name x Does not exist in the current context

والتي تعني أن x غير معرّف، ولكنك لربما تقول:  لقد قمنا بتعريفه هذا المتغير وها هو في السطر رقم 13، لكن كما اتفقنا في درس سابق، أننا بتحويل سطر برمجي إلى جملة ملاحظة Comment Statement، فإننا نخبر مترجم لغة الـ C# والمعروف بالـ .NET run-time، أن يقوم بتجاهل هذا السطر تماماً وكأنه غير موجود.

وكأن حال الـ Compiler ينظر إلى المتغير x ويقول لنا:  ما هذا الشيءُ هنا؟ من هذا الـ x الذي تتحدث عنه؟ لم أسمع به من قبل، ولا أعرف ماذا تريد مني أن أفعل به، إن لم تعطني معلومات أكثر عن هذا المدعو x، سأرفع العلم الأحمر في وجهك، ولن أدعك تمر تحت هذه الظروف الغامضة. لكي نقوم بحل المشكلة التالية، ولكي نرضي السيد الـ Compiler المحترم، يجب علينا التراجع عن جملة الملاحظة، لنجعلها جملة صريحة يمكن تنفيذها.

 

مصطلحات الدرس :

Variables : المتغيرات هي صناديق وهمية تتواجد في ذاكرة الحاسوب تحتوي على قيم بأنواع معينة
Unity : محرك ألعاب بإمكانك تطوير ألعاب عليه سواءاً 2D أو 3D ويمكن تصديرها لكل المنصات مثل Android, iOS, Xbox,Playstation وغيرها
Compile process : عملية تحويل الأسطر البرمجية التي تقوم بكتابتها إلى تطبيق مخرجات ( EXE أو حسب نوع المشروع) يمكن نشره للزبائن.
Dot Net Run-time : المكون الرئيسي الذي يعتمد عليه برنامج Visual Studio ويتكون من العديد من الطبقات الخدمية
Project : المشروع الذي نقوم بتطويره ويكون تحت Solution واحد فقط
New : جديد
Console Application : تطبيق شاشة سوداء يقوم بطباعة أسطر متتالية وتتميز ببساطتها وقوة أداءها
solution : الحل البرمجي وهو أعلى وأكبر حاوية للمشروع، ويمكن أن يتكون من أكثر من Projects
Program : البرنامج أو التطبيق الذي تقوم بتطويره
Small Letter : الأحرف الإنجليزية الصغيرة مثل حرف t الصغير
Capital Letter : الأحرف الإنجليزية الكبيرة مثل حرف T الكبير
Variables Declaration : حجز مكان في ذاكرة الحاسوب يتناسب مع نوع المتغير
int : إختصار لـ Integer  أي عدد صحيح لا كسور فيه مثل 25
Console.ReadLine : دالة تقرأ جملة كاملة بشرط أن تنتهي بزر الإدخال Enter
Assignment Operator : علامة المساواة (=) وتقوم بإسناد قيمة ما على الطرف الأيمن إلى مكان ما على الطرف الأيسر
Double Slash : علامة ( // ) وتستخدم لتحويل السطر البرمجي إلى جملة ملاحظة
The name x Does not exist in the current context : الإسم ( x ) غير معرف في القطعة البرمجية الحالية
Comment Statement : جملة ملاحظة، وهي جملة لا يتم تنفيذها وتستخدم لشرح وظيفة الأسطر البرمجية

post

#2 لماذا السي شارب – البرمجة بواسطة #C

رمز فتح مرحلة هذا الدرس في تطبيق طورني : VDF

تَعلُمُ البرمجةِ للمبتدئينَ كلياً بواسطةِ #C –  لماذا لغة السي شارب؟

مهارات تطوير التطبيقات :

السلامُ عليكم ورحمةُ اللهِ وبركاته، وأهلاً بكمْ مجدداً في دروسِ سلسلةِ، تَعلُمِ البرمجةِ للمبتدئينَ كلياً بواسطةِ السي شارب.
يَدخُلُ بَعضُ المُطورينَ إلى عالمِ البرمجةِ مِنْ أجل التحدي، وكثيرٌ مِنهم يَدخُلونَهُ للحصولِ على وظيفةٍ لِيجني مِنها مالاً، ولكِن الذي لا يَخطُرُ على بَالِ الكثيرين، أنَّ تَطويرَ التَطبيقاتِ ضروريٌ ومُهم، حتى إن لم يَرغَبوا بامتِهانِه كوظيفةِ عَمَل، ولأنَّ الحاسوبَ أصبحَ جزءاً مِن حياتنا اليومية، فَتَعَلّمُ تَطويرِ التطبيقاتِ مِنَ المَهاراتِ التي يَجِبُ اكتِسابُها. لأنَّ البَرمَجَةَ لا تُطوِّرُ تَفكيرَكَ لِحَلِّ المَشاكِلِ فَحسْب، بَل تُحسِّنُ مِنْ أدائكَ وتَجعُلكَ أكثرَ تَنظيماً وأكَثرَ إنتاجية.

مثال واقعي :

بعيداً عَنِ التنظيرِ وكمثالٍ واقعي، يَعملُ أحَدُ طُلابي السابقينَ في مجالِ إنتاجِ الفيديو، حيثُ أنَّهُ يَتعاملُ مَعَ أنواعٍ شَتى مِنَ المَلفات، إن كانَت صوراً أو مَلفاتِ نُصوصٍ وأصوات، ولأني عَهِدْتُهُ مُنَظَّمَاً مُحِباً للتَرتيب، يَقومُ بتوزيعِ الملفاتِ في مُجلداتٍ فرعيةٍ حَسَبَ نَوعِها، ويَقومُ بتِكرارِ العمليةِ السابِقةِ في كُلِّ مَشروعٍ جَديدٍ له، مِما يَستَهلكُ مِنْهُ وقتاً كثيراً فضلاً عَنْ رُوتينِيةِ الأمر، لكِنهُ بَعدَ تَعلُمِ تَطويرِ التطبيقات، قامَ بتطويرِ تَطبيقٍ بسيط، حَيثُ يُدْخِلُ فيهِ اسمَ المشروعِ ومَعلوماتٍ بسيطة، ليقومَ بِضَغْطَةِ زِرٍّ واحدةٍ بإنشاءِ جَميعِ المُجلداتِ التي سَيستَخدِمُها، هُوَ بذلك قامَ بتحويلِ جُهدِ دَقائِقْ إلى بِضْعِ ثَوان، ناهيكَ عَنْ شُعورِهِ بالفَخرِ لإنهائِهِ مُعاناةَ القيامِ بِذلكَ يَدوياً، هُو لا يزالُ يُمارِسُ إنتاجَ الفيديو، لكنَّهُ استَفادَ مِنَ البَرمَجَةِ لتَسهيلِ عَمَله.

البرمجة موجودة حولنا :

والحَقيقةُ أنَّ العَديدَ مِنَ البَرامِجِ التي تَستخدِمُها في حَياتِكَ اليومية، تَحتَوي بِطَريقَةٍ ما على أسطُرٍ بَرمَجِيةٍ قَامَ مُطوِّرٌ بِكتابتها، فعلى سبيلِ الِمثالِ بَرنامِجُ الـ Excel، يَسمحُ لكَ باستخدامِ مَاكرو Macro سَريعة، أيضاً العديدُ مِنْ بَرامِجِ أدوبي Adobe، مِثلُ الفُوتوشوب Photoshop والأفتر إيفيكتس After Effects، تَحتوي على إجراءاتٍ بَرمَجيةٍ أوتوماتيكية، تَقومُ بتَنفيذِ عَشراتِ الأوامِرِ المُتتاليةِ بِضَغطةِ زِرٍّ واحدة، كُلُّ ذلكَ يَحتاجُ مِنكَ أنْ تَكونَ على عِلمٍ بِكتابةِ الأسطرِ البرمجية.

أفكار تسهل حياتك :

بَعيداً عَنِ البرامِجِ السابقة، أنا مُتأكِدٌ أنكَ تَمتلكُ العديدَ مِنَ الأفكار، التي إن قُمتَ ببرمجتِها لأصبَحتْ حَياتُكَ أسهَل، ووجَدتَ فرقاً في سُرعَةِ أداءُكَ، هذِهِ التطبيقاتُ تَحتاجُ مِنك نِصفَ ساعة، ولكنَّها سَتوفرُ عَناءَ عَشراتِ الساعات. بالإضافةِ إلى أنَّ البرمجةَ بِحدِّ ذاتها مُمتعة، وسَتشعرُ بالسعادةِ عِندما تَقومُ بحلِّ مشاكلك.

خصائص لغة السي شارب #C :

والسي شارب لغةٌ مِن لغاتِ برمجةِ الحاسوب، تَسمحُ لكَ بتطويرِ أنواعِ تطبيقاتٍ مختلفة، قامَتْ شَركةُ Microsoft بتطويرها، لتعتمِدَها بشكلٍ أساسيٍ في إنتاجِ تطبيقاتٍ لمِنَصَاتها المختلفة.

1 – مناسبةٌ للمبتدئين:

لأنها لغةٌ بسيطةٌ وسهلةُ الاسِتخدام، ولأنَّها تُعتبرُ لغةً عاليةُ المُستوى High Level Language، فيمكنُ للإنسانِ الذي يُتقنُ اللغةَ الإنجليزية، فهمَ مُعظمِ مصطلحاتها، لأنها تُوفِرُ كلماتٍ مَحْجوزةٍ مَفهومة، تَضعُها بينَ يَديكَ لأداءِ إجراءاتٍ معينة، ثمَّ تُحوِلُها إلى لُغةٍ وسيطة Intermediate Language، ثمَّ إلى لغةِ الآلة Machine Language، فكلُ كلمةٍ مِن كلماتِ لغةِ السي شارب، يُقابِلها عَشراتُ الجُملِ في لغةِ الألة، مما يَدَعُكَ تُركِزُ على فِكرةِ تطبيقك، ولا تقلقُ بِشأنِ الإجراءات المُعَقدَةِ تلك، فمثلاً استِخدامُكَ للكلِمَةِ المَحجوزَةِ Write، يُخِبر الحاسوبَ بِأنْ يَقومَ بِطِباعَةِ جُملةٍ على الشاشة، فنحنُ هنا لا نَهتمُّ أبداً كيفَ قامَ بالطباعة، بلْ نَهتمُ أنَّهُ قامَ بِذلكَ فقط، الأمرُ الذي إن حاولتَ كتابتَهُ بِلُغَةِ الألة، قَدْ يَستغرقُ مِنكَ عَشراتِ الجمل، فضلاً عَنِ الوَقتِ المهدور.

2 – تَزيدُ مِن إنتاجيَتِك :

لأنَّها لُغَةٌ تَعتمِدُ على نِظامِ الكِتابَةِ Static Type، فإمكانيةُ اكتشافِ الأخطاءِ في تَطبيقكَ قَبلَ بناءه، تَسهلُ عليكَ تتبُعَها وتَبسيطَها لحَلِها لاحقاً، بالإضافةِ إلى أنَّ لُغَةَ السي شارب، تَفرُضُ عليكَ قواعِدَ مُعينةً لكتابَةِ الأسطرِ البرمجية، مما يجعلُ برنامَجَكَ سَهْلَ الصيانةِ وذو مُرونةٍ عالية.

3 – عددُ مُستخدميها كبير :

فتِعدادُ مستخدمي اللغةِ مِن أهمِّ عَواملِ قُوتِها، فكُلما زادَ عَددُ مُستخدميها زادَ غِناها وتَنَوعِها، وسَتُدرِكُ قيمةَ ذلكَ إنْ تَخصَّصْتَ في تَطويرِ التطبيقات، خصوصاً إنْ واجهتكَ مُشكلةٌ ولمْ تَستطعْ حَلها، فلو قُمتَ بالبَحثِ عَنها سَتجدُ أنَّها قَدْ طُرحَتْ سابقاً، وأنهُ تمَّ الإجابةُ عنها أيضاً، بالإضافةِ إلى أنَّكَ سَتجدُ أدواتٍ تَمَّ كِتابتُها بواسِطةِ مُطورين، قاموا ببنائِها لتُسهلَ عليك عَمَلكَ وتَزيدُ مِنْ إنتاجِيَتِكَ بِشكلٍ أفضل. وبما أنَّ لغةَ السي شارب من تطويرِ مايكروسوفت فإنَّ عَدَدَ مُستخدميها كبير، وهنا بَعضُ الشركاتِ الكبيرةِ، Blizzard , Starbucks، التي تَستخدمُ هذِهِ اللغةُ بشكلٍ أساسيٍ في مُعظمِ تطبيقاتها.

4 – اللغةُ الأساسيةُ في مُحركِ الألعاب Unity:

بالإضافةِ إلى أنَّ لغةَ السي شارب، هيَ اللغةُ الأساسيةُ في مُحركِ الألعاب Unity، وهوَ مِنْ أكثرِ مُحركاتِ الألعابِ رَواجاً في الوقتِ الحالي، ويُمكنكَ بواسطتِهِ تَطويرَ ألعابٍ للعديدِ مِنَ المِنَصَّات، وسَيكونُ المُحركَ المُعتمدَ بِشكلٍ أساسيٍ في مِنَصةِ طورني، حَيثُ سَيتمُ البدءُ بسِلسِلةِ دُروسٍ لهُ فورَ انتهاءِ هَذهِ السِلسِلةِ إن شاءَ الله. لذلك، إنْ كُنتَ تَنوي امتهانَ مَجالِ تَطويرِ التطبيقات، أو حتى لم تكن تنوي ذلك، فتعلُمُ تطويرِ التطبيقاتِ يُنمي مَهاراتٍ عَديدةً لديك.

أفضل نسخة :

وهنا نأتي إلى السؤالِ الذي يُطرحُ دائماً لمُعَلِمي لغةِ السي شارب، ألا وهو: مَنْ يُعتبرُ الأفضل؟ لغةُ الـ C أم لغةُ الـ C++ أم لغة الـ C#؟ والحقيقةُ أنَّ الإجابةَ على هذا السؤالِ يَتطلبُ مُحاضرةً كاملةً لوحدها، ولكنْ يُمكننا القَولُ إنَّ لُغَةَ السي والسي ++، تُعتبرُ أسرعُ مِنْ لغَةُ السي شارب لأنَهُمَا أقربُ إلى لُغةِ الألة، لكنَّكَ لنْ تَشعُرَ بِهذا الفَرْق، إلا إذا كانَ تطبيقُكَ يتعاملُ بشكلٍ أساسي، بإظهارِ صُورٍ ثُلاثيةِ الأبْعادِ أو يقومُ بمُعادلاتٍ رياضِيَةٍ مُعقدة، بالمقابلْ فإنَّ لغةَ السي شاربْ تَحتوي على العديدِ مِنَ الميزات، التي لا تتواجدُ في اللغتينِ السابقتين، ناهيكَ عَنْ أنها أقربُ صيغةً للُغَةِ الإنسان، ويمكنُ اختصارُ السابقِ بمُقارنتكَ لسيارةٍ مِنْ طِرازِ (ألف وتسعمئة وثمانون) 1980، بسيارةٍ حديثةٍ من طرازِ (ألفين وسبعة عشر) 2017، هل يُمكنكَ تَخيُلُ الفرقِ الآن؟ ليس بعد؟ حسناً . أُطلبْ مِنْ صَديقٍ لكَ يَعيشُ في دُولِ الخليج، أنْ يَشرحَ فَائدةَ المُبرِّدِ المَوجودِ في إحدى السيارتين .

سي شارب أم جافا :

نأتي الآنَ إلى سؤالٍ يُطرَحُ كثيراً أيضاً، مَنِ الأفَضلُ كلغةِ بَرمجة؟ السي شارب أم الجافا Java؟ الحقيقةُ أنَّ السي شاربْ والجافا أداتانِ تؤديانِ نَفْسَ الوظيفة، ويُمكنُ تَطبيقُ المثالِ السابقِ هُنا أيضاً، فيمكنُ اعتبارُ اللغتينِ كَنوعيْ سيارة، حيثُ أنكَ سَتجدُ مَيزاتٍ هُنا غيرَ متواجدةٍ هُناك، وسَتَجِدُ مَيزاتٍ هُناكْ غَيرَ مُتواجدةٍ هُنا، قُمْ باختيارِ إحداهُما وابدأ بِتعلمه، أما في سلسلتنا هذه، سَنَستَمِرُّ على لغةِ السي شارب إن شاء الله.

تمرين الدرس :

وأخيراً، قم بالإجابةِ عَنِ السؤالِ التالي، وطرحِ الإجابةِ على شبكاتِ التواصلِ الاجتماعي، معْ عَمل Mention لحسابي الشخصي :

ما هُوَ التطبيقُ الذي تَعتقدُ أنَّكَ لو قُمْتَ ببرمجتِهِ سَتصْبِحُ حَياتُكَ أسْهل؟

مصطلحات الدرس :

 Macro : أسطر برمجية متتالية تقوم بعمل وظائف، وهي مستخدمة بكثرة في برامج Microsoft Office
 High Level Language : لغة عالية المستوى أي أنها أقرب للإنسان فهماً وقراءةً
 Intermediate Language : لغة وسيطة بين اللغة العالية المستوى واللغة المتدنية المستوى
 Machine Language : لغة الآلة ( الحاسوب ) وهي لغة بها أوامر بسيطة لكنها معقدة يصعب فهمها بلغة Assembly Language .
Write : دالة تقوم بطباعة جملة على شاشة الـ Console.
Static Type : نظام كتابة يتيح لك إكتشاف الأخطاء الإملائية آنياً.
Unity : محرك ألعاب تستطيع بواسطة تطوير ألعاب ثلاثية البعد وثنائية البعد.