Strategia podstawowa: ------------------------------- Wartstwa I: jeden WARUNEK WYBORU strategii chwilowych: połowa na której znajduje się piłka Gdy piłka na naszej połowie - realizacja STRATEGII CHWILOWEJ "Obrona". Gdy piłka na połowie przeciwnika - realizacja STRATEGII CHWILOWEJ "Atak". ------------------------------- Warstwa II: dwie STRATEGIE CHWILOWE: Atak i Obrona: Strategia "OBRONA": Krótki opis: prosta próba wybicia piłki Role w strategii: "Bramkarz_def", "ObroncaL_def", "ObroncaH_def", "Stoper", "Wybijajacy" Algorytm podziału ról: - "Bramkarz" przypisany na stałe do robota o ID=0, - Na "Wybijającego" wybierany jest robot który jest "najbliżej piłki" (wystarczy odległość na współrzędnych X) - Na "Stopera" wybierany jest robot, który jest najbliżej "punktu stopera". - Na "ObroncaL_def" wybierany jest robot najbliżej dolnej krawędzi boiska - Na "ObroncaH_def" wybierany jest robot najbliżej górnej krawędzi boiska (właściwie jest to ostatni "wolny" robot) Priorytety przydziału ról (Bramkarz, Wybijający, Stoper, ObroncaL_def, ObroncaH_def) Strategia "ATAK" Krótki opis: prosta próba strzału na bramkę Role w strategii: "Bramkarz_of", "ObroncaL_of", "ObroncaH_of", "Asysta", "Strzelec" Algorytm podziału ról: - "Bramkarz" - przypisany na stałe do robota o ID=0 - na "Strzelca" zostaje wybrany zawodnik, który jest najbliżej piłki - Pozostałe 3 roboty - "Asysta", "ObroncaL_of", "ObroncaH_of" przydzielane są w kolejnosci odleglosci od pilki (bliższy robot z wyższym priorytetem) Priorytety przydziału ról (Bramkarz, Strzelec, Asysta, ObroncaL_of, ObroncaH_of) ------------------------------- Warstwa III: METODY PODSTAWOWE użyte w strategii: "Bramkarz_def" - Opis: standardowy algorytm bramkarza dotarczany razem z symulatorem. Realizacja: wywołanie metody Goalie dla danego robota. "Bramkarz_of" - Opis: nieruchomy bramkarz w osi boiska. Realizacja: robot na środku bramki 15 jednostek przed linią bramkową. "ObroncaL_def" - Opis: nieruchomy obrońca w dolnym rogu pola karnego. Realizacja: robot ustawia się w punkcie x=20 jednostek przed linią pola bramkowego, y=górna granica pola karnego "ObroncaH_def" - Opis: nieruchomy obrońca w górnym rogu pola karnego. Realizacja: robot ustawia się w punkcie x=20 jednostek przed linią pola bramkowego, y=dolna granica pola karnego "Stoper" - Opis: ruchomy obrońca na środku swojej połowy (W "punkcie stopera") . Rozszerzony o trywialną próbę wybicia piłki. Realizacja: robot ustawia się w "punkcie stopera" to jest x=30 jednostek przed linią pola bramkowego, y=środek boiska. Gdy piłka znajdzie się w jego obszarze krycia (3 cale) robot przemieszcza się w jej kierunku. (Metoda Position ze współrzędnymi piłki jako parametrami) "ObroncaL_of" - Opis: nieruchomy obrońca w dolnej części na środku swojej połowy. Realizacja: robot ustawia się w punkcie x=40 jednostek przed linią pola bramkowego, y=górna granica pola karnego "ObroncaH_of" - Opis: nieruchomy obrońca w górnej części na środku swojej połowy. Realizacja: robot ustawia się w punkcie x=40 jednostek przed linią pola bramkowego, y=dolna granica pola karnego "Asysta" - Opis: przygotowanie dogodnej pozycji do ewentualnej dobitki przez przemieszczenie robota do "Punktu pomocy". Realizacja: wywołanie metody positon ze współrzędnymi punktu pomocy (10 cali na osi X w stronę swojej bramki od pozycji piłki). uwaga: aby metoda "Asysta" była uniwersalna, "Punkt pomocy" należy obliczać ze wzoru ((ball.position.x+(isYellow)*10) ; ball.position.y) "Wybijający" - Opis: trywialna próba wybicia piłki przez przemieszczenie się w jej kierunku. Realizacja: wywołanie dla danego robota metody position z (X,Y) punktu docelowego będącymi aktualnymi współrzędnymi piłki. "Strzelec" - Opis: trywialna próba strzału na bramkę przez przemieszczanie się w kierunku przewidywanej pozycji piłki. Realizacja - wywołanie dla danego robota metody position z (X,Y) punktu docelowego będącymi przewidywanymi współrzędnymi piłki. ------------------------------- METODY POMOCNICZE użyte w strategii: int najblizej_punktu(int x, int y, boolean filtr) - metoda zwracająca ID robota będącego najbliżej punktu podanego jako parametr. Parametr filtr wskazuje czy uwzględniać wcześniejsze przydziały robotów czy nie. ------------------------------- DO ZAIMPLEMENTOWANIA: Wewnatrz metody Strategy(...) 1. trywialne drzewo decyzyjne wyboru strategii chwilowych - "if" z warunkiem wyboru i wywolaniem funkcji poszczególnych strategii chwilowych Na zewnatrz metody Strategy(...) 2. metoda obliczająca warunek wyboru strategii chwilowych - funkcja boolean pilka_na_wlasnej_polowie(Environment env) {...} 3. strategia chwilowa ATAKU - funkcja void atak(Environment env) { ... } 4. strategia chwilowa OBRONY - funkcja void obrona(Environment env) { ... } Wewnątrz funkcji 3 i 4 należy zaimplementowac algorymty przydziału ról pomiędzy roboty opisane szczegółowo w definicji tych metod. uwaga: w algorytmie podziału ról w strategii chwilowej należy zwracać uwagę na priorytety ról - tzn nie przypisać nowej roli do robota, który ma już przypisaną rolę. Metody podstawowe: 5. "Wybijający" - funkcja void wybicie(Robot r1, Environment env) { ... } 6. "Strzelec" - funkcja void strzelec(Robot r1, Environment env) { ... } 7. "Asysta" - funkcja void asysta(Robot r1, Environment env) { ... } 8. "ObroncaH_def" - funkcja void obroncaH_def(Robot r1, Environment env) { ... } 9. "ObroncaL_def" - funkcja void obroncaL_def(Robot r1, Environment env) { ... } 10. "ObroncaH_of" - funkcja void obroncaH_of(Robot r1, Environment env) { ... } 11. "ObroncaL_of" - funkcja void obroncaL_of(Robot r1, Environment env) { ... } 12. "Bramkarz_of" - funkcja void Bramkarz_of(Robot r1, Environment env) { ... } Wewnątrz funkcji 5-12 należy zaimplementowac zachowania robota wg opisu danej metody.