مرحبا يا هبر. قصتي تبدأ في يناير 2019.
لقد قررت أنا ومطوري ألعاب Tima تناول أكبر مشروع في تاريخنا ، وهو نظام أساسي ثنائي الأبعاد. لا ، لم نفعل أي FlappyBirds أو الثعابين من قبل ، ولكن كمية العمل في هذا المشروع فجرت أدمغتنا. بادئ ذي بدء ، تركنا الدرج العمودي المعتاد ، وأخذنا السلالم. لقد كتبنا منطق الأبواب ، والذي يمكن إغلاقه "بمفتاح" وثمل الكتل القابلة للتدمير. كان هناك وقت كان من الضروري فيه كتابة الذكاء الاصطناعي. بصفتي أكثر المؤلفين خبرة من فريقنا قليل الخبرة ، سقطت على شرف كتابة منظمة العفو الدولية.
بكيت في الوسادة ، ولا أفهم ماذا أفعل ، كنت فخورة جدًا بأنني أكتب واحدة من أصعب الميكانيكا في مشروعنا.
المرحلة 1: العثور على المسار والتحرك على طول المسار
الخطوة 1.1: العثور على الطريق
نظرًا لأن المواقع الرئيسية لن تكون في الهواء الطلق ، ولكن في المباني ، كان من الضروري البحث عن الطريق بين عشرات الأبواب والسلالم والغرف. بعد التفكير ، قرر قائد الفريق أن الأمر يستحق القيام بمحاكاة معينة من خوارزمية A * ، حيث سيكون لدينا نقاط بين الروبوت الذي سيتم تشغيله. قدمت مشهد اختبار ، وضعت العقد ، من أجل الوضوح ، علقت SprateRenderers عليها. ماذا تفعل بعد ذلك؟
مع وضع هذا السؤال في الاعتبار ، سرت لمدة 3 أيام. حتى الآن ، لم يقترح أحد رفيقي خوارزمية مثيرة للاهتمام عندما يتم تحفيز العقد ، مثل الخلايا العصبية في الدماغ.
هكذا. هناك عقدة A ، بالقرب منها يوجد AI وعقدة B ، والتي يجب أن تأتي AI إليها. أعطى جميع العقد هويتها وسمت العقد المرتبطة التي سوف ترسل إشارة. كل عقدة لها المتغير المنطقي "isChecked" والمتغير "triggeredBy" ، الذي يحتوي على معرف العقدة التي "متحمس لها". لذلك ، عندما تتأثر العقدة B ، ستنتقل عبر السلسلة إلى العقدة A ، للتعرف على جميع معرفات العقد التي مرت الإشارة. لذا حصلت على المسار من معرفات العقد التي يجب أن يمر بها الروبوت. إذا لم تفهم فجأة كيف يعمل هذا ، فعندئذ سأخبرك قصة.
مرة واحدة ، لم يكن لدى إيفان أي شيء ، ولذا قرر تكوين شجرة عائلته. لسوء الحظ ، لم يكن لديه معلومات كافية لترجمة هذه الفكرة إلى واقع. كان إيفان حريصًا على هذه الفكرة لدرجة أنه قرر أنه عندما يصل إلى السلف الرئيسي ، سيكون قادرًا على اكتشاف أقربائه غير المتوقعين. عرف إيفان أين يمكن أن يجتمع مع والده للحديث وذهب إلى هناك. أخبره الأب أن اسم جد إيفان كان إيفان وأخبره أين يمكن العثور عليه. وجد إيفان إيفان ، وقال إن جد إيفان كان يعرف هذا الجد شخصيا ، لكنه توفي منذ فترة طويلة. كرس إيفان نصف حياته لدراسة الفنون المظلمة ، لكنه في النهاية تمكن من إحياء جده الأكبر. قال الجد الأكبر أن جده ذئب بالذئب وأن جثته مدفونة على حافة الصنوبر الثلاثة. ذهب إيفان إلى هناك ووجد رجلاً يحفر قبراً. اتضح أن هذا الرجل هو ابن عم اثنا عشر. فوجئ إيفان بشدة بأنهم وصلوا إلى مكان واحد ، ولكن تبين أن شقيقه كان مبرمجًا وشرح كل شيء.
- مبدأ التنقل من لعبتي المفضلة * الاسم * يعمل هنا!
- وما هذا؟
- من كل وريث ، يمكنك القدوم إلى الوالد المشترك للنظام ، إذا كان كل وريث يعرف الوالد شخصيًا في هذا النظام.
هذه هي النتيجة:

