نحن لسنا سيئين ، ولكن هناك العديد من الأخطاء. تطوير الذكاء الاصطناعي للعبة "الهوكي" في حوالي 7 ساعات.
في البداية ، تم تخطيط المقالة حول استراتيجيات المشاركين ، حول ما تمكنوا من فعله في وقت المنافسة وما إذا كانوا راضين عن العمل المنجز ، ولكن بعد إجراء المقابلات مع ثمانية متسابقين في المرحلة النهائية ، أصبح من الواضح أنه لا شيء سيأتي وأنه من الضروري تغيير الاتجاه.
الحقيقة هي أننا تلقينا 6 كلمات بحد أقصى للأسئلة التي تهمنا ، ثم سمعنا على الفور
استياء من الأخطاء التي واجهها المشاركون. كتب شخص واحد فقط:
لا أريد أن أكتب أي شيء سلبي ، وأعتقد أن هذا غير صحيح ، ويجب أن يكون المنظمون أنفسهم حزينين. لذلك ، سأقول إن فكرة المهمة مثيرة للغاية ، على الرغم من أنني شخصياً لا أحب هذا الشكل من المسابقات (Anna Prozorova).
من عنوان المقال ، من الواضح أننا لم نربح شيئًا. ونعم ، نحن "نحن". على مدار أيام المسابقة ، صنعت الكثير من الأصدقاء الجيدين ، بما في ذلك آنا (
رائحة ) ، التي شاركت في تأليف هذا المقال. أيضا في آخر لحظة تحدثنا مع ليو (
zadamantiy )
وبإذنه وصفنا المشاركة في المباراة النهائية.
أنا شخصياً عضو في حركة "عالم خالٍ من الشكاوى" ، لكنني سأعلق سواري من ناحية أخرى وسأشتكي ، وإن كان ذلك في شكل هزلي ، لأنه من ناحية أخرى ،
هذه هي شروط المسابقة وتحتاج إلى أن تكون متخصصًا جيدًا للفوز و التعامل مع العيوب! ليس لدينا أي شكاوى ، على العكس - شكرا جزيلا!
تحت الخفض ، بالإضافة إلى وصف قواعد اللعبة وقواعد المنافسة والأخطاء الموجودة ، سنشارك معك عضاداتنا وما واجهناه شخصيًا وكيف حللنا هذه المشكلة أو تلك ، وكيف استعدنا للمنافسة. ربما في مكان ما تتعرف عليه إذا شاركت في مثل هذه المسابقات.
الغرض من هذه المقالة هو جمع المسابقة الفاشلة من كل من المشاركين والمنظمين ، لتقطيعها على أنفك وعدم التدخل مطلقًا في نفس الوقت. نأمل أن تزيد المقالة من مستوى المسابقة التالية.
مقدمة
بضع كلمات عنا
ايليا
المشارك السنوي لكأس الروسية AI و Mini AI Cup منذ عام 2017. أنا أيضا متابعة Codingame و Halite. ليس لدي أي إنجازات خاصة ، لكنني تعلمت الكثير من الآخرين. بالنسبة لي ، الشيء الرئيسي ليس المشاركة ، وليس النصر ، ولكن إعطاء نسبة 100٪ وأخيراً أقول: "لقد فعلت كل ما بوسعي ، وأدركت كل ما أردت ، طبقت كل شيء أعرفه". أنا لا أعرف لغة برمجة جافا. بالنسبة لي ، هذه ممارسة شائعة بالفعل من المنافسة إلى المنافسة لدراسة مكدس التقنية الجديدة بالكامل.
آنا
طالب بسيط لديه خبرة قليلة في حل المشكلات الخوارزمية ، ولكن دون خبرة كبيرة في المشاركة في الألعاب الأولمبية والمسابقات المماثلة. على وجه التحديد ، في IT-Planet ، قررت المشاركة من أجل اختبار معرفتي وقدراتي واكتساب الخبرة والتواصل مع أشخاص مثيرين للاهتمام. درست لغة برمجة جافا في الجامعة ، لكن لم يكن لديها خبرة عملية معها لفترة طويلة.
الأسد
شارك في جميع أنواع اختيارات ICPC و hackathons مثل "Build University 20.35" و "Digital Breathrough". حسنا ، الأشياء الصغيرة في بعض أولمبياد الجامعة.
وفقًا لذلك ، أرسلت جامعتنا عادةً العديد من المشاركين إلى المسابقة من أجل sql ، لكن هذا العام لم يكن كذلك. عُرض عليّ المشاركة في Java ، وكان عليّ التعامل مع لغة جديدة بنفسي في وقت قصير إلى حد ما بالتوازي مع الجلسة. في It-planet قبل هذا لم يشارك.
وصف المنافسة
الموقف العام
IT-Planet هي مسابقة للطلاب والمهنيين الشباب من مجال تكنولوجيا المعلومات ، والتي تهدف إلى تحديد ودعم اللاعبين القادرين. تقام سنويًا منذ عام 2007. المشاركة فيه فرصة لإثبات نفسه.
يساعد ترشيح "برمجة جافا" في إيجاد تطبيق عملي للمعرفة المكتسبة في عملية التعلم.
كانت المرحلة التأهيلية الأولى غائبة وكانت بمثابة اختبار عبر الإنترنت لطلاب المؤسسات التعليمية المسجلة. كانت الأسئلة معقدة ومثيرة للاهتمام للغاية ، ولكن بصراحة ، تضمنت الأغلبية رمزًا يمكن إعادة قراءته وتشغيله.
المرحلة الثانية ، مثل المرحلة الأولى ، كانت غائبة. إنه يهدف إلى حل مشاكل البرمجة الرياضية. أعطيت يومين لحل 10 مشاكل ، والتي مكّنت من الإعداد الكامل لحل مشكلة معينة ، لدراسة الخوارزمية / النهج. ومع ذلك ، لا أحد تعاملت مع جميع المهام. تغيرت حالة بعض المهام خلال المسابقة. كانت هناك مدارس في الاختبارات.
نهائيات دولية بدوام كامل. كان من الضروري كتابة منظمة العفو الدولية للعبة "هوكي الجليد". ~ أعطيت 7 ساعات. تقريب بسبب عدم وجود "الضوء الاخضر" من البداية وعدم وضوح مع الغداء. كان الوقت مطاطيًا ، ولم يغلق الجمهور ، ولكن كان هناك المزيد حول ذلك أدناه.
مهمة
تم تطوير المهمة من قبل المتخصصين في SimbirSoft LLC. فيما يلي محتويات ملف .pdf (مع الحد الأدنى من المراجعات للمقال) التي تلقاها كل مشارك.
مهمةوصف المهمةفي مكان ما في بلد غامض ، وجميع سكانه روبوتات صغيرة ، كان هناك فريقان للعب الهوكي. لدى كلا الفريقين مدرب آلي خاص بهما ، يراقبان اللعبة باستمرار ويخبران كل اللاعبين أين يجب عليهم الذهاب. سيكون كل شيء على ما يرام ، لكن اللاعبون الآليون لا يفهمون سوى الأفعال البسيطة مثل الذهاب وضرب الصولجان والذهاب إلى النقطة التي حددها المدرب.
يجب أن تصبح مدربًا للفريق الأحمر للاعبين. سيلعب فريق أزرق ضدك ، يتم التحكم فيه بواسطة خوارزمية تهزم بالفعل الفرق الأخرى بنجاح. في الملعب في نفس الوقت يلعب فريقان. يتكون الفريق من 4 لاعبين: مهاجم ومدافعان وحارس مرمى.
مهمتك هي كتابة خوارزمية لإدارة البوتات الحمراء. للتحكم في الشخصيات سيكون لديك 3 طرق ، موضحة أدناه. هناك أيضًا طريقة لتلقي المعلومات حول جميع اللاعبين في الميدان وإحداثيات عفريت.
قيود اللعبةيمكن لحارس المرمى فقط الوصول إلى وسط الملعب من الهدف. يمكن للمدافعين والمهاجمين ركوب جميع أنحاء الميدان ، باستثناء منطقة حارس المرمى (القوس الأحمر بالقرب من الهدف).
وصف هيكل التطبيقيتم تقديم التطبيق كعميل وخادم. سيتم تعبئة الخادم في ملف jar ، وسيتم تشغيله في الخلفية. يحتوي الخادم على كل المنطق الأساسي لحركة الشخصيات والكره ، وتخزين المعلومات حول جميع الشخصيات ، عفريت ، والوقت والنتيجة.
عند بدء تشغيل التطبيق ، ينشئ العميل اتصالًا بالخادم ، ويستقبل البيانات من الخادم بتردد معين. وهو مسؤول أيضًا عن تقديم كل الشخصيات والهدف والكره على ملعب الهوكي.
يجب كتابة جميع تعليمات برمجية البرنامج في فئة Algoritm في مجلد algoritm في تطبيق العميل (لن تتم مراعاة جميع التغييرات في الملفات الأخرى).
الطرق التالية موجودة في هذه الفئة:
- move (playerType ، x ، y) - طريقة لنقل اللاعب إلى نقطة محددة على الخريطة.
- kick (playerType) - طريقة لضرب عفريت من قبل لاعب معين.
- turn (playerType ، زاوية) - طريقة لتحويل مشغل معين.
- getInfo () - احصل على معلومات حول جميع اللاعبين والكرات على الخريطة.
هناك أيضًا مستوى ثابت ثابت ، وهو مسؤول عن مستوى تعقيد الخوارزمية. ستكون المستويات التالية متاحة للمشاركين في الأولمبياد:
- الفريق الأزرق يقف ؛
- الفريق الأزرق يسير بشكل عشوائي في جميع أنحاء الميدان ؛
- يلعب الفريق الأزرق وفقًا لـ "الخوارزمية الضعيفة" ؛
- يلعب الفريق الأزرق وفقًا لخوارزمية متقدمة (للاختبار الداخلي).
جميع الطرق التي تقبل playerType تعمل فقط مع لاعبي الفريق الأحمر.
المتغير playerType هو مثيل لفئة PlayerType ، ويحتوي على
قيم مثل حارس المرمى ، المدافع 1 ، المدافع 2 ، المهاجم.
في فئة Playground ، تتم كتابة القيم الثابتة للعبة (على سبيل المثال ، خط الوسط ، منطقة حارس المرمى ، إلخ).
الأسلوب getInfo () بإرجاع كائن من فئة GameInfo.
التحسينات- إذا قمت بإرسال طريقة النقل عدة مرات ، فستتغير نقطة النهاية التي يجب أن يصل إليها الحرف (لذلك ، إذا كنت بحاجة إلى الوصول إلى نقطة النهاية ، فيجب عليك الانتظار حتى يصلها الحرف قبل إرسالها إلى نقطة أخرى).
- لا يمكن استخدام طريقة الركلة إلا للاعب الذي يمتلك لعبة الصولجان.
- تأخذ طريقة المنعطف زاوية ، بينما بالنسبة للجانب السفلي من الحقل ، تأخذ الزاوية قيمًا من 0 (تبدو باتجاه هدف العدو) إلى 180 (تنظر نحو هدفها الخاص) ، وبالنسبة للدائرة شبه العليا ، تأخذ الزاوية قيمًا من 0 إلى -180.

