السلام عليكم ورحمة الله
البرمجة في الألعاب هي إضافة التفاعلات بين الكائنات في اللعبة، مثل جعل اللاعب قادرًا على التحكم في شخصيته، ومن دونها تصبح اللعبة محاكاة ثابتة.
وهناك طريقتان أساسيّتان للبرمجة: إما استخدام لغات البرمجة وكتابة الشفرات، أو الاعتماد على البرمجة المرئية باستخدام أدوات جاهزة.
من الأمثلة على لغات البرمجة المستخدمة للألعاب: C ,C++ ,C# ,Java , Python ,Lua , Javascript
ومن الأمثلة على الأدوات المرئية: (Unreal Blueprints (Nodes), Construct Events Drag and Drop (Events
والسؤال هو الآن: للمبتدئين، هل يجب تعلم لغات البرمجة لصناعة اللعبة؟ أم يمكن الاكتفاء بهذه الأدوات؟
للإجابة بشكل مختصر:
لتطوير الألعاب المتوسطة وغير المعقدة، أو لتجربة فكرة للعبة ما وصنع نسخة تجريبية، أو لمن ليس مهتمًا في تطوير الألعاب كمهنة وإما كهواية وتسلية، أو لمن يريد صنع لعبة بسرعة لمسابقة أو تجربة ما..
يمكن الاعتماد على الأدوات المرئية بشكل كامل،
أما غير ذلك، فيفضل إما الدمج بين الأسلوبين أو الاعتماد على لغات البرمجة.
لماذا؟ سأوضح التفاصيل في المقال، لذا أكمل القراءة إذا كنت مهتمًّا.
الاختلافات بين محركات الألعاب في خيارات البرمجة المرئية
بعض محركات الألعاب لا تدعم إلّا البرمجة المرئية، وتقدم أنظمة خاصة فيها تتناسب مع المحرك وأنواع الألعاب التي ستُصنع عليه.
مثل محركي Construct 2 و Construct 3، فهما يقدمان نظام مرئي للبرمجة يعتمد على الأحداث، التي يتم تنفيذها بناءً على التعليمات المنطقية.
أسلوبه قريب للغات البرمجة، فالبرمجة فيه تتم عن طريق إضافة عناصر يتم تنفيذها بالترتيب..كل عنصر قد يكون عبارة عن تشغيل او استجابة لحدث ما، أو يكون عملية منطقية تحدد الخطوة التالية.
وهذا النظام يفي بالغرض للكثير من الألعاب، وهناك محركات أخرى تستخدم شيء مشابه للبرمجة، مثل GameMakerStudio 2.
أما محرك Unreal مثلا، فهو يحتوي على ما يسمى ب Blueprints، أسلوب برمجي يستخدم طريقة العُقَد Nodes (عمليات برمجية) التي ترتبط فيما بعضها (كل عقدة تستدعي عقدة أخرى).
مطورو محرك Unreal غالبًا ما يستخدمون هذه التقنية للألعاب الصغيرة أو لتجريب الأفكار بسرعة، أما عند العمل على لعبة معقدة، فيتم الدمج بين لغة البرمجة ++C وال Blueprints.
وهذا الدمج يتم عبر كتابة ملفات برمجية بلغة ++C تحتوي على العمليات والأنظمة المعقدة، ثم استخدامها متى تستدعي الحاجة في ال Blueprints.
بالنسبة لمحرك Unity، غالبًا ما تُستخدم فيه لغة البرمجة #C، فهي الطريقة الوحيدة المدعومة رسميًّا حاليًّا.
(ولكن قريبًا، سيتم إصدار أداة مدمجة للبرمجة المرئية في محرك Unity، )
لذلك عليك إما اختيار محرك ألعاب يناسب أسلوب البرمجة الذي تريده، أو التأقلم مع إمكانيات المحرك الذي اخترته لبناء لعبتك.
الأمر يعتمد على الهدف من اللعبة، ومستواها المطلوب
بالنسبة للألعاب ثلاثية الأبعاد المعتمدة على الفيزياء والحركيات المعقدة والتي تُلعب عبر الشبكة، غالبًا ما يحتاج مبرمجوها للقيام بحسابات وعمليات معقدة تُكتب بلغات البرمجة.
أما الألعاب البسيطة، مثل ألعاب المِنَصّات، يمكن برمجتها بأي أسلوب أو طريقة.
وأيضًا، هل الهدف من اللعبة هو تسليمها كمشروع أو لمسابقة؟ أم لنشرها والربح منها؟ في الحالة الثانية، يجب ضمان أن اللعبة تعمل بدون أخطاء كثيرة وبسلاسة و بأداء جيد على جميع الأجهزة
لذا يجب تنظيم استخدام المعالج والذاكرة لتحسين الأداء، وقد يصعب فعل ذلك دون وجود خبرة في البرمجة، بخاصة للألعاب المعقدة.
ثم إن الأدوات المرئية للبرمجة لا تقدم أفضل طريقة لفحص مشاكل الأداء، فضلًا عن الوقت اللازم لحل المشكلة بعد اكتشافها..
هذا يجعل من لغات البرمجة خيارًا أفضل من ناحية الالتزام بمعايير الأداء.
الأدوات المرئية للبرمجة: الإيجابيات والسلبيات
لنلخص الفقرات السابقة في ذكر إيجابيات وسلبيات الأدوات المرئية للبرمجة، لتساعدك على تحديد ما إذا كانوا يناسبون أهدافك ومتطلباتك.
بالنسبة لمميزاتها:
- السرعة في التطوير والإنجاز – خاصة لبناء نسخ تجريبية من الألعاب.
- سهلة التعلم – حتى للأطفال الصغار (تذكرون Scratch أليس كذلك؟).
- عدم الحاجة لخبرة سابقة في البرمجة.
- وجود خيارات وعناصر جاهزة – عدم الحاجة لبرمجة كل شيء من الصفر.
- كثرة المحتوى التعليمي لها في بعض محركات الألعاب.
- سهولة العمل مع الفريق – يمكن للمصممين، مثلاً، إضافة خصائص وخيارات وعناصر بسهولة.
- لا تحتوي على “أخطاء” – أي أنه لا يمكن أن يتعطل البرنامج لخطأ برمجي، لأن الأنظمة مصممة لتعمل بناءً على عناصر محضرة مسبقًا، ولا تتفعل هذه العناصر إن وجد خطأ ما فيها.
هذه المزايا تبدو مغرية لأول وهلة، لكن يجب النظر إلى الجانب الآخر..
..جانب العوائق والسلبيّات:
- خياراتها قد تكون بسيطة – ربما سيصعب تطبيق بعض المزايا والخيارات المتقدمة، المتعلقة في الشبكات مثلاً.
- لن تتعلم شيئًا عن كيفية عمل البرنامج وآليته – صحيح، ستستطيع برمجة اللعبة، لكن لن تفهم كيف تعمل هذه اللعبة.
- المحتوى التعليمي لها غالبًا ما يكون لبرمجة خصائص بسيطة – أي ربما لا يوجد شروحات لبرمجة نظام ذكاء اصطناعي متقدم، مثلاً.
- يصعب تنظيمها وإدارتها بشكل جيد – أي أنك قد تضيع بين العقد أو الأحداث بعد فترة من برمجتهم، وبخاصة للتفاعلات المعقدة بين الشخصيات.ص
- كل أداة مخصصة لمحرك واحد فقط – فبعد بذل الوقت والجهد لتعلمها، قد يلزم تعلم أداة أخرى عند الانتقال لمحرك آخر.
- اللعبة قد تكون بطيئة إذا احتوت على تفاعلات معقدة – مقارنة بلغات البرمجة.
- متعبة في موضوع الأداء – عند ملاحظة مشكلة ما، مثل استهلاك عالي للذاكرة، سيصعب إصلاحها بالأدوات المرئية (مع أن هذه المشاكل نادرة الحدوث للألعاب البسيطة)
لغات البرمجة: الإيجابيات والسلبيّات
لنناقش الآن لغات البرمجة، ولكن قبل ذلك، أريد أن أذكر نقطة:
التعلم على لغة برمجة لأول مرة يأخذ دائمًا وقتًا أطول من التعلم على لغات جديدة لاحقًا.
لذا تعلم البرمجة يعتبر استثمارًا للوقت، في البداية تتطلب جهدًا مضاعفًا لكنها تؤتي ثمارها لاحقًا.
أهم النقاط التي تتفوق بها لغات البرمجة هي:
- الإمكانيات بيدك – كل ما يمكنك تخيله يمكنك تحقيقه، لست مقيدًا بعناصر وخصائص محددة (بما يناسب إمكانيات البرنامج وقدرته)
- خبرتك في لغة البرمجة تنتقل معك أينما ذهبت – حتى عند تغيير محرك الألعاب، ستستطيع التعلم والتأقلم على الوضع الجديد بسرعة.
- تعلم البرمجة يساعدك على فهم عملية تطوير اللعبة بشكل تام – مما يجعلك قادرًأ على حل المشاكل الجديدة بنفسك، أينما وكيفما ظهرت.
- وأيضًا تساعد في التعرف على وفهم الخوارزميات الرياضية المستخدمة بكثرة في تطوير الألعاب.
- تجعل اللعبة تعمل بأداء محسّن وأسرع – وخاصة للألعاب التي تحتوي على عمليات معقدة ورسوميات دقيقة.
- معظم الشركات تتطلب خبرة في البرمجة، لذا لمن يخطط أن يعمل عند شركة تطوير ألعاب، عليه أن يهتم بلغات البرمجة.
- بالنسبة للمحتوى التعليمي في المواضيع المتقدمة: غالبًا ما يتم باستخدام لغات البرمجة، وبخاصة الدورات والكتب والمناهج الرسمية.
- تعلم البرمجة يعطيك نقطة تفوق على أقرانك، لمن يعمل بشكل مستقل أو حر.
- إذا واجهتك مشكلة برمجية ما، يمكنك سؤال أي مبرمج (على منتدى مثلاً) لتحصل على إجابة. أما باستخدام الأدوات المرئية، يجب أن تسأل شخصًا متمكنًا من الأداة التي تستخدمها.
نستنتج أنه من ناحية التطور المهني والتعلم والخبرة، تعلم لغات البرمجة أمر أساسي بلا شك.
وأيضًا من ناحية محركات الألعاب، فبشكلٍ عام، تتفوق لغات البرمجة في دعمها وكثرة استخدامها على الأدوات البرمجية المرئية.
لكن هذه الفوائد تجلب معها عدة مشاكل، وسنرى أنها مقايضة بين هذه الإيجابيات والوقت والجهد اللازمان.
يمكن تلخيص سلبيات استخدام لغات البرمجة بالآتي:
- الوقت اللازم للتعلم – الكثير منا فقط يريد صناعة لعبة، ليس مهتمًا بتعلم البرمجة ولن يضيع وقته بها، لذا لم يتعب نفسه؟
- في المراحل الأولى، برمجة ميزة بلغة برمجة تحتاج وقت مُضاعَف، على الأقل، مقارنة ببرمجتها بأداة مرئية.
- هناك من يعتبر نفسه متعلم مرئي، أي انه لا يستطيع التعامل مع النصوص بسهولة – لذا ربما من الأفضل لهم استخدام الأداوت المرئية للبرمجة.
- يمكن الوقوع في الأخطاء بكثرة – لا يمكن أن يعمل أي ملف برمجي لأول مرة من كتابته، يجب أن يظهر خطأ ما?
- التعامل مع فريق يصبح أصعب – ماذا إذا طلب المصمم التعديل على خاصية ما؟ يجب أن يقوم المبرمج بالتعديل، فالمصمم لن يستطيع البرمجة.
- عند العمل مع مبرمج آخر، يجب الاتفاق معه على أساليب البرمجة والتطوير، بما أن كل مبرمج قد يستخدم أسلوب خاص. ويجب التأكد أنه يفهم ما تكتبه أنت.
- البرمجة تتطلب المداومة والاستمرار في التعلم وتفريغ الوقت لها، لذا ستضيف مهمة أخرى إلى المهام اليومية.
ما الفائدة من معرفة الإيجابيات والسلبيات؟
بعد تلخيص مزايا كل من لغات البرمجة والأدوات المرئية للبرمجة، وعيوبهم..
أقترح على القارئ أن يقارن بين المزايا التي تناسبه أو يحتاجها من لغات البرمجة والأدوات المرئية، ثم مقارنة العيوب بينهم..
وذلك ليس عن طريق مقارنة عدد كل من المزايا والعيوب، فنحن لا نوزن بناءً على العدد، بل بناءً على تأثير كل نقطة على عملك وحياتك إما بشكل سلبي أو إيجابي.
كمثال أفترضه على نفسي، من باب التوضيح:
افترض أنني أريد صناعة لعبة لمسابقة تنتهي بعد شهر، واللعبة التي سأصنعها صغيرة وبسيطة، ولكنني لا أملك خبرة في البرمجة..
وبما أنه ليس لدي من الوقت الكثير فأنا مشغول كعادتي، لا يمكنني تعلم البرمجة لأنها ستتطلب وقتًا يوميًَا، وخاصة أن صناعة لعبة بلغة البرمجة يتطلب ضعف الوقت..
من الواضح أن البرمجة المرئية هي الخَيار الأفضل لي، صحيح؟
لكن عند معرفة أنني لست متعطّلاً على المسابقة، وأنه، بلا ريب، هناك مسابقات أخرى قادمة لاحقًا.. وحقيقة أنني أخطط للعمل مع شركة لتطوير الألعاب مستقبلاً..
يبدو لنا أن موضوع الوقت لن يؤثر عليّ بشكل سلبي على المدى الطويل،
وبالعكس، قد يؤثر إيجابيًّا إذا استثمرت وقتي في تعلم البرمجة من الآن… وهذا ما عليّ فعله ?
أحب أن أنهي هذا المقال بمثال كتبه أحد الأعضاء في أحد مواقع التواصل:
إذا شبهنا المطور أو المبرمج بطباخ لمطعم ما، يمكن اعتبار من يستخدم الأدوات المرئية لبرمجة أجزاء اللعبة كطباخ يقدم الوجبات الجاهزة المسخنة في ال”مايكروويف”
أما من يكتب بلغات البرمجة ويصنع اللعبة باستخدامهم يعتبر الطباخ الذي يطبخ كل شيء بيده.
دعوني أوضح قليلاً، الفرق بين الاثنين هو الجودة من وجهة نظر الطباخ، ولكن هذه الجودة هي ليست كل شيء، فعند تسخين كأس حليب مثلاُ، أنت لا تهتم ما إذا سُخّن باليد أو “بالمايكروويف”، ما تريده هو الحصول عليه بسرعة.
نفس الشيء ينطبق على البرمجة، ربما ما يهمك هو إتمام وبناء اللعبة بشكل يعجب اللاعب بأسرع طريقة، بغض النظر عن التقنية المستخدمة.
وفي النهاية، لكلٍ منّا تفضيلاته، وما يهم في النهاية هو أن تعمل اللعبة بشكل جيّد.