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

مبتدئ  أيوب مشاركة 1

مرحبا جميعا !

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

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


هل كان يجب ان أبدأ بأختيار قصة اللعبة قبل برمجتها؟! ..أليس تشغيل اللعبة يعتمد على الوضائف التشغيلة و المحتوى او العرض البصري للعبه هو جزء يمكن اضافته و تشغيلة بالوضائف..


هناك الكثير من المفاهيم و الافكار المتشابكة التي لم استطع حلها او فك تشابكها.. ارجو المساعدة في توظيح مشكلتي و ارشادي الى كيفيه الربط بين وظائف اللعبة و محتوى اللعبة.


ولكم جزيل الشكر.

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

السلام عليكم، وأهلاً وسهلاً بك أخي أيوب في الشبكة.


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


لكن يبدو أنك قد ضعت قليلاً عندما بدأت بكتابة المحتوى الفعلي وبدأت تواجه محدوديات في الوظائف التي كتبتها سابقاً. هل فهمي لمشكلتك صحيح حتى الآن؟



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


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


مرة أخرى لا أعلم إن كان هذا هو الكلام الذي تحتاج له. أرجو التوضيح أكثر إن أمكن.


والسلام عليكم

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

مبتدئ  أيوب مشاركة 3

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

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

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

- مستقرة تماماً بعكس النسخة الأصلية المعطوبة
- هيكل البيانات فيها مختلف حيث حاولت فصل توصيف الشخصيات والمواقع عن الوظائف الأساسية قدر الإمكان

- تبسيط النظام مع الحفاظ على الهيكل الأساسي

أريد أن أستشير رأيك في عدة نقاط:

1. تقسيم الكود: هل يعتبر الهيكل الحالي تقسيمًا صحيحًا بين:

محرك اللعبة (GameModel, GameView, GameController)

محتوى اللعبة (gameContent object)؟

خاصة أنني حاولت جعل كل البيانات الوصفية (مثل شخصيات، مواقع، أدوات) في كائن gameContent المنفصل.

2. المرونة: لاحظت أن:

إضافة موقع جديد لا يحتاج لتعديل الكود الأساسي من خلال هذا التقسيم.

لكن إضافة نوع جديد من التفاعلات غير معرف بالفعل (طريقة تبادل عنصر مع npc) سيحتاج لتعديل وظائف المحرك مرة أخرى.

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

3. إدارة المحتوى: حالياً المحتوى موجود في كائن JavaScript كبير. هل تنصح باستخدام:

ملفات JSON منفصلة؟

نظام تحميل ديناميكي؟

أو البقاء على الوضع الحالي؟

4. التفاعل مع القصة: أكبر تحدي أراه هو كيف أجعل الوظائف تستجيب للقصة ديناميكيا دون أن تصبح معقدة جداً. مثلاً:

إذا أردت أن يتغير حوار شخصية بناءً على حدث سابق

أو تتنقل الشخصيات من موقع لآخر استجابتا للوقت الدقيق في اللعبة

في النسخة المرفقة حاولت تطبيق بعض هذه الأفكار عبر:

نظام المهام (Quests) الذي يفتح مواقع جديدة

تأثير الثقة (Trust) على الحوارات
لكني ما زلت أشعر أن الربط بين القصة والوظائف يحتاج لتحسين.

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

لك مني خالص الشكر والتقدير، وأسأل الله أن يجزيك خيراً على وقتك وعلمك.