معايير التقييم
مأخوذة أيضًا من ملف .pdf. سيتم استخدام رمز فقط من فئة Algoritm. سيتم تشغيل خوارزمية كل مشارك مقابل كل مستويات الصعوبة بدورها. وفقًا لنتائج الجري ، سيتم تعيين نقاط لنتائج المباراة ، وسيتم أيضًا منح نقاط للفرص المنفذة في الخوارزمية.
قائمة المعايير- يجب تنفيذ الهجمات على الهدف من زوايا مختلفة. على سبيل المثال: مباشرة أمام اللاعب ، حارس مرمى العدو - يجب تنفيذ الهجوم على المرمى بزاوية.
- يمرر اللاعب الكرة إلى لاعب هوكي مجاني لتنفيذ هجوم على المرمى.
- يجب إعطاء التمرير فقط في تلك الحالات التي يتعذر فيها على اللاعب تنفيذ الهجوم بنفسه (يتم إغلاق جميع الزوايا لمهاجمة الهدف).
- يجب أن تُمنح بطاقة المرور فقط للاعب الذي لديه حرية المرور. لاعبي الهوكي الذين لديهم هدف مفتوح للهجوم هم الأولوية.
- إذا كان الهجوم مستحيلًا ، فيجب على الفريق التراجع وإعادة التجمع.
- إضافات. نقاط إذا غادروا عن طريق التحويلات.
- إضافات. يشير إذا كنت تستخدم حارس المرمى لإعادة التجميع.
- في الدفاع ، يجب حظر القدرة على المرور إلى لاعب آخر من الخصم.
- يلتزم فريق اللاعب بالإستراتيجيات. على سبيل المثال: دائمًا ما يحتفظ مدافع واحد دائمًا بعيدًا ، في حالة حدوث هجوم مضاد للعدو.
- تأخذ الخوارزمية في الاعتبار لوحة النتائج. على سبيل المثال: يلعب بقوة أكبر في حالة الخسارة والعكس بالعكس أكثر حذراً في المواقف الرابحة ؛ مع التعادل يزيد من العدوان في نهاية المباراة.
سيتم منح نقاط الجزاء لـ:
- اللاعب يسجل الأهداف في هدفه.
- لاعبي الهوكي يعوقون بعضهم البعض. (لا تدع كل منهما يمر).
- حجب اللعبة عن قصد. على سبيل المثال: ادفع كرة الصولجان ضد لعبة الصولجان حتى نهاية اللعبة.
الجسم الرئيسي
التحضير للمسابقة
ايليا
في البداية ، كتبوا أنه في النهاية سيكون هناك "التنمية الصناعية". كنت أتوقع العمل العادي مع القاعدة ، وتطوير واجهة المستخدم الرسومية. تطبيق للمحاسبة شيء ، على سبيل المثال. مع الحزن إلى النصف ، وافقت على النهائي ، لأنني لم أكن سعيدًا بما يجب علي فعله. ومع ذلك ، في 17 أيلول (سبتمبر) ، تصل رسالة تحتوي على قواعد عقد النهائيات ، ويتم الإبلاغ عن ما يلي: "هناك لعبة كمبيوتر ثنائية الأبعاد" لعبة هوكي "حيث تلعب روبوتات الكمبيوتر وفقًا لبعض الخوارزميات. من الضروري تنفيذ خوارزمية في لغة برمجة Java والتي بموجبها ستعمل شخصيات المشاركين "(تمت كتابة المهمة على الموقع أنه يمكن تغيير المهمة). تذكرت على الفور بطولة كأس العالم 2014 الروسية في رأسي. لقد سررت وأدركت أنه لم يكن هباءً أنني وافقت على المشاركة.
أول شيء ذهبت إليه هو قراءة
مقال الفائز . بشكل عام ، تذكرت ما كان هناك ، لكن لم تكن كل اللحظات واضحة. ثم ذهبت إلى
موقع المسابقة وقرأت القواعد. توقفت عند هذا ، لأن أي تعديل للقواعد يمكن أن يغير اللعبة بالكامل. لم أكن أعرف عدد الفيزيائيين الذين سيشاركون في لعبتهم ، ولم أكن أعرف كيف اختارهم لكمة أو عفريت ، إلخ. يمكن تبسيط اللعبة إلى حد كبير ، حتى أنه لن تكون هناك حاجة إلى الزوايا. لذلك بدأت الانتظار ...
انتظر وانتظر! بعد ظهر يوم 27 سبتمبر يأتي خطاب حول الندوة! 28 سبتمبر في الساعة 19:00. كان يوم ووقت مثاليين بالنسبة لي. ومع ذلك ... ومع ذلك ، قبل 4 ساعات من إطلاق المقرر ، وصلت رسالة أخرى مع نقل إلى 17:00! جاءت رسالة النقل قبل ساعة واحدة من البداية ... طرت بأفضل طريقة ممكنة وتأخرت لمدة 15 دقيقة تقريبًا (لم أتوقع أن يظل برنامج Flash Player مثبتًا حتى الآن).
في الندوة عبر الإنترنت ، طرح أسئلة وحصل على صورة عامة عن اللعبة. كان هناك ما يكفي من البيانات ، حتى لكتابة بلدي وإعداد شامل. ومع ذلك ، حتى آخر مرة لم يكن من الواضح كيفية حدوث الضربة ، لم يكشف المطورين عن بعض النقاط ، وفي بعض الأماكن لم يقرروا بعد أن ينتهيوا.
بعد كتابتي الأكثر قيمة ، ذهبت للتحدث مع الأعضاء النشطين المألوفين في RAIC. مرحبا وشكرا
m0rtido ،
DragoonXen ،
oreshn1k . بعد أن أوجزنا الموقف ، أصبح من الواضح أنه من الضروري وضع رمز ثابت إذا لم يكن بالإمكان التحدث عن أي محاكاة للعالم خلال مثل هذا الوقت. شارك
oreshn1k كتاب التفجير "Programming Game AI by Example" ، الذي تحدث الفصل الرابع منه عن تصميم AI لكرة القدم. أعجبتني بالكتاب لدرجة أنني قررت أن أرسم بنفسي الإستراتيجية الكاملة التي كنت سأكتبها في المسابقة ، وقد نسيت تمامًا الحد الزمني. ما كنت سأكتبه لم يكن مناسبًا لهذه المسابقة ...
تحضيري غير المجدي متوفر في
quire (بدقة ، هناك بالفعل 168 مهمة. في بعض الأماكن مع وصف). غير مجدية لهذه المنافسة ، ولكن بشكل عام هو منهجية ممتازة للمعرفة المكتسبة من الكتاب. فكرت هناك في محاكاة لعبة الصولجان لمعرفة موقعها بعد فترة من الوقت ، وإيجاد الزاوية المناسبة للتسديد على المرمى ، ومنطق نقل الصولجان بين اللاعبين ومجموعة من الأشياء المثيرة للاهتمام.
لقد سبق أن كتبت أعلاه أنه بدون أدنى فكرة عن كيفية الكتابة بلغة جافا ، وبالتالي ، بالإضافة إلى الاستراتيجية ، بدأت في دراسة بناء جملة اللغة. وقد ساعد ذلك في موقع ممتاز ، كنت أستخدمه لأكثر من مرة -
تعلم X في دقائق Y. بعد أن دخلت IntelliJ IDEA ، أدركت أن الكتابة عليه هي بالضبط نفس الكتابة على C #.
مع هذا التحضير ، ذهبت إلى موسكو.
آنا
عندما علمت بموضوع النهاية ، أول شيء قررت أن أكرره هو geoma. ولكي يكون كل هذا ممتعًا ، سأفعل كل شيء باستخدام
المعالجة : نظرت إلى أمثلة من المطورين ذوي الصلة بالحركة ، وحساب الزوايا والسرعة والتسارع ، ثم مارست على رسوماتي الصغيرة.
قررت عدم إضاعة الوقت في تحديث بعض التفاصيل الدقيقة لجافا ، لأن المهمة ، كما بدا لي ، اقترحت مهارات في كتابة الاستراتيجيات وبعض المعرفة بالرياضيات. لذلك قررت أن أقرأ
مقال فائز RAIC 2014 . كانت المقالة مثيرة للاهتمام ، ولكنها ليست مفيدة بشكل خاص لهذه المسابقة ، لأن الفيزياء قد تختلف جذريًا ، وسيتم تخصيص وقت أقل بكثير.
كان الندوة عبر الإنترنت من المطورين مثيرة للاهتمام ومفيدة ، وقدم صورة شاملة للعبة. لكن لسوء الحظ ، لم أتمكن من مشاهدته تمامًا ، لأن البث تم إجراؤه باستخدام Flash وقرر حاسوبي المحمول في تلك اللحظة بالذات اللعب مع شاشة الموت الزرقاء.
نتيجة لذلك ، قبل المباراة النهائية ، لم تكن لدي أي استراتيجية مسبقة: كان من الصعب التخطيط لشيء ما عندما لم يتم الكشف عن تفاصيل فيزياء اللعبة. كانت هناك أفكار حول ما يستحق الاهتمام أولاً وقبل كل شيء ، ما هي الأساليب المساعدة للكتابة على الفور ، ولكن ليس أكثر. قررت أن الشيء الرئيسي قبل النهاية هو الاسترخاء والحصول على قسط كاف من النوم والوصول إلى هناك في مزاج جيد.
الأسد
[معد] حوالي 16-20 ساعة. تبعا لذلك ، فكرت في الهندسة ، والتي ، للأسف ، لست على خلاف كبير. الصيغ أعدت والحسابات مقدما ، اختبار كل شيء. أنا أقدر المجال الذي يمكنك من خلاله التسجيل وفقًا للشروط التي حددها المنظمون في الندوة عبر الويب ، ثم كتبت محاكيًا لبعض الإجراءات وحصلت على شكل المنطقة عند محاكاة لقطات مباشرة من نقاط مختلفة واستراتيجية حارس المرمى المثلى. نتيجة لذلك ، لم يكن أي شيء تقريبًا في متناول يدي واضطررت إلى كتابة عكازات على عكازين.

