Wir sind nicht schlecht, aber es gibt viele Fehler. Entwicklung der künstlichen Intelligenz für das Spiel „Hockey“ in ~ 7 Stunden.
Ursprünglich war der Artikel über die Strategien der Teilnehmer geplant, darüber, was sie in der Wettbewerbszeit geschafft haben und ob sie mit der geleisteten Arbeit zufrieden waren. Nachdem sie acht Finalisten interviewt hatten, wurde klar, dass nichts daraus werden würde und dass es dringend notwendig war, die Richtung zu ändern.
Tatsache ist, dass wir maximal 6 Wörter für die Fragen erhalten haben, die uns interessieren, und dann sofort
Unzufriedenheit über die Fehler gehört haben , auf die die Teilnehmer gestoßen sind. Nur eine Person schrieb:
Ich möchte nichts Negatives schreiben, ich denke das ist falsch und die Organisatoren selbst sollten traurig sein. Daher werde ich sagen, dass die Idee des Auftrags sehr interessant ist, obwohl ich persönlich dieses Format von Wettbewerben nicht wirklich mag (Anna Prozorova).
Aus dem Titel des Artikels geht hervor, dass wir nichts gewonnen haben. Und ja, es ist "wir". In den Tagen des Wettbewerbs habe ich viele gute Freunde gefunden, darunter Anna (
odrus ), die Mitautorin dieses Artikels. Auch im letzten Moment haben wir mit Leo (
zadamantiy ) gesprochen und mit seiner Erlaubnis die Teilnahme am Finale beschrieben.
Persönlich bin ich Mitglied der Bewegung „A Complaint Free World“, aber ich werde mein Armband aufhängen und mich beschweren, wenn auch in Comic-Form, denn andererseits sind
dies die Bedingungen des Wettbewerbs und Sie müssen ein guter Spezialist sein, um zu gewinnen und mit den Mängeln fertig werden! Wir haben im Gegenteil keine Beschwerden - vielen Dank!
Unter dem Schnitt werden wir nicht nur die Spielregeln, die Regeln des Wettbewerbs und die gefundenen Fehler beschreiben, sondern Ihnen auch unsere Pfosten mitteilen, was wir persönlich erlebt haben und wie wir dieses oder jenes Problem gelöst haben, wie wir uns auf den Wettbewerb vorbereitet haben. Vielleicht erkennen Sie sich irgendwo, wenn Sie an solchen Wettbewerben teilgenommen haben.
Der Zweck des Artikels ist es, die Wettbewerbsfehler sowohl der Teilnehmer als auch der Organisatoren zu sammeln, sie auf die Nase zu hacken und nie wieder auf denselben Rechen zu treten. Wir hoffen, dass der Artikel das Niveau des nächsten Wettbewerbs erhöht.
Einleitung
Ein paar Worte über uns
Ilya
Der jährliche Teilnehmer des Russian AI Cup und des Mini AI Cup seit 2017. Ich folge auch Codingame und Halite. Ich habe keine besonderen Erfolge, aber ich habe viel von anderen gelernt. Für mich ist die Hauptsache nicht Teilnahme, nicht Sieg, sondern 100% zu geben und schließlich zu sagen: „Ich habe alles getan, was ich konnte, alles realisiert, was ich wollte, alles angewendet, was ich wusste.“ Ich kenne die Programmiersprache Java nicht. Für mich ist dies bereits eine gängige Praxis von Wettbewerb zu Wettbewerb, um den neuen Technologie-Stack vollständig zu studieren.
Anna
Ein einfacher Schüler mit wenig Erfahrung in der Lösung algorithmischer Probleme, aber ohne viel Erfahrung in der Teilnahme an Olympiaden und ähnlichen Wettbewerben. Insbesondere im IT-Planet habe ich mich für eine Teilnahme entschieden, um mein Wissen und meine Fähigkeiten zu testen, Erfahrungen zu sammeln und mit interessanten Menschen zu kommunizieren. Sie studierte die Programmiersprache Java an der Universität, hatte aber lange keine praktische Erfahrung damit.
Löwe
Er nahm an allen Arten von ICPC-Auswahlen teil, an Hackathons wie „Build University 20.35“ und „Digital Breakthrough“. Nun, die kleinen Dinge in einigen Universitätsolympiaden.
Dementsprechend schickte unsere Universität normalerweise viele Teilnehmer zum Wettbewerb für SQL, aber dieses Jahr war es nicht. Mir wurde angeboten, an Java teilzunehmen, ich musste mich in relativ kurzer Zeit parallel zur Sitzung mit einer neuen Sprache befassen. In It-Planet zuvor hat dies nicht teilgenommen.
Wettbewerbsbeschreibung
Allgemeine Position
IT-Planet ist ein Wettbewerb für Studenten und junge Berufstätige aus dem IT-Bereich, dessen Ziel es ist, fähige Leute zu identifizieren und zu unterstützen. Findet seit 2007 jährlich statt. Die Teilnahme daran ist eine Chance, sich zu beweisen.
Die Nominierung „Java Programming“ hilft dabei, das im Lernprozess gewonnene Wissen in die Praxis umzusetzen.
Die erste Qualifikationsphase fand in Abwesenheit statt und war ein Online-Test für Studenten registrierter Bildungseinrichtungen. Die Fragen waren ziemlich kompliziert und interessant, aber um ehrlich zu sein, enthielt die Mehrheit Code, der erneut gelesen und ausgeführt werden konnte.
Die zweite Qualifikationsphase war wie die erste in Abwesenheit. Es zielt darauf ab, Probleme mit der Sportprogrammierung zu lösen. Es wurden zwei Tage zur Verfügung gestellt, um 10 Probleme zu lösen, die es ermöglichten, sich gründlich auf die Lösung eines bestimmten Problems vorzubereiten und den Algorithmus / Ansatz zu untersuchen. Allerdings hat niemand alle Aufgaben gemeistert. Der Zustand einiger Aufgaben hat sich während des Wettbewerbs geändert. Es gab Schulen in den Tests.
Internationale Vollzeit-Endrunde. Für das Spiel „Eishockey“ musste eine KI geschrieben werden. ~ 7 Stunden wurden gegeben. Annäherung aufgrund des Mangels an Startfreigabe und Unverständlichkeit beim Mittagessen. Die Zeit war Gummi und das Publikum schloss nicht, aber mehr dazu weiter unten.
Aufgabe
Die Aufgabe wurde von den Spezialisten von SimbirSoft LLC entwickelt. Unten finden Sie den Inhalt der PDF-Datei (mit minimalen Überarbeitungen für den Artikel), die jeder Teilnehmer erhalten hat.
AufgabeAufgabenbeschreibungIrgendwo in einem mysteriösen Land, dessen Bewohner alle kleine Roboter sind, gab es zwei Teams, die Hockey spielten. Beide Teams haben ihren eigenen Robotertrainer, der das Spiel ständig überwacht und allen Spielern sagt, wohin sie gehen müssen. Alles wäre in Ordnung, aber Roboterspieler verstehen nur so einfache Aktionen wie das Gehen, das Schlagen des Pucks und das Erreichen des vom Trainer festgelegten Punktes.
Sie müssen Trainer für die rote Mannschaft werden. Ein blaues Team spielt gegen Sie, das von einem Algorithmus gesteuert wird, der bereits andere Teams erfolgreich besiegt. Auf dem Spielfeld spielen gleichzeitig 2 Mannschaften. Das Team besteht aus 4 Spielern: Stürmer, 2 Verteidiger und Torhüter.
Ihre Aufgabe ist es, einen Algorithmus zum Verwalten von Red Bots zu schreiben. Um die Zeichen zu steuern, haben Sie 3 Methoden, die unten beschrieben werden. Es gibt auch eine Methode, die Informationen über alle Spieler auf dem Spielfeld und die Puckkoordinaten erhält.
SpielbeschränkungenDer Torhüter kann vom Tor aus nur die Feldmitte erreichen. Verteidiger und Angreifer können mit Ausnahme des Torhüterbereichs (roter Halbkreis in der Nähe des Tores) über das gesamte Feld fahren.
Beschreibung der AnwendungsstrukturDie Anwendung wird als Client und Server dargestellt. Der Server wird in eine JAR-Datei gepackt und im Hintergrund gestartet. Der Server enthält die gesamte Grundlogik der Bewegung von Charakteren und des Pucks und speichert Informationen über alle Charaktere, den Puck, die Zeit und die Punktzahl.
Wenn die Anwendung gestartet wird, stellt der Client eine Verbindung zum Server her und empfängt mit einer bestimmten Häufigkeit Daten vom Server. Er ist auch dafür verantwortlich, alle Charaktere, das Tor und den Puck auf dem Hockeyfeld zu rendern.
Der gesamte Programmcode muss in der Algoritm-Klasse im Ordner algoritm in der Clientanwendung geschrieben sein (alle Änderungen in anderen Dateien werden nicht berücksichtigt).
Die folgenden Methoden sind in dieser Klasse vorhanden:
- move (playerType, x, y) - Eine Methode zum Verschieben eines Spielers an einen bestimmten Punkt auf der Karte.
- kick (playerType) - Methode zum Schlagen des Pucks durch einen bestimmten Spieler.
- turn (playerType, angle) - Eine Methode zum Drehen eines bestimmten Spielers.
- getInfo () - Erhält Informationen zu allen Spielern und Pucks auf der Karte.
Es gibt auch eine statische Variablenebene, die für die Komplexität des Algorithmus verantwortlich ist. Den Teilnehmern der Olympiade stehen folgende Level zur Verfügung:
- das blaue Team steht;
- Das blaue Team geht zufällig über das Feld.
- Das blaue Team spielt nach dem „schwachen Algorithmus“.
- Das blaue Team spielt nach einem fortgeschrittenen Algorithmus (für interne Tests).
Alle Methoden, die playerType akzeptieren, funktionieren nur für rote Teamplayer.
Die Variable playerType ist eine Instanz der PlayerType-Klasse und enthält
Werte wie Torhüter, Verteidiger1, Verteidiger2, Stürmer.
In der Spielplatzklasse werden die konstanten Werte des Spiels geschrieben (z. B. Mittelfeld, Torwartzone usw.).
Die Methode getInfo () gibt ein Objekt der GameInfo-Klasse zurück.
Verfeinerungen- Wenn Sie die Verschiebungsmethode mehrmals senden, ändert sich der Endpunkt, an den der Charakter gelangen muss. Wenn Sie den Endpunkt erreichen müssen, müssen Sie warten, bis der Charakter ihn erreicht, bevor Sie ihn an einen anderen Punkt senden.
- Die Kick-Methode kann nur für einen Spieler verwendet werden, dem der Puck gehört.
- Die Drehmethode nimmt einen Winkel ein, während für die untere Seite des Feldes der Winkel Werte von 0 (Blick auf das Ziel des Feindes) bis 180 (Blick auf das eigene Ziel) und für den oberen Halbkreis Werte von 0 bis -180 annimmt.