هذا صفيف من متغيرات int التي تعني معرفات العقد التي يجب أن تمر بها الوحدة.
الخطوة 1.2.1: الحركة على طول المسار
لدي قائمة بمعرفات العقدة ، ولدي روبوت. ما التالي؟ ثم ما تحتاجه لتحريك الروبوت في هذا المسار.
حسنًا ، أحسب هذا الخيار: وصلت الروبوت إلى العقدة ، وتم التحقق منها ، ونظرت إلى ما هو التالي ، ثم انتقلت إلى العقدة التالية. هل فعلت. انها ربحت. كنت سعيدا ... لكن ...
المرحلة 1.2.2: السلالم وتفاعلها مع الذكاء الاصطناعى
كما اعتاد بطل أسود وأبيض أن يقول: "السلالم ... عدوي الرئيسي .."
كان من الضروري تحديد ما إذا كانت العقدة التالية أعلى AI ، أدناه أو على المستوى. بناءً على هذه المعلومات ، سيمرر الدرج (يتجاهل التصادم) ، أو يصعد عليه (يتفاعل مع التصادم). أوه ، وقد مات الكثير من الخلايا العصبية في هذه المعركة مع المحرك ... في المنتديات قرأت أنه يمكنك ترتيب كل شيء في طبقات وفي علامة التبويب Edit-> Physics2D يمكنك تكوين تجاهل تصادم طبقة واحدة وأخرى. كل شيء يعمل!
يبقى فقط أن يعلمه أن يفتح الباب. لم تكن هناك مشاكل.
النتيجة:


المرحلة 2: العواطف والعظة
المرحلة 2.1: العواطف
نعم ، قررنا أن نعلق العواطف ... والعظة.
وسيتم تسليط الضوء على العواطف مع تعبيرات الوجه والرسوم المتحركة العمل.
سيتم عرض النسخ المتماثلة بنصوص نصية.
لقد قمت بخداع المشاعر دفعة واحدة ... لهذا ، قمت بالفعل بعمل متغير "العاطفة" ، والذي قام بتخزين معرف العاطفة. وهنا هي النسخ المتماثلة ...
الخطوة 2.2: النسخ المتماثلة
لجمال أدلى جمل فئة منفصلة
[System.Serializable]
قدمت مجموعة من هذه الفئة. علاوة على ذلك ، فقط اعتمادا على العاطفة ، أضع أي عبارة من القائمة. تحديث مرة واحدة كل N ثانية.
لكنني قررت أن أذهب أبعد من ذلك! لكل حرف قمت بعمل ملف بامتداد .phrs ، تم ترميز هذا بإضافة X بايت إلى رقم بايت لكل حرف في الملف. كانت النتيجة غير قابلة للقراءة وغير قابلة للتغيير. فعلت شيئًا مثل ترميزها ، وصنعت خوارزمية تأخذ وترجم كل شيء في هذه المجموعة إلى فئة العبارات بواسطة هذه العلامة.
! ممتاز كل شيء يعمل!
كنت أرغب في كتابة برنامج على شارب نظيف لملء مثل هذا الملف ، ولكن هنا نذهب إلى نهاية القصة.
النهاية ..؟
لقد سئمنا سريعًا من العمل الكبير غير المدفوع الأجر ... لم يساعد ربط برنامج ترميز جديد ... لقد انهار الفريق ... لا يزال الكود موجودًا على سحابة الوحدة.
بالطبع ، منذ وقت ليس ببعيد بدأت فكرة مواصلة المشروع في الظهور ، ولكن مع المزيد من تسييل الأموال ... إذا نجح شيء ما ، فربما سأكتب التاريخ الكامل للتطور. ولكن هذا هو المكان الذي تنتهي فيه قصتي حول البرنامج النصي المبتدئ و AI.