تطوير الألعاب: ألعاب الجوال العادية وتبديل الأزياء وألعاب المتصفّح
نطاق السعر: $21,000 – $45,000
(11 تقييم) 1509 مشاهدة
أتعامل مع اللعبة بوصفها منتجاً برمجياً: يُولَّد خط المحتوى من مسح الأصول، وتُوحَّد النقاط على مقياس 0-100، ويُتحقَّق من الشراء على الخادم بتوقيع المنصّة لا بقول العميل. وفي الإصدارات متعدّدة اللغات يُحسَب تخطيط اليمين-لليسار والتعليق الصوتي من البداية، وفي فئة الأطفال تُبنى بوابة الشراء وموافقة الإعلانات آليتين منفصلتين.
الخدمة 6: تطوير الألعاب: ألعاب الجوال العادية وتبديل الأزياء وألعاب المتصفّح
لا تُحدَّد كلفة اللعبة بعدد أسطر الشيفرة بل بالقرارات التي تتراكم قبل أن تصبح قابلة للّعب: كم صيغة سترسم، وعلى أي أساس تُمنَح النقاط، وهل يُتحقَّق من الشراء على الخادم، وإن كان بين المستخدمين أطفال فأي شاشة تقع خلف أي بوابة. ولا يُحلّ شيء من ذلك باختيار محرّك. أنا أتعامل مع اللعبة بوصفها منتجاً برمجياً: خط المحتوى، ورياضيات التسجيل، والتحقّق على الخادم، والامتثال لمتاجر النشر تُبنى كلها كمسألة هندسية واحدة.
لا يمكن وصف هذا البند برقم واحد، ولذلك يُعرَض على شكل نطاق. فالفارق واسع بين لعبة متصفّح بسيطة وإصدار متعدّد اللغات يُنشَر في المتاجر ويحتاج إلى تحقّق من الشراء وامتثال لفئة الأطفال. وكل رقم أدناه مقيس من لعبتي المنشورة ومن مركز الألعاب العامل على هذا الموقع.
خط الإنتاج – التدفق العام
| التصميم الحلقة الأساسية، التقدّم، آليات بلا إخفاق |
خط المحتوى توليد الصيغ، التحزيم، التوحيد |
العميل المشهد، الحركة، حفظ محلي أولاً |
الخادم النقاط، التحقّق من الشراء، لوحات الصدارة |
النشر امتثال المتجر، التصنيف العمري، القياس |
لماذا هذه الخدمة؟
أشيع خطأ في تطوير الألعاب العادية هو الظنّ بأن العمل بصريّ في معظمه. غير أن ما يُبقي اللعبة قائمة هو الجانب غير المرئي: توليد الصيغ دون عدّها يدوياً، واتّساق النقاط، وألّا يُصدَّق العميل في أمر الشراء، والالتزام بسياسات المتجر الخاصة بالأطفال. وهذه لا تُضاف لاحقاً؛ ومحاولة إضافتها لاحقاً تعني إعادة الكتابة.
| النهج التقليدي | نهجي |
|---|---|
| تُكتب أعداد الصيغ في الشيفرة يدوياً | تُولَّد من مسح الأصول؛ فتتحدّث القائمة تلقائياً مع نمو المحتوى |
| تُضبَط النقاط "بالإحساس" | سقف النقاط لكل فئة ثابتٌ في الشيفرة، والنتيجة تُوحَّد على مقياس 0-100 |
| يُمنَح الشراء بناءً على قول العميل | يُتحقَّق من الإيصال على الخادم بتوقيع المنصّة ولا يمكن استخدامه مرتين |
| يُفكَّر في التوطين بعد النشر | يُقسَّم النص إلى فضاءات أسماء؛ ويُحسَب تخطيط اليمين-لليسار والتعليق الصوتي من البداية |
| يُجرَّب تجاوز الشاشة يدوياً على الجهاز | تُفتَح كل شاشة آلياً على مصفوفة عروض أجهزة؛ والشاشة الجديدة تكسر الاختبار |
| امتثال الأطفال مجرّد خانة اختيار | بوابة الشراء ومسار موافقة الإعلانات آليتان منفصلتان ولا يُخلَط بينهما |
منهجي المعماري
1) أتمتة خط المحتوى
في لعبة تبديل الأزياء ينمو المحتوى بسرعة: فكل عارضة وكل فئة وكل صيغة لونية تُحدث أثراً مضاعِفاً. وإن كُتبت هذه الأعداد في الشيفرة يدوياً فسدت عند أول تحديث للمحتوى. لذلك تُولَّد جداول الصيغ من مسح الأصول وتُضمَّن في الشيفرة؛ فالرقم قياسٌ للملفات على القرص لا شيءٌ يتذكّره إنسان.
ويُوحَّد جانب الرسوم أيضاً: فمكتبةٌ محوَّلة إلى صيغة واحدة ومقسَّمة إلى حزم تجعل زمن التحميل وحجم الحزمة قابلين للتوقّع.
2) ربط النقاط بالرياضيات
لا تُمنَح نقاط الإطلالة بعبارة "بدت جميلة"؛ فالقاعدة يجب أن تكون متّسقة كي يفهم اللاعب تقدّمه. التسجيل طبقة قائمة بذاتها: في الوضع الحر تُجمَع النقاط من أربع فئات، وفي وضع المسابقة تُضاف مطابقة الثيمة فتصبح خمساً، ثم تُوحَّد النتيجة على مقياس 0-100. ويُضرَب فوقها معامل ندرة متدرّج.
وهذا التمييز مهم: فلاختلاف عدد الفئات بين الوضعين لا تُقارَن النقاط الخام مباشرة. ومن دون التوحيد يفسد ترتيب المسابقة بصمت.
3) التحقّق من الشراء على الخادم
إن قال العميل "اشتريت" فهذا ادّعاء. والتحقّق يجري على الخادم بتوقيع المنصّة نفسها؛ والمعاملة المتحقّق منها تُكتَب بسجل ذرّي، فلا يمكن استخدام الإيصال ذاته مرة ثانية ولا في حساب آخر.
وتُفصَل حالات الخطأ: يُمنَع الإيصال غير الصالح فعلاً وخطأ الإعداد، أما في عطل شبكة أو خادم مؤقّت فلا يُظلَم اللاعب. ومن دون هذا الفصل إمّا يمرّ الاحتيال وإمّا لا يحصل اللاعب الذي دفع على ما اشتراه.
4) بناء امتثال النشر من البداية
في لعبة تُنشَر ضمن فئة الأطفال يكون الشراء والإعلان آليتين منفصلتين. فمدخل الشراء يقع خلف تحقّق من وليّ الأمر لا يُغلَق بالنقر خارجه: سؤال جمع يُولَّد عشوائياً، وسؤال جديد عند الإجابة الخاطئة، وذاكرة مؤقّتة قصيرة للتحقّق الناجح.
أما في جانب الإعلانات فالحماية مختلفة: يعمل مسار الموافقة قبل تهيئة مكوّن الإعلانات، وتُرسَل الطلبات براية المعاملة الموجَّهة للأطفال. وافتراض أن الاثنين خلف البوابة نفسها هو أشيع خطأ يُرصَد في المراجعة.
ما الذي أقدّمه
| المجال | ما أوفّره |
|---|---|
| إنتاج ألعاب الجوال العادية | عميل بـ Flutter و Flame، وحفظ محلي أولاً، ومزامنة سحابية |
| خط المحتوى | توليد الصيغ من مسح الأصول، والتحزيم، ومكتبة رسوم موحّدة |
| النقاط والتقدّم | تسجيل حسب الفئات، ونتيجة موحّدة، ومعامل ندرة، ولوحات صدارة |
| جانب الخادم | التحقّق من الشراء، وسلال الترتيب، والحماية من إعادة الاستخدام |
| التوطين | نصوص متعدّدة اللغات، وتخطيط من اليمين لليسار، وخط تعليق صوتي لكل لغة |
| ألعاب المتصفّح | جافاسكربت بلا تبعيات، ونقل الحساب الثقيل إلى Web Worker، وترتيب دون تسجيل دخول |
أرقام مقيسة من لعبتي المنشورة
ما يلي ليس تقديرات أُعدّت لعرض سعر؛ بل قيم مقيسة من شيفرة لعبتي المنشورة ومن مركز الألعاب العامل هنا. وهي أرقام لعبة واحدة في نوع واحد؛ وقد تختلف النسب إلى حدّ بعيد في نوع لعب آخر، لكنها تُظهر على الأقل حجم العمل الفعلي خلف كل بند.
| المكوّن | القياس | ماذا يعني |
|---|---|---|
| قاعدة شيفرة العميل | 395 ملفاً / 154.978 سطراً | مقسّمة إلى 79 خدمة و10 أصناف حالة؛ الحفظ محلي أولاً والمزامنة السحابية في طبقة مستقلة |
| محتوى خزانة الملابس | 918 قطعة / 11 عارضة | موزّعة على 14 فئة؛ و4 حزم حيوانات أليفة تضيف 193 قطعة أخرى |
| مكتبة الأصول | 14.081 رسمة / 23 حزمة | أعداد الصيغ اللونية لا تُكتب يدوياً؛ إذ تُضمَّن 1.134 مدخلاً مولَّدة من المسح |
| محرّك التسجيل | 15 ملفاً / 1.583 سطراً | في الوضع الحر 4×25 وفي المسابقة 5×20؛ موحّدة على 0-100 مع معامل ندرة من خمس درجات |
| جانب الخادم | 15 دالّة / 2.770 سطراً | الشراء يُتحقَّق منه بتوقيع المنصّة؛ ومدقّق من 629 سطراً وسجل ذرّي يمنعان إعادة الاستخدام |
| التوطين | 51 ملفاً / 17 فضاء أسماء | ثلاث لغات؛ وعدد المفاتيح 6.342 و6.333 و6.567، والعربية منها، بتخطيط من اليمين لليسار |
| التعليق الصوتي | 90 ملفاً / 30 لكل لغة | 22 سطراً للجولة الإرشادية و8 أسطر تفاعلية؛ ولكل لغة صوت واحد مثبَّت |
| الاختبارات ومصفوفة الأجهزة | 3.857 اختباراً / 420 ملفاً | الشاشات الـ43 كلها تُفتَح على 13 عرض جهاز؛ وشاشة غير مسجّلة في الفهرس تكسر البناء |
| ألعاب المتصفّح | 8 ألعاب / 6.950 سطراً | صفر تبعيات خارجية وبلا محرّك؛ ونُقل الحساب الثقيل إلى عاملَي ويب |
لماذا السعر نطاق؟
لم يكن من الأمانة عرض رقم واحد هنا. فالحدّ الأدنى يغطّي إصداراً بلغة واحدة خارج المتاجر، والحدّ الأعلى يغطّي إصداراً متعدّد اللغات في المتاجر مع تعليق صوتي وتحقّق من الشراء وامتثال لفئة الأطفال. وهذه هي البنود التي تصنع الفارق:
| بند النطاق | لماذا يغيّر الكلفة |
|---|---|
| عدد الصيغ | كلفة الرسم تتضاعف؛ فالعارضات × الفئات × الألوان تنعكس مباشرة على الميزانية |
| عدد اللغات واليمين-لليسار | التخطيط من اليمين لليسار هندسة واجهات لا عمل ترجمة؛ وكل شاشة يُعاد التحقّق منها |
| التعليق الصوتي | إنتاج الأسطر لكل لغة واتّساق الصوت وإدارة الملفات تحتاج خطاً مستقلاً |
| الشراء والخادم | التحقّق من التوقيع ومنع التكرار وتصنيف الأخطاء مكوّن مستقل بذاته |
| امتثال فئة الأطفال | بوابة وليّ الأمر وموافقة الإعلانات ومراجعة سياسة المتجر تضيف عبء تصميم واختبار |
التقنيات التي أستخدمها
Flutter و Flame، ولغة Dart، وحفظ محلي أولاً مع مزامنة سحابية، ودوالّ بلا خوادم، والتحقّق من الشراء عبر StoreKit وواجهة Play Developer، وتوطين قائم على ملفات ARB، وخط تعليق صوتي عصبي، وجافاسكربت بلا تبعيات مع عوامل ويب، ومصفوفة آلية لكشف تجاوز الشاشات.
ما أتركه عن قصد
| القرار | المسوّغ |
|---|---|
| لا يُستخدَم محرّك في ألعاب المتصفّح | في هذا الحجم يضيف المحرّك زمن تحميل وسطح تبعيات ولا يقدّم مقابلاً |
| لا يُشترَط تسجيل دخول للترتيب | المعرّف محلي؛ والبيانات التي لا تُجمَع لا تتسرّب |
| لا تُبنى آلية إخفاق | في الأعمار الصغيرة تكون حلقة الخسارة سبباً لترك اللعبة؛ فيُصمَّم التقدّم بلا عقوبات |
| لا يُربَط الإعلان والشراء ببوابة واحدة | يخضعان لقواعد مختلفة؛ وعدّهما بوابة واحدة أشيع سبب للرسوب في المراجعة |
مخرجات المشروع
| المخرَج | الوصف |
|---|---|
| بناء قابل للّعب | الحلقة الأساسية والتقدّم والحفظ تعمل؛ ونسخة قابلة للاختبار على الجهاز |
| خط المحتوى | توليد الصيغ من مسح الأصول؛ فلا يحتاج صيانة يدوية كلما اتّسع المحتوى |
| مكوّن الخادم | نقاط نهاية للنقاط والترتيب والتحقّق من الشراء مع حماية من التكرار |
| حزمة النشر | صور المتجر، والتصنيف العمري، ونموذج الخصوصية، ومراجعة الامتثال للسياسات |
| بنية الاختبار | مصفوفة تجاوز الشاشات واختبارات الخادم؛ وتُفرَض التغطية عند إضافة شاشة |
لمن تناسب؟
تناسب الفرق التي تريد تحويل فكرة لعبة إلى منتج قابل للنشر في المتاجر؛ والتي تواجه في لعبتها القائمة تبايناً في النقاط أو احتيالاً في الشراء؛ والتي تريد النشر بعدة لغات لكنها تتعثّر في اتجاه اليمين لليسار؛ والتي تحتاج يقيناً بشأن الامتثال لأنها تنشر ضمن فئة الأطفال؛ أو التي تريد ألعاباً خفيفة تُلعَب فعلاً على موقعها.
لماذا أنا؟
كل رقم أعلاه مقيس من لعبتي المنشورة: أعداد الصيغ، وسقوف النقاط، وعدد الاختبارات. ولم أكتب اللعبة فحسب، بل مررت بها في عملية المتجر، وفي مراجعة سياسة الأطفال، وفي إصدار بثلاث لغات. ولكل آلية أصفها مقابلٌ يعمل فعلاً.
ولهذا فائدة جانبية: أعرف بالتجربة لا بالتخمين أي قرار يرفع الكلفة ومن أين. ولهذا السبب تحديداً أدرجتُ أعلاه، بنداً بنداً، ما يفصل الحدّ الأدنى عن الحدّ الأعلى في النطاق.
الخلاصة
تطوير الألعاب ليس عملاً بصرياً بل عملاً هندسياً تتراكم فيه القرارات. فإن لم يكن خط المحتوى مؤتمتاً انكسر عند أول تحديث؛ وإن لم تُوحَّد النقاط فسد الترتيب بصمت؛ وإن لم يُتحقَّق من الشراء على الخادم تسرّب الدخل. الغاية ليست إخراج شيء قابل للّعب، بل إخراج شيء يبقى قائماً وهو ينمو.