Bewertungskriterien
Auch aus einer PDF-Datei entnommen. Es wird nur Code aus der Algoritm-Klasse verwendet. Der Algorithmus jedes Teilnehmers wird nacheinander auf allen Schwierigkeitsstufen ausgeführt. Entsprechend den Ergebnissen des Laufs werden Punkte für die Ergebnisse des Spiels festgelegt, und Punkte für die im Algorithmus implementierten Möglichkeiten werden ebenfalls vergeben.
Liste der Kriterien- Angriffe auf das Tor müssen aus verschiedenen Blickwinkeln ausgeführt werden. Zum Beispiel: Direkt vor einem Spieler ein feindlicher Torhüter - ein Angriff auf das Tor muss in einem Winkel ausgeführt werden.
- Der Spieler gibt den Ball an einen freien Hockeyspieler weiter, um einen Angriff auf das Tor auszuführen.
- Das Passspiel sollte nur in den Fällen gegeben werden, in denen der Spieler den Angriff nicht selbst ausführen kann (alle Winkel für den Angriff auf das Tor sind geschlossen).
- Der Pass darf nur an einen Spieler vergeben werden, der den Pass frei hat. Hockeyspieler mit einem Angriffsziel haben Vorrang.
- Wenn ein Angriff unmöglich ist, muss sich das Team zurückziehen und neu gruppieren.
- Hinzufügen. Punkte, wenn sie mittels Überweisungen abreisen.
- Hinzufügen. Punkte, wenn Sie den Torhüter zum Umgruppieren verwenden.
- In der Verteidigung sollte die Fähigkeit, an einen anderen Spieler des Gegners weiterzugeben, blockiert werden.
- Das Team des Spielers hält sich an Strategien. Zum Beispiel: 1 Verteidiger hält sich im Falle eines feindlichen Gegenangriffs immer etwas weiter.
- Der Algorithmus berücksichtigt die Anzeigetafel. Zum Beispiel: spielt im Falle eines Verlusts aggressiver und umgekehrt in einer Gewinnsituation vorsichtiger; Mit einem Unentschieden erhöht sich die Aggression gegen Ende des Spiels.
Strafpunkte werden vergeben für:
- Der Spieler erzielt Tore in seinem eigenen Tor.
- Hockeyspieler blockieren sich gegenseitig. (Lassen Sie sich nicht passieren).
- Das Spiel absichtlich blockieren. Zum Beispiel: Schieben Sie den Puck bis zum Ende des Spiels gegen den Puck.
Hauptteil
Vorbereitung auf den Wettbewerb
Ilya
Zunächst schrieben sie, dass es im Finale eine „industrielle Entwicklung“ geben werde. Ich erwartete normale Arbeit mit der Basis, GUI-Entwicklung. Zum Beispiel eine Anwendung für die Buchhaltung. Mit halbem Kummer stimmte ich dem Finale zu, weil ich mit dem, was ich zu tun hatte, nicht sehr zufrieden war. Am 17. September kommt jedoch ein Brief mit den Regeln für die Durchführung des Finales, und dort wird Folgendes berichtet: „Es gibt ein Computer-2D-Spiel„ Hockey “, in dem Computer-Bots nach einem bestimmten Algorithmus spielen. Es ist notwendig, einen Algorithmus in der Java-Programmiersprache zu implementieren, nach dem die Zeichen der Teilnehmer handeln “(es wurde auf der Site geschrieben, dass die Aufgabe geändert werden könnte). Ich erinnerte mich sofort an den russischen KI-Pokal 2014 in meinem Kopf. Ich war begeistert und stellte fest, dass es nicht umsonst war, dass ich mich bereit erklärte, daran teilzunehmen.
Als erstes habe ich noch einmal
den Artikel des
Gewinners gelesen. Im Allgemeinen erinnerte ich mich daran, was da war, aber nicht alle Momente waren klar. Dann ging ich zur
Website des Wettbewerbs und las die Regeln. Ich habe damit aufgehört, weil jede Änderung der Regeln das ganze Spiel komplett verändern kann. Ich wusste nicht, wie viele Physiker in ihrem Spiel sein werden, ich wusste nicht, wie die Auswahl von Punsch und Puck usw. sein wird. Das Spiel könnte stark vereinfacht werden, so dass selbst die Ecken nicht benötigt würden. Also fing ich an zu warten ...
Wartete und wartete! Am Nachmittag des 27. September kommt ein Brief über das Webinar! 28. September um 19:00 Uhr. Es war ein perfekter Tag und eine perfekte Zeit für mich. Jedoch ... 4 Stunden vor dem geplanten Start kam jedoch ein weiterer Brief mit einer Überweisung an 17:00 Uhr an! Der Transferbrief kam eine Stunde vor dem Start ... Ich flog so gut ich konnte und war ungefähr 15 Minuten zu spät (ich hatte nicht erwartet, dass Flash Player noch installiert werden müsste).
Beim Webinar stellte er Fragen und machte sich ein allgemeines Bild über das Spiel. Es gab genug Daten, sogar um meine eigenen zu schreiben und gründlich vorzubereiten. Bis zum letzten Mal war jedoch nicht klar, wie der Schlag auftritt, und die Entwickler gaben einige Punkte nicht bekannt, und an einigen Stellen hatten sie sich selbst noch nicht bis zum Ende entschieden.
Nachdem ich alles Wertvolle aufgeschrieben hatte, ging ich zu den bekannten aktiven Mitgliedern von RAIC, um mit ihnen zu sprechen. Hallo und danke
m0rtido ,
DragoonXen ,
oreshn1k . Nachdem wir die Situation skizziert hatten, wurde klar, dass es notwendig ist, ifa fest zu codieren und in einer solchen Zeit nicht über Simulationen der Welt sprechen kann.
oreshn1k teilte das
Bombenbuch „Programming Game AI by Example“, in dessen viertem Kapitel das Design von AI für den Fußball behandelt wurde. Ich mochte das Buch so sehr, dass ich mich entschied, die gesamte Strategie, die ich beim Wettbewerb schreiben wollte, für mich selbst zu malen, und das Zeitlimit völlig vergaß. Was ich schreiben wollte, war für diesen Wettbewerb nicht geeignet ...
Meine erledigte nutzlose Vorbereitung ist auf
Anfrage verfügbar (ordentlich gibt es bereits 168 Aufgaben. An einigen Stellen mit einer Beschreibung). Für diesen Wettbewerb nutzlos, aber im Allgemeinen ist es eine hervorragende Systematisierung des aus dem Buch gewonnenen Wissens. Dort dachte ich darüber nach, den Puck zu simulieren, um nach einer Weile seine Position herauszufinden, den richtigen Winkel für den Torschuss zu finden, die Logik, den Puck zwischen den Spielern zu übertragen, und eine Reihe interessanter Dinge.
Ich habe bereits oben geschrieben, dass ich ohne eine Ahnung, wie man in Java schreibt, zusätzlich zur Strategie begann, die Syntax der Sprache zu studieren. Dies wurde durch eine hervorragende Website unterstützt, die ich mehr als zum ersten Mal verwendet habe -
Lernen Sie X in Y Minuten . Nachdem ich IntelliJ IDEA eingegeben hatte, wurde mir klar, dass das Schreiben darauf genau das gleiche ist wie das Schreiben auf C #.
Mit dieser Vorbereitung ging ich nach Moskau.
Anna
Als ich etwas über das Thema des Finales erfuhr, war das erste, was ich wiederholen wollte, das Geoma. Und damit alles Spaß macht und mehr, habe ich alles mit
Processing gemacht : Ich habe mir Beispiele von Entwicklern angesehen, die sich auf Bewegung, Berechnung von Winkeln, Geschwindigkeit und Beschleunigung beziehen, und dann meine kleinen Skizzen geübt.
Ich beschloss, keine Zeit damit zu verschwenden, einige Feinheiten von Java zu aktualisieren, da die Aufgabe, wie es mir schien, Fähigkeiten im Schreiben von Strategien und einige Kenntnisse der Mathematik vorschlug. Also habe ich beschlossen, den
Artikel des Gewinners der RAIC 2014 zu lesen. Der Artikel war interessant, aber nicht besonders nützlich für diesen Wettbewerb, da sich die Physik radikal unterscheiden könnte und viel weniger Zeit zur Verfügung stünde.
Das Webinar der Entwickler war interessant und nützlich und gab ein Gesamtbild des Spiels. Leider konnte ich es nicht vollständig ansehen, da die Sendung mit Flash durchgeführt wurde und mein Laptop in diesem Moment beschloss, mit dem blauen Bildschirm des Todes zu spielen.
Kurz vor dem Finale hatte ich keine Strategie im Voraus ausgearbeitet: Es war schwierig, etwas zu planen, wenn die Details der Physik des Spiels nicht bekannt gegeben wurden. Es gab Gedanken darüber, worauf es sich lohnt, zuerst zu achten, welche Hilfsmethoden man sofort schreibt, aber nicht mehr. Ich entschied, dass die Hauptsache vor dem Finale darin bestand, sich zu entspannen, genug Schlaf zu bekommen und gut gelaunt dorthin zu kommen.
Löwe
[Vorbereitet] Ungefähr 16-20 Stunden. Dementsprechend habe ich Geometrie betrachtet, mit der ich leider nicht sehr uneins bin. Vorbereitete Formeln und Berechnungen im Voraus, testete alles. Ich habe den Bereich geschätzt, aus dem Sie gemäß den von den Organisatoren des Webinars vorgegebenen Bedingungen punkten können. Dann habe ich einen Emulator für einige Aktionen geschrieben und festgestellt, wie der Bereich aussehen würde, wenn direkt Schüsse von verschiedenen Punkten und die optimale Torwartstrategie simuliert werden. Infolgedessen war fast nichts praktisch und ich musste Krücken auf Krücken schreiben.