توزيع الوقت
ايليا
كنت أواجه دائمًا مشكلات في توزيع الوقت في المسابقات وأولمبياد. صعدت على أشعل النار للمرة الثالثة. بعد أول قال إنه لن يسمح بذلك. مرة أخرى ، جلس في مهمة واحدة ، لفترة طويلة لم ينتقل إلى مهمة أخرى.
أنفق الكثير من الوقت ، الجزء الأول بأكمله من المسابقة قبل الغداء ، على تنفيذ جميع أنواع الأغلفة للاعبي الفريق ، ودروس الدولة ، والرسائل بينهم ، والأدوار الداخلية. بشكل عام ، قمت بالمهام التي قمت بتشكيلها قبل المسابقة ، وأنسى تمامًا مشورة المشاركين ذوي الخبرة فيما يتعلق بالإفصاح عن الأقراص الصلبة والأساليب المساعدة. لقد كتب ببساطة دون التفكير في الوقت.
جئت إلى روحي في العشاء. لقد فهمت أن نصف المسابقة قد انتهى ولدي عمل لمدة 10 ساعات أخرى حتى يبدأ شيء على الأقل في الحركة. تقرر ترك كل ما هو وبدء من البداية. كانت هذه الساعات الأخيرة الرائعة من المسابقة ، عندما توقفت عن الشعور بالحزن والضحك من سلوك روبوتاتي. بدأت بسرعة كبيرة للتبديل من مهمة إلى أخرى. إنه لا يذهب إلى هناك - لقد تحول إلى آخر ، ثم عاد. كانت هناك رغبة واحدة فقط - للتسجيل على الأقل بطريقة أو بأخرى على الأقل. لذلك ، تم نسيانها تمامًا بشأن نظافة الكود و OOP ، وتركت تعليقات مثيرة للاهتمام في بعض الأماكن.
آنا
في البداية ، قررت أن أعرف كيف تعمل الطرق الأساسية في اللعبة بشكل عام: حركة لاعبي الهوكي ، التقاط عفريت ، الدوران والتمريرات. قضيت حوالي ساعة في هذا. لقد درست أيضًا البيانات والطرق التي استخدمها لاعبو الهوكي والكرات. ثم قررت أنه سيكون من الجيد معرفة كيفية العثور على الزاوية بين كائنين (على وجه الخصوص ، بين لاعب الهوكي وعبة عفريت). واجهت صعوبات كبيرة في هذا: في البداية ، اكتشفت طريقة Math.atan2 لفترة طويلة ، ثم حاولت تحويل البيانات المستلمة إلى نظام من زوايا المطورين. مع كل هذا ، كنت معذبة قبل العشاء وكنت مستاء للغاية لأنني أمضيت الكثير من الوقت في مهمة صغيرة واحدة ، على الرغم من أنه في نفس الوقت يمكنني أن أكتب استراتيجية للمستوى الأول على الأقل.
بعد الغداء ، قررت تخصيص وقت أكثر عقلانية. الانتهاء بسرعة من الطريقة مع تحديد الزاوية ، ثم كتب استراتيجية للمستوى الأول. ثم انتقلت بسلاسة إلى استراتيجية المستوى الثاني ، والتي تقدمت بها في النهاية للمستوى الثالث. في الواقع ، هذا والتشبث بالطريقة التي يتصرف بها لاعبي الهوكي بطريقة غريبة ، فعلت حتى نهاية المباراة النهائية. لقد تبين أن هذا الرمز فظيع وغير قابل للقراءة ، مع مجموعة من المعالجات العاجلة ولصق النسخ ، لكنه تعامل مع مهمته بشكل أو بآخر: سجل لاعبو الهوكي أهدافًا.
الأسد
(7 , ), , 1-2 . , 3- 0-2 6-0. , . , , , - - , , , , .
معظم الوقت الذي استغرقه الأمر لمعرفة كيف وما كان يعمل في المشروع كان غاضبًا بشكل خاص بسبب عدم العمل .equals () وحقلين .TypeOfPlayer و .PlayerType ، مما أدى إلى ظهور أشياء مختلفة تمامًا. حسنًا ، هناك بعض السلوكيات الغريبة للاعبين التي لم يستطع المنظمون شرحها حقًا (ونحن لا نعرف لماذا تتجول شخصيتك هنا مع ظهره للفريق المعطى فقط ، والمنعطفات المذكورة سابقًا :)). ثم ، في مرحلة ما ، اتضح أن هناك ثوابت في المشروع بالنسبة لأحجام كائنات اللعبة المختلفة ومواقفها ، والتي ، على ما يبدو ، كان ينبغي أن تكون في المادة المرجعية في البداية ، ولكن لا ، في النهاية ، لقد استغرق الأمر وقتًا لحسابها باليد.عضادات لدينا
ايليا
آنا
- مثل Ilya ، في البداية ، لم أتمكن من تخصيص وقتي بشكل صحيح: لقد قضيت الكثير من الوقت في مهمة واحدة صغيرة ، وإن كانت مفيدة ، لكن كان عليّ تعليم لاعبي الهوكي تسجيل الأهداف.
- لقد قتلت الكثير من الوقت لأنها نسيت توقيع Math.atan2 الطريقة: أولاً تأتي y ، ثم x. فعلت العكس.
- عند كتابة طريقة تحدد ما إذا كان هناك أي لاعبين لهوكي العدو على امتداد معين من المسار ، ارتكبت بعض الأخطاء ، بسبب رفض لاعبي الهوكي أحيانًا الانتقال إلى أي مكان.
- على العموم ، لم تؤخذ المنافسة على محمل الجد. يمكن للمرء الاستعداد بشكل أكثر شمولية ويكون أكثر اجتهادًا وتيقظًا في النهاية.
الأسد
- تكررت أول ساعتين في السجلات بشكل عشوائي في كلتا الحالتين بأمر الحلفاء ، بدلاً من المرة الثانية في أمر برامج الروبوت.
منظم المياه الضحلة
- القليل من البيانات لكتابة استراتيجيات قوية مريحة. كل ما قدم لنا هو أربع طرق للسيطرة على اللاعبين وتحديد مواقعهم على أرض الملعب. نعم ، كان عفريت أيضا صاحبها. من الثوابت ، مركز الميدان ، كان الوصول إلى مناطق حارس المرمى والهدف. شكرًا لك على هذا ، ولكن يبدو لنا أن قائمة القيم التالية كانت ضرورية ببساطة. نحن فقط سحقهم!
- سرعة اللاعبين (كان لكل دور سرعته الخاصة) ، كرات الصولجان ؛
- معلومات حول إبطاء عفريت.
- انطلاق وظائف اللاعبين ؛
- أحجام اللاعبين ، كرات الصولجان ؛
- في الندوة عبر الإنترنت ، قال المطورون بوضوح أنه لن تكون هناك طريقة للحصول على الكود المصدري للخادم. حول بعض الرازم ، قيل أن. exe سوف ينزلق. كلمة "التعتيم" لم تومض ، لكنها ألمحت. في الواقع ، حصلنا على .jar ، والذي يقوم بفك الشفرة في بضع ثوانٍ وليس فقط الثوابت والمنطق مع فيزياء اللعبة التي افتقر المشاركون إلى توفرها ، ولكن أيضًا شفرة المصدر الخاصة بهم لبوت المستوى الثالث الذي يلعب ضدنا. لسوء الحظ ، لاحظت ذلك بنفسي لدى وصولي إلى المنزل ، وسمعت عن إزالة الشعر بعد المسابقة من المشاركين. قالوا كيف استخدمها شخص ما في النهاية. إذا كان هذا صحيحًا ، فهذا غير سارٍ للغاية. في مثل هذه اللحظات ، تبدأ في الأسف لأن الحق هو كل شيء.
لكن في هذه الحالة ، ليست صادقة جدًا (Alexander Polishchuk boba-alex ).
حسنًا ، لقد قاموا باستخدامها جيدًا ، نظرًا لعدم وجود حظر في القواعد ، لكنهم قرروا عدم المرور عبر obfuscator ، لذلك كان جزءًا من الأولمبياد (Maxim Pyankov maxzxwd ).

