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

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

مرحبا جميعا !

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

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


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


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


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

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

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


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


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



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


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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

السلام عليكم أخي أيوب، وأعتذر عن التأخر في الرد..
قمت بالاطلاع على اللعبة، وسأحاول الإجابة على تساؤلاتك بقدر معلوماتي:


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



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

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

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

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

أخي العزيز وسام البهنسي،

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

أما بخصوص النقاط التي ذكرتها:

- نظام الـ MVC: لقد استخدمته لسببين رئيسيين:

التنظيم البرمجي الذي يسهل الصيانة والتطوير.

كفاءة تحديث واجهة المستخدم ديناميكيًّا (مثل النصوص والأزرار) بناءً على تفاعلات اللاعب.

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

أيضا للحفاض على ديناميكية تخصيص المحتوى, أحتاج لطريقة ما لتنفيذ الشروط المعقدة. فمثلاً:

هل تحويل الشروط إلى صيغة نصية مثل:


        "condition": ["npc_traderAhmed_trust_>=_30", "player_item_meat_>=_3"]


يعتبر حلاً مقبولاً؟ أم أن هذا يقع ضمن المشكلة التي تحذر منها؟


- التساؤل الأساسي: رغم تمكني من تطوير الوظائف البرمجية، إلا أنني ما زلت أعاني في تحديد:

كيف يمكنني صياغة القصة والمحتوى الرئيسي للعبة؟

كيف يمكن الموازنة بين المرونة في خيارات اللاعب ووجود قصة متماسكة؟
(مثلًا: هل سيكون هناك نهاية معينة؟ أم أن اللاعب يصنع هدفه بنفسه كما في ماين كرافت؟).

هل تنصح بالبدء بقصة بسيطة أولًا (مثل الموجود حاليا في النسخة المرفقة سابقا) ثم التوسع، أم بالتفكير في الهيكل العام للعالم منذ البداية وماذا و كيف سيفعل اللاعب في العبة؟

علما بأني اخترت ان تكون اللعبة كلعبة محاكاة و تبادل أدوار نصية.


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

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

القدرات البرمجية التي طورتها

والمحتوى القصصي الذي يجب أن تقدّمه اللعبة

هل لديك أي نصائح أو موارد يمكن أن تساعدني في هذه الجزئية؟

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

وتقبل فائق التقدير والاحترام،
أيوب