Zeitverteilung
Ilya
Ich hatte immer Probleme mit der Zeitverteilung bei Wettbewerben und Olympiaden. Ich trat zum dritten Mal auf einen Rechen. Nach dem ersten sagte er, dass er dies niemals zulassen würde. Wieder setzte er sich auf eine Aufgabe, wechselte lange Zeit nicht zu einer anderen.
Verbrachte viel Zeit, den gesamten ersten Teil des Wettbewerbs vor dem Mittagessen, mit der Implementierung aller Arten von Wrappern für Teamplayer, Staatsklassen, Nachrichten zwischen ihnen und internen Rollen. Im Allgemeinen ging ich zu den Aufgaben über, die ich vor dem Wettbewerb gebildet hatte, und vergaß dabei den Rat erfahrener Teilnehmer zu Hardcode-Ifs und Hilfsmethoden. Er schrieb einfach, ohne über die Zeit nachzudenken.
Beim Abendessen kam ich zur Besinnung. Ich habe verstanden, dass die Hälfte des Wettbewerbs vorbei war und ich noch 10 Stunden arbeiten muss, damit sich zumindest etwas bewegt. Es wurde beschlossen, alles zu verlassen und von vorne zu beginnen. Dies waren die faszinierenden letzten Stunden des Wettbewerbs, als ich aufhörte, traurig zu sein und über das Verhalten meiner Bots kicherte. Sehr schnell begann von Aufgabe zu Aufgabe zu wechseln. Er geht nicht dorthin - er wechselte zu einem anderen, dann kehrte er zurück. Es gab nur einen Wunsch - zumindest irgendwie zu punkten, zumindest etwas. Daher wurde die Sauberkeit des Codes und der OOP völlig vergessen, interessante Kommentare wurden stellenweise hinterlassen.
Anna
Zuerst habe ich mich entschlossen herauszufinden, wie die grundlegenden Methoden im Spiel im Allgemeinen funktionieren: die Bewegung von Hockeyspielern, das Einfangen des Pucks, das Drehen und Pässe. Ich habe ungefähr eine Stunde damit verbracht. Ich habe auch die Daten und Methoden studiert, die die Hockeyspieler und der Puck hatten. Dann entschied ich, dass es schön wäre zu lernen, wie man den Winkel zwischen zwei Objekten findet (insbesondere zwischen einem Hockeyspieler und einem Puck). Ich hatte große Schwierigkeiten damit: Zuerst habe ich die Math.atan2-Methode lange herausgefunden und dann versucht, die empfangenen Daten in ein System von Entwicklerwinkeln umzuwandeln. Mit all dem wurde ich vor dem Abendessen gequält und war sehr verärgert, dass ich viel Zeit für eine kleine Aufgabe aufgewendet habe, obwohl ich gleichzeitig eine Strategie für mindestens das erste Level schreiben konnte.
Nach dem Mittagessen beschloss ich, die Zeit rationaler zu verteilen. Beenden Sie die Methode schnell mit der Bestimmung des Winkels und schreiben Sie dann eine Strategie für die erste Ebene. Dann ging sie reibungslos zur Strategie für das zweite Level über, die sie am Ende für das dritte anwendete. Eigentlich habe ich das bis zum Ende des Finales getan und mich an das seltsame Verhalten meiner Hockeyspieler gehalten. Der Code erwies sich als schrecklich, unlesbar, mit einer Reihe von Wenns und Copy-Paste, aber er hat seine Aufgabe mehr oder weniger gemeistert: Meine Eishockeyspieler haben Tore erzielt.
Löwe
Für die gegebene Zeit (7 Stunden, was für einen solchen Wettbewerb wahnsinnig klein ist) hat er einen einfachen Algorithmus entwickelt, der in der Lage war, konstant 1-2 Level mit einer vernichtenden Punktzahl zu gewinnen. Und dann gab der Algorithmus abhängig von zufälligen Ereignissen mit einer 3. Ebene eine Punktzahl von 0-2 bis 6-0 aus. Leider war es nicht möglich, die vierte Ebene zu betrachten. Gleichzeitig bin ich mir sicher, dass Sie in dieser Zeit eine viel bessere Option schreiben können, aber dafür müssen Sie verstehen, wie eine Art Turnaround funktioniert, aber hier zuckten die Organisatoren die Achseln und sagten, dass wir nicht verstehen, warum dies so ist.Die meiste Zeit, um herauszufinden, wie und was im Projekt funktioniert, war besonders wütend, weil .equals () und zwei Felder .TypeOfPlayer und .PlayerType nicht funktionierten, was völlig unterschiedliche Dinge zurückgab. Nun, es gibt einige seltsame Verhaltensweisen von Spielern, die die Organisatoren wirklich nicht erklären konnten (und wir wissen nicht, warum Ihr Charakter hier mit dem Rücken für das einzig gegebene Team reitet und die bereits erwähnten Wendungen :)). Dann stellt sich irgendwann heraus, dass es im Projekt Konstanten für die Größe verschiedener Spielobjekte und ihre Positionen gibt, die anscheinend ursprünglich im Referenzmaterial enthalten sein sollten, aber nein, am Ende hat es Zeit gekostet, sie zu zählen von Hand.Unsere Pfosten
Ilya
Anna
- Wie Ilya konnte ich meine Zeit am Anfang nicht richtig einteilen: Ich verbrachte viel Zeit mit einer kleinen, wenn auch nützlichen Aufgabe, aber ich musste Hockeyspielern beibringen, Tore zu erzielen.
- Sie hat viel Zeit getötet, weil sie die Signatur der Math.atan2-Methode vergessen hat: Zuerst kommt y und dann x. Ich habe das Gegenteil getan.
- Beim Schreiben einer Methode, die feststellt, ob sich auf einer bestimmten Strecke feindliche Hockeyspieler befinden, habe ich einige Fehler gemacht, aufgrund derer sich Hockeyspieler manchmal weigerten, sich irgendwohin zu bewegen.
- Insgesamt wurde der Wettbewerb nicht ernst genug genommen. Man könnte sich gründlicher vorbereiten und am Ende fleißiger und aufmerksamer sein.
Löwe
- Die ersten zwei Stunden in den Protokollen wurden auf Befehl der Alliierten beide Male zufällig wiederholt, anstatt auf Befehl der Bots zum zweiten Mal.
Veranstalter Shoals
- Wenig Daten für komfortables Schreiben starker Strategien. Alles, was uns gegeben wurde, waren vier Methoden zur Kontrolle und Positionierung der Spieler auf dem Spielfeld. Ja, der Puck hatte auch seinen Besitzer. Von den Konstanten waren die Mitte des Feldes, der Torhüter und die Torbereiche zugänglich. Vielen Dank dafür, aber es scheint uns, dass die folgende Liste von Werten einfach notwendig war. Wir haben sie nur gekratzt!
- Spielergeschwindigkeit (jede Rolle hatte ihre eigene Geschwindigkeit), Pucks;
- Informationen zum Verlangsamen des Pucks;
- Startpositionen der Spieler;
- Größen von Spielern, Pucks;
- Während des Webinars sagten die Entwickler deutlich, dass es keine Möglichkeit geben würde, den Quellcode des Servers abzurufen. Über einige Packer wurde gesagt, dass .exe ausrutschen würde. Das Wort "Verschleierung" blitzte nicht auf, sondern deutete an. Tatsächlich haben wir ein .jar bekommen, das sich in wenigen Sekunden dekompiliert und nicht nur die Konstanten und die Logik mit der Physik des Spiels, die den Teilnehmern fehlten, sondern auch ihren Quellcode des Bots des 3. Levels, der gegen uns spielt, verfügbar werden. Leider habe ich das selbst bei der Ankunft zu Hause bemerkt und von den Teilnehmern von der Dekompilierung nach dem Wettbewerb gehört. Sie erzählten, wie jemand es während des Finales benutzt hat. Wenn dies wahr ist, ist es sehr unangenehm. In solchen Momenten beginnt man zu bedauern, dass das Richtige alles ist.
Aber in diesem Fall ist es nicht sehr ehrlich (Alexander Polishchuk boba-alex ).
Gut gemacht, dass sie es benutzt haben, da es kein Verbot in den Regeln gab, aber sie beschlossen, nicht durch den Verschleierer zu gehen, also war es Teil der Olympiade (Maxim Pyankov maxzxwd ).

