Scriptbot Warz!
Wyniki są już dostępne, a Assassin jest naszym mistrzem, wygrywając 2 z 3 meczów! Dziękujemy wszystkim, którzy przesłali Scriptboty! Specjalne podziękowania dla rogów za BestOpportunityBot, który wyświetlał doskonałe ścieżki i w pełni wykorzystywał wszystkie opcje akcji.
Mapa 1
Assassin wyjął BestOpportunityBot wcześnie, a reszta meczu była dość nudna. Szczegółowa gra tutaj.
- Zabójca: 10 HP, 10 obrażeń, 3 otrzymanych obrażeń
- The Avoider v3: 10 PW, 0 zadanych obrażeń, 0 otrzymanych obrażeń
- Muszę zakończyć Jedzenie: 10 PŻ, 0 obrażeń zadanych, 0 otrzymanych obrażeń
- BestOpportunityBot: 0 HP, 3 obrażenia zadane, 10 otrzymanych obrażeń
Mapa 2
BestOpportunityBot wykonał większość pracy w tym meczu, ale Assassin był w stanie go wyeliminować. Szczegółowa gra tutaj.
- Zabójca: 2 HP, 10 obrażeń, 9 otrzymanych obrażeń
- BestOpportunityBot: 0 HP, 32 obrażenia zadane, 10 otrzymanych obrażeń
- The Avoider v3: 0 PW, 0 zadanych obrażeń, 12 odniesionych obrażeń
- Muszę zakończyć Jedzenie: 0 PŻ, 0 obrażeń zadanych, 11 otrzymanych obrażeń
Mapa 3
BestOpportunityBot popchnął wszystkich w pułapkę na ten mecz. Bardzo fajny. Szczegółowa gra tutaj.
- BestOpportunityBot: 10 HP, 30 obrażeń zadanych, 0 otrzymanych obrażeń
- Zabójca: 0 PŻ, 0 zadanych obrażeń, 0 otrzymanych obrażeń
- Muszę zakończyć Jedzenie: 0 PŻ, 0 zadanych obrażeń, 0 otrzymanych obrażeń
- The Avoider v3: 0 PW, 0 zadanych obrażeń, 0 otrzymanych obrażeń
Dzięki za odpowiedzi! Ponieważ są tylko 4 Scriptboty, porzucamy plany turniejowe dla trzech darmowych meczów, po jednym na każdej z poniższych map. Wygrywa skrypt z najwyższym rekordem wygranych. W przypadku remisu nastąpi nagła śmierć, w której wygrywa skrypt, który zrywa remis jako pierwszy.
Twoim zadaniem, jeśli zdecydujesz się je zaakceptować, jest kodowanie Scriptbota, który może przemierzać mapę ASCII i niszczyć przeciwników. Każda bitwa przybierze formę losowej gry turowej, w której każdy Scriptbot ma szansę wydać swoje punkty energii (EP) na działania. Skrypt GameMaster będzie przesyłać dane wejściowe i interpretować dane wyjściowe z każdego Scriptbota.
Środowisko
Każdy Scriptbot jest zawarty we własnym katalogu, w którym można go odczytać z map
oraz stats
plików i odczytu / zapisu do data
pliku. data
Plik może być używany do przechowywania jakichkolwiek trwałych informacji można znaleźć użyteczne.
Plik statystyk
stats
Plik zawiera informacje na temat swoich przeciwników i jest sformatowany w następujący sposób. Każdy gracz jest reprezentowany w osobnym rzędzie. Pierwsza kolumna to identyfikator gracza ( @
oznacza ciebie). Druga kolumna to zdrowie tego gracza.
1,9HP
@,10HP
3,9HP
4,2HP
Plik mapy
map
Plik może wyglądać tak ...
####################
# # # #
# 1 # # 2 #
# #
### ###
# #
# # #
# # ! #
# # #
# !#### #
# ####! #
# # #
# ! # #
# # #
# #
### ###
# #
# 3 # # @ #
# # # #
####################
... albo to...
######################################
# # 1 # @ #
# # # #! #
# # # #### #
# # # # # !#! #
# # # # # ##### #
# ### # #### # # #
# # #! ### # #
# ###### # # # ##### #
# #! # ###### # !# #
# ### # # # #
# # 2 # # 4 # #
######################################
... albo to...
###################
###!!!!!!#!!!!!!###
##! !##
#! 1 ! 2 !#
#! ! !#
#! !#
#! !#
#! !!! !#
## !! !!! !! ##
#! !!! !#
#! !#
#! !#
#! ! !#
#! 3 ! @ !#
##! !##
###!!!!!!#!!!!!!###
###################
... lub może wyglądać zupełnie inaczej. Tak czy inaczej, użyte znaki i ich znaczenie pozostaną takie same:
#
Ściana nieprzejezdna i nieprzenikniona.1
,2
,3
... Liczba reprezentująca odtwarzacz wroga. Te liczby odpowiadają identyfikatorowi gracza wstats
pliku.!
Pułapka. Skrypty, które poruszają się w tych lokalizacjach, umrą natychmiast.@
Lokalizacja twojego Scriptbota.Otwarta przestrzeń, w której możesz się poruszać.
Rozgrywka
Skrypt GameMaster przypisze losową kolejność uruchamiania do Scriptbots. Scriptboty są następnie wywoływane w tej kolejności, gdy jeszcze żyją. Skrypty mają 10 Punktów Zdrowia (HP) i zaczynają od 10 Punktów Energii (EP) w każdej turze, których mogą użyć do poruszania się lub ataku. Na początku każdej tury Scriptbot wyleczy się za jedno HP lub otrzyma jedną dodatkową EP, jeśli już ma 10 HP (dlatego uruchomienie może być czasem opłacalną strategią).
Bitwa kończy się, gdy tylko jeden Scriptbot przeżyje lub minie 100 tur. Jeśli pod koniec bitwy żyje wiele skryptów, ich miejsce określa się na podstawie następujących kryteriów:
- Większość zdrowia.
- Większość zadanych obrażeń.
- Większość otrzymanych obrażeń.
Wejście Scriptbot
GameMaster wydrukuje mapę bitwy do pliku o nazwie, z map
którego Scriptbot będzie miał dostęp do odczytu. Mapa może przybierać dowolną formę, dlatego ważne jest, aby Scriptbot mógł ją interpretować. Twój skrypt skryptowy zostanie wywołany z jednym parametrem wskazującym EP. Na przykład...
:> example_scriptbot.py 3
Scriptbot będzie wywoływany, dopóki nie wyda całej swojej EP lub maksymalnie 10 11 razy. Pliki map i statystyk są aktualizowane przed każdym wywołaniem.
Scriptbot Output
Skrypty botowe powinny wysyłać swoje działania do grubego. Lista możliwych działań jest następująca:
MOVE <DIRECTION> <DISTANCE>
Kosztuje 1 EP za
DISTANCE
.MOVE
Polecenie przenosi swoją Scriptbot się po mapie. Jeśli coś stoi na przeszkodzie, na przykład ściana lub inny Scriptbot, GameMaster przeniesie Scriptbota tak daleko, jak to możliwe. JeśliDISTANCE
podana zostanie wartość większa niż pozostała EP Scriptbota, GameMaster będzie przesuwał Scriptbota, aż jego EP się wyczerpie.DIRECTION
może być dowolny kierunek kompasN
,E
,S
lubW
.PUSH <DIRECTION> <DISTANCE>
Kosztuje 1 EP za
DISTANCE
.PUSH
Komenda umożliwia Scriptbot aby przejść kolejną Scriptbot. Scriptbot wydający polecenie musi znajdować się bezpośrednio obok pchanego Scriptbota. Oba Scriptboty poruszają się we wskazanym kierunku, jeśli nie ma obiektu blokującego pchanie Scriptbota.DIRECTION
iDISTANCE
są takie same jak dlaMOVE
polecenia.ATTACK <DIRECTION>
Kosztuje jedną EP.
ATTACK
Komenda zadaje 1 szkodę jakiejkolwiek Scriptbot bezpośrednio obok wydającego Scriptbot iw określonym kierunku.DIRECTION
jest taki sam jak dlaMOVE
polecenia.PASS
Kończy twoją turę.
Obsługiwane języki
Aby było to dla mnie uzasadnione, przyjmuję następujące języki:
- Jawa
- Node.js
- Pyton
- PHP
Jesteś ograniczony do bibliotek, które są zwykle pakowane z Twoimi językami po wyjęciu z pudełka. Nie każ mi lokalizować niejasnych bibliotek, aby Twój kod działał.
Składanie i ocenianie
Opublikuj poniżej kod źródłowy Scriptbot i nadaj mu fajną nazwę! Podaj także wersję używanego języka. Wszystkie Scriptboty zostaną sprawdzone pod kątem wygłupów, więc prosimy o komentarz i nie zaciemniaj swojego kodu.
Możesz przesłać więcej niż jeden wpis, ale prosimy, aby były one całkowicie unikalne, a nie wersje tego samego wpisu. Na przykład możesz zakodować bota Zerg Rush i Gorilla Warfare. W porządku. Nie publikuj Zerg Rush v1, Zerg Rush v2 itp.
7 listopada zbiorę wszystkie odpowiedzi, a te, które przejdą wstępną recenzję, zostaną dodane do przedziału turniejowego. Mistrz otrzymuje zaakceptowaną odpowiedź. Idealny wspornik pokazano poniżej. Ponieważ prawdopodobnie nie będzie dokładnie 16 wpisów, niektóre nawiasy kwadratowe mogą być tylko trzema, a nawet dwoma botami. Postaram się, aby wspornik był jak najbardziej sprawiedliwy. Wszelkie niezbędne faworyzowanie (na przykład w razie potrzeby poświęcenia tygodnia) zostanie przekazane botom, które zostały przesłane jako pierwsze.
BOT01_
BOT02_|
BOT03_|____
BOT04_| |
|
BOT05_ |
BOT06_|___ |
BOT07_| | |
BOT08_| | |_BOT ?_
|___BOT ?_|
BOT09_ ___BOT ?_|___CHAMPION!
BOT10_| | _BOT ?_|
BOT11_|__| |
BOT12_| |
|
BOT13_ |
BOT14_|____|
BOT15_|
BOT16_|
Pytania i odpowiedzi
Jestem pewien, że przegapiłem kilka szczegółów, więc zadawaj pytania!
Czy możemy ufać, że plik mapy jest zawsze otoczony # symbolami? Jeśli nie, co dzieje się w przypadku, gdy bot próbuje zejść z mapy? - BrainSteel
Tak, mapa będzie zawsze ograniczona przez #, a Twój skrypt skryptowy rozpocznie się w tych granicach.
Jeśli nie ma bota obecnego w kierunku określonym w poleceniu PUSH, jak działa to polecenie? - BrainSteel
GameMaster nic nie zrobi, zero PD zostanie wydane, a Scriptbot zostanie ponownie wywołany.
Czy niewykorzystana EP gromadzi się? - feersum
Nie. Każdy Scriptbot rozpocznie rundę / turę z 10 EP. Każdy niewydany EP zostanie zmarnowany.
Myślę, że mam, ale dla wyjaśnienia: w przypadku botów A i B kolejność zdarzeń A @ 10EP-> MOVE MAP_UPDATE B @ 10EP-> PUSH MAP_UPDATE A @ 9EP-> ATTACK MAP_UPDATE B @ 9EP-> ATTACK ... lub A @ 10EP-> MOVE A @ 9EP-> ATTACK ... MAP_UPDATE B @ 10EP-> PUSH B @ 9EP-> ATTACK ... MAP_UPDATE? Innymi słowy, czy wszystkie działania w jednej pętli zapytań kontroler-bot mają charakter atomowy? Jeśli tak, dlaczego pętla? Dlaczego nie zwrócić pojedynczego pliku ze wszystkimi czynnościami do wykonania? W przeciwnym razie boty będą musiały zapisać własne pliki stanów, aby śledzić sekwencje wielu akcji. Plik mapy / statystyk będzie ważny tylko przed pierwszą akcją. - COTO
Twój drugi przykład jest bliski, ale nie do końca słuszny. Podczas tury Scriptbot jest wywoływany wielokrotnie, aż do wydania EP lub maksymalnie 11 razy. Pliki map i statystyk są aktualizowane przed każdym wywołaniem. Pętla jest przydatna w przypadku, gdy bot podaje nieprawidłowe dane wyjściowe. GameMaster zajmie się nieprawidłowym wyjściem i ponownie uruchomi robota, dając mu szansę na naprawienie błędu.
wydasz skrypt GameMaster do testowania? - IchBinKeinBaum
Skrypt GameMaster nie zostanie wydany. Zachęcam do utworzenia pliku mapy i statystyk w celu przetestowania zachowania twojego bota.
Jeśli robot A wpycha robotB w pułapkę, czy robotowi przypisuje się punkty „zadanych obrażeń” równe aktualnemu zdrowiu robota B? - Mike Sweeney
Tak, to dobry pomysł. Bot otrzyma punkty obrażeń równe zdrowiu dowolnego bota, który wpycha go w pułapkę.
źródło
map
plik jest zawsze otoczony#
symbolami? Jeśli nie, co dzieje się w przypadku, gdy bot próbuje zejść z mapy?#
a Twój skrypt skryptowy rozpocznie się w tych granicach.Odpowiedzi:
Zabójca (Java 1.7)
Próbuje zabijać wrogów, gdy tylko jest to możliwe, w przeciwnym razie przesuwa się o jedno pole. Jest całkiem dobry w znajdowaniu drogi do wroga, ale nie robi nic, aby ukryć się przed innymi botami.
źródło
Avoider v3
Prosty bot. Boi się innych robotów i pułapek. Nie zaatakuje. Ignoruje plik statystyk i wcale nie myśli w przyszłość.
Jest to głównie test sprawdzający, jak działają reguły, i głupi przeciwnik dla innych konkurentów.
Edycja: Teraz przejdzie, gdy żaden ruch nie jest lepszy.
Edycja2: Roboty mogą mieć postać „1234” zamiast „123”
Kod Python:
źródło
elif ch in '123':
Chcesz poszukać co najmniej 1234. Jeśli masz bota 3, lista przeciwników wynosiłaby 124.BestOpportunityBot
Skończyło się to trochę dłużej, niż zamierzałem ... i nie jestem pewien, czy całkowicie rozumiem zasady dotyczące zwrotów, więc zobaczymy, jak to działa.
źródło
Muszę skończyć jeść
Pyton:
źródło
import sys
?