- يمكن أن يختفي لاعبو الهوكي في وقت عشوائي من الملعب ولا يظهرون حتى نهاية اللعبة. يمكنك دفع اللاعب إلى منطقة حارس المرمى.
- عند استدعاء طريقة move () ، كان بإمكان لاعب الهوكي أن يتحول في الاتجاه الخاطئ. بسبب هذا ، يمكن أن يكون شيء مثل "التمشي على سطح القمر".
- تنقل طريقة turn () اللاعبين بشكل أبطأ من طريقة move () إلى نقطة معينة (هناك انعطاف تلقائي في الاتجاه الصحيح). يحدث هذا ، كقاعدة عامة ، في تعارض مع لاعب آخر للهوكي. مقارنة طريقتين:
- زاوية الانعكاس ضعيفة. سرعة هائلة بعد كذاب قبالة الجانبين (فيديو تباطأ 4 مرات). غسالات لا تحتاج ، على الرغم من أنها كانت في الهدف.
للمقارنة ، مثال على التمرير بزاوية صحيحة ، يكون فيه كل شيء جيدًا بالسرعة ، وهناك تباطؤ.
- وقفت المهاجم من فريق العدو أقرب إلى وسط الميدان واعترض على الفور عفريت في بداية الجولة (عفريت ليس في وسط نسيج الحقل أمر طبيعي أيضا).