- Hockeyspieler könnten zu einer zufälligen Zeit vom Spielfeld verschwinden und erst am Ende des Spiels erscheinen. Sie können den Spieler in den Torwartbereich schieben.
- Beim Aufrufen der move () -Methode könnte sich der Hockeyspieler in die falsche Richtung gedreht haben. Aus diesem Grund könnte es so etwas wie ein „Mondspaziergang“ sein.
- Die turn () -Methode setzt die Spieler bis zu einem bestimmten Punkt merklich langsamer als die move () -Methode ein (es gibt eine automatische Drehung in die richtige Richtung). Dies geschieht in der Regel in einem Konflikt mit einem anderen Hockeyspieler. Vergleich zweier Methoden:
- Der Reflexionswinkel ist schlecht. Riesige Geschwindigkeit nach dem Abprallen von den Seiten (Video 4-mal langsamer). Unterlegscheiben brauchen nicht, obwohl sie im Ziel war.
Zum Vergleich ein Beispiel für einen Pass im rechten Winkel, bei dem alles gut mit Geschwindigkeit ist und es zu einer Verlangsamung kommt.
- Der Angreifer des gegnerischen Teams stand näher an der Mitte des Feldes und fing den Puck sofort zu Beginn der Runde ab (der Puck, der sich nicht in der Mitte der Feldstruktur befindet, ist ebenfalls normal).

