بعد ممراستي للبرمجة بدأت ببرمجة لعبة في أوقات الفراغ كلعبة بأساس نصي و تبادل أدوار و محاكاه. و استخدامت صفحة ويب و جافاسكربت للبرمجتها و تشغيلها للسهوله التشغيل و توافق اللغة مع جميع الاجهزة و عدم احتياج الى محرر اكواد أو مشغل خاص للتشغيل اللعبة فيمكنني كتابة الأكواد واختبارة بالحاسوب و الهاتف على حد سواء دون استخدام مكتبات و مشغلات خدمدده مثل مكتبه لغة Twine او المشغل sugarcube... لكن ليس هذا هو موضوعنا. بعد ان استمريت في البرمجه لعده أسابيع و كتابه مجموعه من الوضائف لتشغيل اللعبه و العمل على عدد السناريوهات الموجوده في اللعبة .. وصلت الى نقطة حيث ان الوظائف ستكون استجابتها مختلفه على حسب المحتوى او الموقف الذي سيكون فيه اللاعب. لذلك امضيت عده أسابيع اخرى لأعاده هيكلة اللعبة عدده مرات بحيث يمكنني إضافه المحتوى دون تعديل وظائف اللعبة لتشغيل محتوى جديد للعبة. اللعبة تبدأ من الوظائف لتكون مناسبة مع هيكل البيانات و طريقة تخزينها ليمكن قرآتها ثم استخدامها لتشغيل المحتوى .. انا قوم بملء الملفات بمجموعه الوظائف مثل هيكل بيانات الشخصية و المواقع و وظاءف التفاعل و التنقل و غيرها.. و عندما اصل الى نقطه المحتوى حيث كيف سيبدأ اللاعب و ماهي فصة اللعبة حيث ماذا يجب ان يفعل .. لم استطع كتابه شيء.
بحثت قليلا عن العاب بدون محتوى معين و اللاعبن من يختارون ما يفعلوه.. و وجدت ان لعبة ماين كرافت تكون اقرب الى لعبه بدون قصة واضحة .. مع ذلك لم تستطع ان اقوم بأنها أي نسخه من اللعبة و وقفت متفرج كيف أضيف قصة للعبة و بما ان اغلب الوضائف التي قمت بها تأدي الغرض لمذا أشعر ان هناك نقص ولا يمكن ان تكتمل اللعبة بدون قصة او محتوى معين.
هل كان يجب ان أبدأ بأختيار قصة اللعبة قبل برمجتها؟! ..أليس تشغيل اللعبة يعتمد على الوضائف التشغيلة و المحتوى او العرض البصري للعبه هو جزء يمكن اضافته و تشغيلة بالوضائف..
هناك الكثير من المفاهيم و الافكار المتشابكة التي لم استطع حلها او فك تشابكها.. ارجو المساعدة في توظيح مشكلتي و ارشادي الى كيفيه الربط بين وظائف اللعبة و محتوى اللعبة.
السلام عليكم، وأهلاً وسهلاً بك أخي أيوب في الشبكة.
بصراحة لم أفهم تماماً مشكلتك. كلامك بدأ واضحاً، ثم أصبح غامضاً منذ حديثك عن ماين كرافت وحتى النهاية... حسب ما فهمت، أنك قمت بكتابة وظائف برمجية يمكن استخدامها في ألعاب مغامرات نصيّة. وضمن تلك الوظائف، كتبت الكود اللازم لقراءة ملفات محتوى، هي عملياً التي ستحتوي على نصوص وبنية اللعبة.. الأسئلة، الخيارات، الحالات ... الخ.
لكن يبدو أنك قد ضعت قليلاً عندما بدأت بكتابة المحتوى الفعلي وبدأت تواجه محدوديات في الوظائف التي كتبتها سابقاً. هل فهمي لمشكلتك صحيح حتى الآن؟
بالمناسبة، إنجازك هو عملياً ما يدعى هذه الأيام بـ "محرك ألعاب مغامرات نصيّة". من الطبيعي أن تكتشف محدوديات وقصور بالمحرك أثناء بناء المحتوى.. في هذه الحالة ستضطر للعودة قليلاً لتطوير المحرك وتعديله بما يناسب المحتوى. بعد ذلك تعود إلى بناء المحتوى وفقاً للإمكانيات الجديدة وتستمر إلى أن تصطدم بعقبة أخرى أو أن تنتهي من بناء المحتوى.. دورة العمل هذه طبيعية ولا داعي للفزع منها.
عليك أن تحاول حصر المزايا التي يجب أن يحتويها المحرك انطلاقاً من القصة التي تنوي أن ترويها. مثلاً، إذا كان ضمن القصة تشعبات فرعية، يجب أن يدعم المحرك ذاكرة خاصة يتم فيها حفظ "حالة" القصة.. وتستطيع القصة استخدام المعلومات من هذه الذاكرة لتقرير التوجه القادم فيها.
مرة أخرى لا أعلم إن كان هذا هو الكلام الذي تحتاج له. أرجو التوضيح أكثر إن أمكن.
السلام عليكم أخي أيوب، وأعتذر عن التأخر في الرد.. قمت بالاطلاع على اللعبة، وسأحاول الإجابة على تساؤلاتك بقدر معلوماتي:
بالنسبة لتقسيم الكود، بصراحة هذا الأسلوب ليس شائعاً في تطوير الألعاب التقليدية. نظام الـ Model-View-Controller شائع في مشاريع الويب.. لكن هذا لا يعني أن استخدامه في هذه الحالة خطأ، لا سيما أن اللعبة فعلاً هي لعبة ويب. لذلك لا تقلق من هذه الناحية، واستمر في هذه البنية لأن لها إيجابيات لحالتك الخاصة.
هناك من يحبون التوجه الذي يسمح ببناء كل اللعبة من خلال ملفات المحتوى فقط ودون الاقتراب من الكود.. لكن في الواقع ستحتاج إلى صيغة متقدمة للتعبير عن المحتوى، مما قد يحوّل المحتوى نفسه إلى نوع من الكود هو الآخر.. وهذا أمر أنصح بتفاديه.. هناك حدود طبعاً للمحتوى الوصفي، وعموماً هو غير ملائم للتعبير عن بُنى شرطية معقدة.. هذه مهمة لغات البرمجة.. لحل هذه المعضلة، تستطيع أخذ "حل وسط".. لا تحصر اللعبة بملفات محتوى فقط. اسمح لها أن تحتوي على ملفات كود أيضاً، لكن هذا الكود يكون منفصل عن كود المحرك. مهمته فقط متابعة بعض المتغيرات وتحقيق ترتيب الأحداث من مستوى عالي وسير القصة. وتبقى ملفات المحتوى محصورة بوصف الكائنات المختلفة في اللعبة. لا تقلق من الحاجة لإضافة وظائف جديدة في المحرك أثناء بناء اللعبة. هذا أمر طبيعي، فالمحرك لا يتم تطويره في العدم بمعزل عن اللعبة، وإنما يتطور ليخدم اللعبة.
نعم، أنا أميل لحفظ المحتوى بملفات json مستقلة عن بقية الكود.. لكن هذا لا يعني أنها يجب أن تبقى كذلك عند التوزيع النهائي، وإنما فقط أفضل فصل هذه الملفات ضمن عملية التطوير.. وعند النشر يمكنك دمج كافة الملفات في ملف واحد لجعل التوزيع بسيط.
كما ذكرتُ في النقطة 2، لا تحصر بناء اللعبة فقط في محتوى وصفي، وإنما اسمح بإضافة بنى برمجية تنفيذية خاصة بقصة اللعبة كذلك. في حالة المهام quests فأعتقد هذه يجب أن يكون لها بنية وصفية خاصة بها.. لكن الربط بين المهام والتقدم في القصة يمكن أن يتم من خلال كود خاص.. بالمناسبة أنا لاحظت أن بعض الكائنات لديك بالفعل تحمل متطلبات "requirements". هذه طريقة بسيطة يمكن استخدامها للتحكم بسير القصة، لكن متابعتها صعبة على مؤلف القصة خاصة عندما تتشعب الخيارات وتكثر الكائنات.
عمل جميل جداً وبصراحة أنا متحمس للعب اللعبة الكاملة، فأنا أحب هذه النوعية من الألعاب، لا سيما أنها عربية وتبدو ذات ثقافة عربية أصيلة أيضاً. بالتوفيق، وأنا جاهز لأية أسئلة أو استشارات أخرى.
بدايةً، أود أن أعبر عن عميق امتناني للوقت والجهد الذي بذلته في تحليل مشروعي وتقديم التوجيهات القيمة. لقد كانت ملاحظاتك قيمة حيث ساعدتني في تصويب العديد من النقاط التي كنت أعاني منها.
أما بخصوص النقاط التي ذكرتها:
- نظام الـ MVC: لقد استخدمته لسببين رئيسيين:
التنظيم البرمجي الذي يسهل الصيانة والتطوير.
كفاءة تحديث واجهة المستخدم ديناميكيًّا (مثل النصوص والأزرار) بناءً على تفاعلات اللاعب.
- مسألة الشروط في المحتوى: هذه النقطة بالذات ما زالت تشكل لي بعض الغموض. فهمت منك أن تحويل المحتوى إلى "شبه كود" ليس بالأمر الجيد، لكني في نفس الوقت السماح باضافه بنى برمجية تساعد في متابعة تطور القصة.
أيضا للحفاض على ديناميكية تخصيص المحتوى, أحتاج لطريقة ما لتنفيذ الشروط المعقدة. فمثلاً:
يعتبر حلاً مقبولاً؟ أم أن هذا يقع ضمن المشكلة التي تحذر منها؟
- التساؤل الأساسي: رغم تمكني من تطوير الوظائف البرمجية، إلا أنني ما زلت أعاني في تحديد:
كيف يمكنني صياغة القصة والمحتوى الرئيسي للعبة؟
كيف يمكن الموازنة بين المرونة في خيارات اللاعب ووجود قصة متماسكة؟ (مثلًا: هل سيكون هناك نهاية معينة؟ أم أن اللاعب يصنع هدفه بنفسه كما في ماين كرافت؟).
هل تنصح بالبدء بقصة بسيطة أولًا (مثل الموجود حاليا في النسخة المرفقة سابقا) ثم التوسع، أم بالتفكير في الهيكل العام للعالم منذ البداية وماذا و كيف سيفعل اللاعب في العبة؟
علما بأني اخترت ان تكون اللعبة كلعبة محاكاة و تبادل أدوار نصية.
أخي الكريم، شكرا جزيلا لك على تأكيد المستمر بأن المحرك لا يتم تطويره في العدم بمعزل عن اللعبة، وإنما يتطور بشكل مستمر ليخدم اللعبة, حيث كان هذا الأمر يأرقني.
أعتذر إذا كانت بعض استفساراتي غير واضحة، ولكنني أحاول حقاً فهم كيفية الربط بين:
القدرات البرمجية التي طورتها
والمحتوى القصصي الذي يجب أن تقدّمه اللعبة
هل لديك أي نصائح أو موارد يمكن أن تساعدني في هذه الجزئية؟
جزاك الله خيراً على صبرك ومساعدتك، وأتطلع لسماع رأيك.