- إن القيد "لا يستطيع حارس المرمى الوصول إلى وسط الملعب إلا من الهدف" ينطبق فقط على فريقنا ، ولا توجد قاعدة من هذا القبيل للأعداء.
- لكي يتمكن لاعبي الهوكي من القيام بأي إجراءات ، يجب أولاً تطبيق طريقة move () على أي منهم ؛
- ترك المنظمون في رمز الإستراتيجية مهلة ، مما أثر على تكرار تلقي البيانات الجديدة. إذا قمت ببساطة بحذف هذا الرمز ، فسيتجمد كل شيء. لم يفهم الكثيرون الغرض منه ، ولم يرد أي تفسير من المنظمين. في القواعد ، أيضًا ، لم يظهر هذا الجزء من الشفرة. جلس الكثيرون في هذا البركة.
- واجه عدد كبير من المشاركين مشاكل في بناء وتغيير مستوى الاستراتيجية (كما اتضح فيما بعد ، لم يكن الكثير من الناس يعرفون كيفية التعامل مع maven'om).
- في ندوة الويب ، قال المنظمون إن Java ستستخدم الإصدار 8 ، ولكن في النهاية ، احتاج المشروع إلى Java 11 كحد أدنى.
- أنا: بعد أن جلست على جهاز كمبيوتر يعمل ، كانت هناك مشاكل في الإنشاء بسبب وجود مسافات إضافية في التعليمات البرمجية التي حطمت اسم المتغير. ليست حرجة ، ولكن ليست لطيفة جدا.
- في بعض أجهزة الكمبيوتر ، في البداية لم تكن هناك ملفات مهمة أو الإنترنت ، وتم تحميل التبعيات لفترة طويلة.
- كان هناك عدد أكبر من المشاركين مما كان متوقعا. لقد حدث ذلك بسبب نوع من الإضافات. لذلك ، كان لدى شخص ما - 13 عامًا عقبات أثناء البحث عن أجهزة الكمبيوتر (قام البعض بإخراج أجهزة الكمبيوتر المحمولة الخاصة بهم) وبدأ المشروع من البداية.
- الغداء لم يكن ينظم بدقة. لم يعطوا وقتًا معينًا لتناول وجبة ، ولم يغلقوا الجمهور. الناس يتضورون جوعا حصلت على ساعة إضافية للبيع.
- أعلاه ، في وصف المسابقة ، هناك عنوان فرعي مع معايير التقييم. مشكلتهم هي ما تقوله عن النقاط ، لكنها ليست مكتوبة كم ولماذا. نتيجة لذلك ، حصلنا على غموض ونقص عام في فهم ما يجب القيام به من أجل الفوز.
قد يكون من الصعب مقارنة المشاركين في المستوى القريب ، نظرًا لعدم وجود تعيينات واضحة لنقاط الميزات ، كانت هناك قائمة فقط. يمكن للمشاركين تنفيذ ميزات مختلفة ، ولكن من الضروري إجراء مقارنة (رومانية) بطريقة أو بأخرى.
استنتاج
استنتاج
بشكل عام ، إذا توقفت عن أخذ النهائي على محمل الجد ، فقد كان ممتعًا وممتعًا ولزجًا للغاية. نعم ، اضطررت لقضاء بعض الوقت في عدم كتابة استراتيجية ، ولكن للتعامل مع أخطاء المطورين. ولكن عندما تتكيف وتبدأ باللعب وفقًا لقواعدها ، فإنك تبدأ في الحصول على بعض المتعة من هذه العملية. بالطبع ، أود للمطورين أن يتبعوا نهجًا أكثر مسؤولية تجاه هذه المهمة وإنهاء الأمر دون تزويد المشاركين النهائيين بالمواد الخام وغير المكتملة.
تجدر الإشارة أيضًا إلى أن الفائزين في هذه النهائيات هم زملاء رائعون: في مثل هذه الظروف الصعبة وغير المتوقعة ، تمكنوا من التجمع ، وتحديد كل شيء وإصدار حل عالي الجودة. احترام هؤلاء الأولاد.
شكر
بادئ ذي بدء ، أود أن أشكر المشاركين الذين ساعدوا في كتابة المقال ووافقوا على الإجابة على أسئلتنا. لسوء الحظ ، بسبب تغيير الاتجاه ، لم يكن الكثير من المواد ضروريًا.
بفضل آنا (
odrus ) ، ليو (
zadamantiy ) ، الكسندر (
boba-alex ) ، مكسيم (
maxzxwd ) ، إيفان ، رومان ، آنا ، دونات ، ألكساندر.
أود أيضًا أن أشكر منظمي مسابقة IT-Planet نفسها ، ومنظمي مسابقة جافا SimbirSoft البرمجية النهائية ، وخاصة المطور Edward ، الذي كان حاضرًا في المباراة النهائية وساعد المشاركين في بناء المشكلات ، يمكنه توضيح اللحظات غير الواضحة في منطق اللعبة.
شكرًا لحقيقة أن المنافسة لم تقفز مطلقًا ، كما فعل مع sisharp (Alexander).
كانت فكرة النهاية جيدة ، وجولات التصفيات أيضًا (إيفان).
PS
أثناء كتابة مقال ، وصلت صور من المسابقة والبروتوكولات ، مما يعني أنه يمكننا الآن الإعلان عن أماكننا!
صعد ايليا أكثر من 28 إلى 32 من 33
آنا - 16
ليو - 14
شكرا لقراءتك هنا!