- Die Einschränkung „Der Torhüter kann nur vom Tor aus die Mitte des Feldes erreichen“ gilt nur für unser Team. Für Feinde gibt es keine solche Regel.
- Damit Eishockeyspieler Aktionen ausführen können, müssen Sie zuerst die move () -Methode auf eine von ihnen anwenden.
- Die Organisatoren im Strategiecode haben eine Zeitüberschreitung hinterlassen, die sich auf die Häufigkeit des Empfangs neuer Daten auswirkt. Wenn Sie diesen Code einfach löschen, friert alles ein. Viele verstanden den Zweck nicht und die Organisatoren gaben keine Erklärung ab. Auch in den Regeln wurde dieser Teil des Codes nicht angezeigt. Viele saßen hier in einer Pfütze.
- Eine große Anzahl von Teilnehmern hatte Probleme beim Aufbau und der Änderung des Strategie-Levels (wie sich herausstellte, wussten nicht viele Leute, wie man mit Maven'om arbeitet).
- Während des Webinars sagten die Organisatoren, dass Java Version 8 verwenden wird, aber am Ende benötigte das Projekt mindestens Java 11.
- Anna: Nachdem ich mich an einen funktionierenden Computer gesetzt hatte, gab es Probleme mit dem Build aufgrund zusätzlicher Leerzeichen im Code, die den Variablennamen brachen. Nicht kritisch, aber nicht sehr nett.
- Auf einigen Computern gab es anfangs keine Aufgabendateien oder das Internet, und Abhängigkeiten wurden lange Zeit geladen.
- Es waren mehr Teilnehmer als erwartet. Es geschah wegen irgendeiner Art von Extras. Daher hatte eine Person ~ 13 Probleme mit der Suche nach Computern (einige nahmen ihre Laptops heraus) und startete das Projekt von Grund auf neu.
- Das Mittagessen war nicht streng geregelt. Sie gaben keine bestimmte Zeit für eine Mahlzeit, sie schlossen das Publikum nicht. Hungernde Menschen hatten eine zusätzliche Stunde Zeit, um zu verkaufen.
- Oben in der Beschreibung des Wettbewerbs gibt es eine Unterüberschrift mit Bewertungskriterien. Ihr Problem ist, was es über die Punkte sagt, aber es ist nicht geschrieben, wie viel und wofür. Infolgedessen erhielten wir Undurchsichtigkeit und einen allgemeinen Mangel an Verständnis dafür, was zu tun ist, um zu gewinnen.
Es wäre wahrscheinlich schwierig, Teilnehmer in der Nähe des Levels zu vergleichen, da es keine eindeutigen Punktezuweisungen für Features gab, sondern nur eine Liste. Die Teilnehmer konnten verschiedene Funktionen implementieren, aber von allen gleichen war es notwendig, irgendwie zu vergleichen (Roman).
Fazit
Fazit
Wenn Sie aufhören, das Finale zu ernst zu nehmen, war es im Allgemeinen lustig, interessant und sehr klebrig. Ja, ich musste Zeit damit verbringen, keine Strategie zu schreiben, sondern mit den Fehlern der Entwickler fertig zu werden. Aber wenn Sie sich anpassen und anfangen, nach ihren Regeln zu spielen, werden Sie sogar anfangen, sich an dem Prozess zu erfreuen. Natürlich möchte ich, dass die Entwickler diese Aufgabe verantwortungsbewusster angehen und die Angelegenheit zum Abschluss bringen, ohne die endgültigen Teilnehmer mit rohem und unvollendetem Material zu versorgen.
Es ist auch erwähnenswert, dass die Gewinner dieses Finales großartige Leute sind: Unter solch schwierigen und unerwarteten Bedingungen konnten sie zusammenkommen, alles herausfinden und eine qualitativ hochwertige Lösung herausgeben. Respekt vor solchen Jungs.
Danksagung
Zunächst möchte ich mich bei den Teilnehmern bedanken, die beim Schreiben des Artikels mitgeholfen haben und sich freundlicherweise bereit erklärt haben, unsere Fragen zu beantworten. Leider war aufgrund des Richtungswechsels nicht viel Material erforderlich.
Dank an Anna (
odrus ), Leo (
zadamantiy ), Alexander (
boba-alex ), Maxim (
maxzxwd ), Ivan, Roman, Anna, Donat, Alexander.
Ich möchte auch den Organisatoren des IT-Planet-Wettbewerbs selbst, den Organisatoren des Finales für den Wettbewerb „Programming: Java“ SimbirSoft und insbesondere dem Entwickler Eduard danken, der beim Finale anwesend war und den Teilnehmern bei Bauproblemen half, die nicht offensichtlichen Momente in der Logik des Spiels zu klären.
Vielen Dank für die Tatsache, dass die Konkurrenz überhaupt nicht gekickt hat, wie beim Sisharp (Alexander).
Die Idee des Finales war gut, auch die Qualifikationsrunden (Ivan).
PS
Während des Schreibens eines Artikels kamen Fotos vom Wettbewerb und Protokolle an, was bedeutet, dass wir jetzt unsere Plätze bekannt geben können!
Ilya krähte am meisten - 28-32 von 33
Anna - 16
Leo - 14
Vielen Dank für das Lesen bis hierher!