To wyzwanie się skończyło. Aby zobaczyć ostateczne wyniki zawodników, kliknij tutaj
W tym wyzwaniu każde zgłoszenie jest jednym botem. Każdy bot powinien być funkcją Javascript. Boty będą walczyć o najwyższą łączną wartość złota. Złoto można hodować lub zdobywać za zabijanie innych botów i służy ono do ulepszania leczenia, ataku, ochrony i rolnictwa.
Cel:
W ciągu kilku rund zawierających do 1000 tur (kończy się, gdy pozostanie tylko jeden bot), bot o najwyższej wartości całkowitej (suma uzyskanego złota) jest zwycięzcą.
Okazuje:
W każdej turze każdy żywy bot (> 0 HP) zostanie uruchomiony raz. Może zwrócić ruch, który może być jednym z następujących:
- Leczenie: odzyskuje HP
- Atak: Usuwa HP z innego bota
- Tarcza: Chroni przed późniejszymi atakami
- Ogłuszenie: Pomija następną turę innego bota
- Farma: Zarabia złoto kosztem HP
- Ulepszenie: popraw niektóre ruchy
Wszystkie boty zwrócą swój ruch, zanim zostaną wykonane, więc ogłuszenie, leczenie, atak, tarcza itp. Nie wpłynie na żadne roboty poruszające się później w tej turze. Na przykład, jeśli Bot A ogłusza Bot B, a Bot B podąża za Bot A w kolejności tury, Bot B będzie się poruszał później w tej samej turze, a ogłuszenie nastąpi w następnej turze.
Walka, hodowla i ulepszanie:
Każdy bot ma maksymalną HP 100 i przypisany identyfikator UID od 0 do 99. Ten identyfikator UID zmienia się po każdej rundzie i jest to sposób, w jaki boty śledzą się nawzajem.
Leczenie jest jednym z najprostszych ruchów, dodając ilość HP zależną od jego poziomu (zaczyna się od 5 HP). Bot nie może wyleczyć powyżej 100 HP.
Atakowanie bota za pomocą UID to kolejny możliwy ruch, którego podstawowe obrażenia wynoszą 5 HP na poziomie 0. Boty można również ogłuszyć, pomijając kolejną turę, która również używa UID.
Boty mają dodatkową liczbę PW tarczy, która nie ma limitu. Tarcza HP będzie absorbować obrażenia od bezpośrednich ataków innych botów i jest dodawana przez tarczę. Na poziomie 0 ekranowanie dodaje 5 punktów życia tarczy.
Farma zarobi 5 sztuk złota na poziomie 0, kosztem 2 HP. Tych 2 HP nie można osłonić. Jedynym zastosowaniem złota (oprócz wygrywania) jest ulepszanie ruchów. Leczenie, atakowanie i tarcza mają wartość podstawową 5 HP, a farma zaczyna się od 5 złota. Każdy z tych ruchów ma indywidualne poziomy, które zaczynają się od 0. Te formuły określą wartość HP lub złota ruchu, gdzie L jest poziomem:
- Gojenie:
L + 5
- Napadający:
1.25L + 5
- Zastawianie:
1.5L + 5
- Rolnictwo:
2L + 5
Koszt ulepszenia dowolnego ruchu jest taki sam dla określonego poziomu i jest określony przez 2.5L² + 2.5L + 10
, gdzie L jest poziomem bieżącym. Bot może użyć tej funkcji cost(currentLevel)
jako skrótu, aby to ustalić.
Boty zaczynają się od 25 sztuk złota, co pozwala im szybko ulepszyć dwa ruchy na poziom 1 lub jeden ruch na poziom 2. To początkowe złoto nie liczy się do całkowitej wartości botów. Zabicie bota daje połowę jego całkowitej wartości w złocie, w zaokrągleniu w górę, a jeśli dwa boty zabijają drugiego w tej samej turze, oboje otrzymują nagrodę.
Wejście wyjście:
Aby komunikować się ze sterownikiem, zwracana wartość funkcji służy do wysyłania informacji o ruchu. Jeden z nich powinien zostać zwrócony:
- Uzdrowić:
heal()
- Atak:
attack(uid)
- Tarcza:
shield()
- Oszołomić:
stun(uid)
- Gospodarstwo rolne:
farm()
- Aktualizacja:
upgrade("heal" / "attack" / "shield" / "farm")
Aby pominąć turę (nic nie rób), nic nie zwracaj lub zwróć wartość fałszowania.
Aby uzyskać bieżący numer tury (zaczyna się od 1), użyj turn()
.
Argumenty twojej funkcji będą zawierać informacje o twoim bocie, UID innych botów i przechowywanie między kolejnymi. Pierwszy parametr jest obiekt o następujących właściwościach: uid
, hp
, gold
i shield
. Są to kopie bieżących informacji Twojego bota. Istnieje również zagnieżdżonego obiektu levels
, z numerami szczebla heal
, attack
, shield
i farm
.
Drugi argument jest tasuje tablicę wszystkich żywych robotom niż ty, podany jako przedmiot zawierający właściwości uid
, hp
(wraz z osłoną) worth
i attack
(poziom ataku). Trzeci argument to pusty obiekt, którego można użyć do przechowywania między kolejnymi.
Przykładowe boty:
Ten bot będzie farmował, dopóki nie może ulepszyć swojego ataku do poziomu 5, a następnie za każdym razem atakuje losowego bota, dopóki nie umrze (lub nie wygra). Niezbyt skuteczny z powodu braku leczenia / osłony.
function freeTestBotA(me, others, storage) {
if (me.levels.attack < 5) {
if (me.gold < cost(me.levels.attack))
return farm();
return upgrade("attack");
}
return attack(others[0].uid);
}
Ten bot ma dwa tryby: ofensywny i defensywny. W trybie obronnym ogłusza losowego bota lub leczy, aw trybie ofensywnym atakuje lub osłania. W miarę możliwości będzie próbował ulepszyć swoje ataki.
function freeTestBotB(me, others, storage) {
if (me.gold >= cost(me.levels.attack))
return upgrade("attack");
if (me.hp < 50)
if (Math.random() < 0.5)
return stun(others[0].uid);
else
return heal();
else
if (Math.random() < 0.5)
return attack(others[0].uid);
else
return shield();
}
Zasady:
- Standardowe luki zabronione
- Boty nie mogą odczytywać, modyfikować ani dodawać żadnych zmiennych poza swoim zakresem, nie mogą próbować oszukiwać i nie mogą wywoływać żadnych funkcji zdefiniowanych przez kontroler lub DOM
- Zwracana wartość musi być fałszem lub jednym z powyższych wyjść funkcji
- Boty nie powinny być zaprojektowane do celowania w konkretnego bota, ale mogą być zaprojektowane tak, aby wykorzystywać wspólne strategie
- Boty nie mogą się atakować (wykryte z powodu komentarza @Ness)
- Boty muszą się wystarczająco różnić od innych botów, aby można je było rozsądnie uznać za osobne wpisy
- Zespolenie nie jest teraz dozwolone
- Kontroler można znaleźć tutaj
- Pokój rozmów
Debugowanie nowego kontrolera:
Korzystając z pliku gold-battle-log.js
, możesz ustawić wartość debug
właściwości bota botData
na 0 (bez rejestrowania), 1 (log ruchów) lub 2 (log ruchów, hp, złoto, poziomy itp.)
Wyzwanie kończy się o godzinie 17.00 UTC w piątek, 9 sierpnia
[closed]
na końcu prawdopodobnie sprawi, że zwykli widzowie pominą czytanie mojego wyzwania, ponieważ; zakładają, że jest niskiej jakości lub nie na temat.