الشبكة العربية لمطوري الألعاب

مبتدئ  زكرياء الحمري مشاركة 1

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

و بناء على آرائكم و ملاحظاتكم سأطرح إن شاء الله أسئلة أخرى
جزاكم الله خيرا
في أمان الله

خبير مدير وسام البهنسي مشاركة 2

وفي Sep 16, 2007 04:42، أعرب زكرياء الحمري عن رأيه بالموقف كالآتي:

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

و بناء على آرائكم و ملاحظاتكم سأطرح إن شاء الله أسئلة أخرى
جزاكم الله خيرا
في أمان الله


وعليكم السلام ورحمة الله وبركاته، وكل عام وأنتم بخير.

هذان السؤالان يتكرران دائماً على مسامعي من العديد من الأشخاص. لذا أرجو أن تصل كلماتي هذه إلى أكبر عدد من المبرمجين الذين يحاولون الوصول إلى نفس الهدف.

سأقتبس بعض الجمل من مقالة المحرك ثلاثي الأبعاد الموجودة في ويكيبيديا، والتي تشرح القصة من بدايتها:
http://ar.wikipedia.org/wiki/محرك_ثلاثي_الأبعاد

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

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

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

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

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

النقطة الأخيرة، في سؤال الأخ زكرياء: ما هي الوسائل البرمجية المستخدمة..
طبعاً مترجم ++C (أو اللغة التي تود استخدامها)، مع برنامج لكتابة الكود نفسه (editor). يعتبر Visual Studio.NET هنا طبعاً هو الأفضل بين أقرانه، وأنا شخصياً أؤيد هذا الرأي... هذه ستكون بيئة العمل اليومية.
بالإضافة إلى ذلك، قد تحتاج إلى برامج مختلفة لأداء مهام معينة لتجريب إمكانيات المحرك. كمثال، تريد أن تستطيع فتح ملفات BMP وإظهارها، فستحتاج أي برنامج تحرير صور سواءً كان Paint أو Gimp أو Photoshop ... الخ. نفس الوضع مع المجسمات الفراغية... يمكننا استخدام Milkshape3D أو GMax أو أو... هناك العديد من هذه البرامج متاح بشكل مجاني (لا داعي للقرصنة). كمثال أذكر البرنامج العتيد Softimage|XSI، والذي يقدم نسخة خاصة تناسب مثل هذه الاحتياجات، تدعى The Mod Tool، مجانية تماماً وميزاتها واسعة ومرنة.


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

تحياتي،

وسام البهنسي
مبرمج في إنفيديا وإنفريمز