أخبرتكم آخر مرة عن المكون التقني للعبة اللوحة "الذكية" لدينا ، ما هي المشاكل التي واجهناها وما حدث في النهاية.

اليوم أريد أن أخبركم المزيد عن تطبيق الهاتف المحمول ، اللعبة الأولى وكيفية إنشاء صور مصغرة لها.
يمكن العثور على المقالة الأولى هنا:
كيف صنعنا لعبة لوحية بجهاز تحكم عن بعد - الجزء الأولإنتباه! العديد من الصور.
في التعليقات على المقالة الأخيرة ، لاحظوا بشكل صحيح أنه من الأفضل عدم إنشاء لعبة ، ولكن نظامًا أساسيًا يمكنك على أساسه إنشاء ألعاب باستخدام الميكانيكا المتاحة. في البداية ، قمنا بتخطيطه ، ولكن نتيجة لذلك ، أدركنا أنه لا يمكننا فعل شيء بعيدًا عن اللعبة. فقط بسبب نقص الخبرة في تصميم اللعبة أو مصممي اللعبة المألوفين الذين يمكنهم إخبارنا بالميكانيكيات التي يجب دعمها.
لذلك ، قررنا أن ننفذ جميع الوظائف الأساسية للمنصة (متحركة ، تسليط الضوء الديناميكي ، المطالبات) في مباراتنا الأولى ، والتي سنتوصل إليها نحن أنفسنا. وبعد ذلك ، باستخدام الخبرة المكتسبة ، سنقوم بإنشاء مُنشئ كامل للألعاب.
تطبيق جوال
كما كتبت سابقًا ، يتم تنفيذ جميع إدارة النظام الأساسي من خلال تطبيق محمول يتصل به عبر بروتوكول BLE.
في الواقع ، من أجل تنفيذ أي لعبة ، تحتاج إلى كتابة تطبيق محمول كامل له ، حيث تصف جميع القواعد والميكانيكا.
في عملية كتابة التطبيق ، أجرينا جميع الاختبارات من خلال الاتصال بالمنصة ، وهو أمر غير ملائم للغاية. لذلك ، من أجل تبسيط التصحيح ، قمنا بعمل محاكي برامج بسيط في إطار التطبيق ، يتم عرض البيانات بنفس الطريقة التي يتم عرضها بها على أرض الملعب.
في البداية ، واجهنا مشكلة تتمثل في فقدان البيانات التي تترك التطبيق. وجدنا أنه عند استخدام BLE ، فإن الحد الأقصى لحجم الحزمة التي يمكن إرسالها هو 20 بايت. لذلك ، نقسم جميع البيانات الصادرة على BLE إلى حزم من 20 بايت ، وكتابة معلمة "البوابة" في الرأس. تساعد هذه المعلمة Arduino على فهم أي جزء من النظام الأساسي تنتمي إليه هذه الحزمة. من جانب Arduino ، تتم معالجة هذه الحزم بشكل أساسي:
if (NewCommandReady) { switch (CurrentGate) { case 1: processLEDCommand(); break; case 2: processDriverCommand(); break; case 3: processMagnetCommand(); case 4:
بعد تقسيم تدفق البيانات بين الهاتف الذكي ووحدة BLE إلى حزم 20 بايت ، توقفت البيانات عن الاختفاء ، ولكن غالبًا ما أتت إلى Arduino بشكل مشوه. اتضح أننا لم نأخذ في الاعتبار أن منفذ Arduino التسلسلي يحتوي على مخزن مؤقت 64 بايت. عند تجاوز سعة المخزن المؤقت ، يتم فقدان البيانات ، ويتم تشويه البيانات اللاحقة. زيادة الحجم وإنشاء المخزن المؤقت الخاص بك لم يساعد دائمًا. اضطررت إلى كتابة بروتوكول مجمّع أعلى نقل BLE لإرسال البيانات واستلامها بشكل موثوق.
نظرًا لاستخدام مثل هذا "البروتوكول" ، تباطأ تبادل البيانات قليلاً عن طريق التحقق من سلامة البيانات المرسلة ، ومع ذلك فإن الموثوقية أكثر أهمية للعبة - سيكون من العار إذا كان عرض
AOE لبعض القدرات غير مكتمل أو لم يتم نقل البطل عند تأكيد الانتقال على الهاتف المحمول.
لعرض الكائنات في الملعب ، استخدمنا مبدأ الطبقات في الأنظمة الفرعية لنافذة نظام التشغيل:
- كل كائن أو إجراء يتم تمييزه (الأبطال والعقبات والطريقة التي يتحرك بها البطل والنطاق المتاح للقدرة والباقي) يستخدم الطبقة الخاصة به.
- عند تطبيق الطبقات (على سبيل المثال ، منطقة AOE عبر النطاق المتاح للقدرة) ، يتم تذكر الحالة الأولية لمصابيح LED. ونتيجة لذلك ، من الممكن إرجاع اللون الأصلي عندما تختفي الطبقة العليا.
الجزء الأكبر من البيانات المنقولة بين تطبيق الهاتف المحمول والمنصة هو إعادة طلاء مصابيح LED. لأغراض التحسين ، تمت إضافة خوارزميات:
- لإعادة طلاء الثنائيات ، يتم استخدام مخزن مؤقت يتم فيه إجراء التغييرات حتى اللحظة التي يجب فيها عرض هذه التغييرات على اللوحة المادية.
- يتم استبعاد إعادة رسم LED واحد داخل نفس الأمر.
- عند إعادة الطلاء (على سبيل المثال ، تحول مساحة قدرة AOE بواسطة خلية واحدة) ، يتم تحليل الحالة الحالية للوحة LED. إذا لم يختلف لون LED في الحالة الجديدة عن اللون السابق ، فلن يتلقى Arduino أي أوامر لإعادة رسمه.
اللعب
لذا ، قررت اللعب. أدناه سوف أصف كيف يبدو من الجانب:
- نقوم بإدخال القابس في المخرج وتشغيل اللعبة.
- في كل بداية ، تجري معايرة تلقائية لتحديد العدد الدقيق لخطوات محرك السائر لنقل خلية واحدة.
- بالتوازي ، نقوم بتوصيل الهاتف الذكي باللعبة باستخدام Bluetooth.
- في تطبيق الهاتف ، يختار كل لاعب الشخصية التي يريد أن يلعبها. بعد أن يقوم الجميع باختيارهم ، اضغط على "START".
- كل شخصية لها لونها الخاص. ستقوم اللعبة تلقائيًا بتمييز الخلية حيث تحتاج إلى وضع شخصية بطلك.
- تجري اللعبة بالتتابع. يتم إجراء الخطوة الأولى من قبل اللاعب الذي اختار البطل أولاً ، والثاني - الثاني ، إلخ.
- كل بطل لديه عدد معين من نقاط العمل (OD) التي يمكن إنفاقها على التحرك حول الساحة أو تطبيق القدرات.
- كل قدرة لها وقت الاسترداد الخاص بها ، والذي يتم حسابه في جولات. في إطار تطبيق الهاتف المحمول ، هناك مفهومان: الانتقال - الفاصل الزمني من البداية إلى نهاية الإجراءات الحالية للاعب. Round - مجموع حركات جميع اللاعبين المشاركين في اللعبة. حاليًا ، يقتصر دور أحد اللاعبين على 30 ثانية.
- يتم وضع العوائق في الحقل الذي لن يتمكن اللاعب من خلاله من تمرير أو استخدام معظم القدرات. الآن يتم تمييزهم ببساطة باللون الأحمر في الملعب ، ولكن في المستقبل سيكون لديهم تجسيد مادي.
- يمكنك تحريك الملعب بمساعدة القدرات الخاصة التي يمتلكها كل بطل. على سبيل المثال ، النقل عن بعد لساحر. على عكس الحركة القياسية ، عندما يمهد اللاعب خلية طريق بطله بخلية ، عند استخدام هذه القدرات ، يشير اللاعب إلى نقطة النهاية فقط. ونتيجة لذلك ، هناك حاجة إلى خوارزمية للعثور على أقصر مسار إلى نقطة محددة ، وتجاوز جميع الأشياء التي يمكن التصادم معها (أشكال الأبطال الآخرين ، أشكال العوائق ، إلخ).
يتم حل هذه المشكلة بكل بساطة بمساعدة الرسوم البيانية وممر BFS عبر الخلايا.
باختصار ، جوهر الخوارزمية هو تحديد الخلايا عن طريق المسافة ، من الموقع الحالي للبطل إلى الخلية المحددة (المشار إليها باللون البرتقالي) ، والتي يجب نقل البطل إليها.
بعد العثور على الخلية المطلوبة ، يتم البحث عن مسار الإرجاع في الخلايا بطريقة تجعل المسافة من نقطة البداية إلى الخلية التالية أقل بمقدار 1 من الخلية الحالية (يتم تمييز المقطع باللون الأصفر). بعد العودة إلى وضع البداية (الخلية الخضراء) ، يتم تكوين سلسلة من النقاط ، وهو أقصر مسار. هذا التسلسل هو الذي ينتقل إلى Arduino كفرق لتحريك البطل.
- بعد وفاة البطل ، تنقل اللعبة رقمه تلقائيًا إلى "منطقة الوطن". منطقة محلية - خلية يتم فيها وضع الشكل في بداية اللعبة. لكل لاعب خاصته. بعد بدء اللعبة ، لا يمكنك الدخول أو استخدام القدرة في المنطقة المحلية. يتم ذلك بحيث أنه من المستحيل القبض على اللاعب في النهضة. بالنسبة للاعب الذي هزم بطله ، تنتهي اللعبة في جولة واحدة. بعد انضمامه للمعركة.
- في هذه اللحظة ، يفوز اللاعب الذي كان بطله آخر من بقي على أرض الملعب يهزم الخصوم. ولكن قد يكون الشرط مختلفًا ، على سبيل المثال ، الشخص الذي سجل N frags يفوز أولاً.
هذه لعبة تعمل في الإصدار الحالي. نظرًا لنقص الخبرة في تصميم الألعاب ، ربما لا نرى مدارس أو فرصًا واضحة. على سبيل المثال ، من المؤلم دائمًا انتظار الخطوة التالية. في التنفيذ الحالي ، يمكن أن يصل وقت الانتظار إلى 1.5 دقيقة. في الإصدار التالي من النموذج الأولي ، نخطط لإضافة قارئات علامات RFID ، والتي سوف تنوع طريقة اللعب. على سبيل المثال ، استخدم بطاقات بعلامات RFID التي يمكنك تطبيقها خارج دورك.
صور مصغرة
المنمنمات تحب كل شيء! ونحن لسنا استثناء. لذلك ، بالتوازي مع مجموعة الميكانيكا والبرمجة ، انخرطنا في اختراع المنمنمات الخاصة بنا. أعتقد من الصور أنه من الواضح أن لعبتنا تدور حول القطط الخيالية التي تقاتل في الساحة.
لأن نحن لا نعرف كيف نرسم من الكلمة على الإطلاق ، لجأنا إلى صديقنا الذي بدأ بسرور كبير في رسم "القطط المقاتلة"
أخذت الحيوانات الأليفة كأساس. لذا ، عاشت في منزلها قطة ضخمة وشريرة تسمى "القراصنة" - هو الذي يقع في قلب المحارب المصغر.
بعد أسبوعين ، حصلنا على رسومات أولية.
من المقالات حول إنتاج ألعاب الطاولة ، أدركت أنه في روسيا ، فإن إنشاء المنمنمات أمر سيئ بما فيه الكفاية والعديد من الطلبات في فنلندا أو ألمانيا.
قبل الانخراط في إنتاج المنمنمات ، كنا بحاجة إلى صنع نماذج رئيسية لكل بطل ، وهي كافية تمامًا لنموذج أولي. في البداية أردنا أن نجعلهم من طين البوليمر ، ولكن اتضح أنه من بين أصدقائنا لم يكن هناك مصغرون ، وكان الصنع حسب الطلب مكلفًا للغاية في ذلك الوقت. لذلك ، قررنا أن نطبعها أولاً على طابعة ثلاثية الأبعاد. للقيام بذلك ، جعلنا صديقنا نماذج ثلاثية الأبعاد لأبطالنا الأوائل في Zbrush.
بمساعدة طباعة FDM ، لم يكن من الممكن طباعة أرقام ذات جودة مقبولة ، وهو أمر متوقع تمامًا.
لحسن الحظ ، لدى زوجتي طابعات 3D SLA في العمل.
الطباعة الحجرية المجسمة (SLA) هي تقنية طباعة ثلاثية الأبعاد تسمح لك بتحويل المواد السائلة إلى كائنات صلبة باستخدام مصدر ضوء ، طبقة تلو الأخرى ، باستخدام عملية البلمرة الضوئية. سمك الطبقة أثناء الطباعة باستخدام تقنية SLA أصغر عدة مرات من أثناء الطباعة باستخدام FDM ، وبالتالي ، فإن جودة المنتج النهائي أعلى.
بعد بضعة أيام تم إعطاؤنا أول صورة مصغرة.
جودة هذه المنمنمات أعلى بكثير ، ولكنها لا تزال لا تصل إلى الإنتاج الذي تم الحصول عليه عن طريق صب البلاستيك. اللوم على هذا هو الدعم ، الذي يترك بعد إزالة علامات ملحوظة. من الناحية النظرية ، يمكننا "قطع" الأشكال إلى أجزاء منفصلة وطباعة كل منها على حدة ، دون استخدام الدعامات ، ثم لصقها. لكن الأمر سيستغرق الكثير من الوقت ، وإلى جانب ذلك ، يمكن أن يتغير في المستقبل.
كل شكل يقف على قاعدته الخاصة ، والتي قمنا بطباعتها أيضًا على طابعة ثلاثية الأبعاد. يوجد داخل القاعدة مغناطيس نيوديميوم. تم اختيار حجم وسماكة المغناطيس تجريبيا بحيث يتم جذب الرقم بهدوء إلى المغناطيس الكهربي على عربة المنصة ، لكنه لم يتفاعل مع الأشكال المجاورة.
المجموع
في الوقت الحالي ، نحن منخرطون في تحسين الخصائص المادية للمنصة وموثوقية جميع المكونات. سنستبدل الخشب الرقائقي بالبلاستيك والبولي كربونات ، وسوف نحسن ربط مكونات المنصة ببعضها البعض ونجعل ساحة اللعب قابلة للإزالة بحيث يمكن تغييرها إلى مجال عامل آخر (على سبيل المثال ، سداسي). الخطوة التالية هي إنشاء MVP كامل ، وهو ليس عارًا على الناس.
مع اللعبة أصعب قليلا. بالطبع ، أريد أن أركز تمامًا على تنفيذ النظام الأساسي ، دون الرجوع إلى لعبة معينة. ومع ذلك ، نحن ندرك جيدًا أنه لا يوجد أحد مهتم بمنصة بدون لعبة.
شكرا لكم جميعا على نقدكم / نصيحتكم / اهتمامكم. كانت لدينا فكرة عن إنشاء نسخة دون استخدام الميكانيكا ، ولكن مع القدرة على تحديد موضع ونوع الشكل في الميدان. أعتقد أنه سيتم كتابة المقالة التالية بعد إنشاء
MVP .