Twój uprzejmy sąsiad, Doktor Tree, właśnie dał ci trzy magiczne stworzenia zwane Codémon. W pobliskim mieście Colorville odbywa się turniej bitewny. Czy jesteś najlepszy, jak nikt przedtem?
Przegląd
To jest turniej bitewny. Każdy gracz kontroluje zespół trzech potworów, a jego celem jest znokautowanie (zabicie) drugiej drużyny. Jest 100 rund, a punkty są przyznawane za wygrane i remisy. Drużyna z największą liczbą punktów wygrywa!
Potwory
Codémon to skomplikowane małe stworzenie. Do wyboru jest pięć rodzajów (elementów), trzy statystyki i trzy miejsca na ruch.
Rodzaje
Do każdego Codémon przypisany jest jeden typ. Pięć typów to Normalny, Wróżki, Ogień, Woda i Trawa. Każdy ma swoje mocne i słabe strony. Obrażenia są oparte na poniższej tabeli:
Liczby są mnożnikami obrażeń. Na przykład Woda atakująca Ogień ma modyfikator 0,5 (połowa obrażeń), natomiast Trawa atakująca Ogień jest podwojona (2).
Statystyki
Każdy potwór ma trzy statystyki, które określają jego zdolności bojowe. Atak podnosi obrażenia, które wyrządza. Obrona obniża otrzymywane obrażenia. Prędkość pozwala mu poruszać się przed tymi o niższej prędkości.
Każdy potwór ma wartość początkową 50 dla każdej statystyki i maksymalnie 100. Podczas tworzenia potworów będziesz w stanie przypisać 80 dodatkowych punktów statystyk (każdy). Pamiętaj, że żadna indywidualna statystyka nie może przekroczyć 100. Tak więc możesz mieć dystrybucję 100/80/50, 90/80/60 lub 65/65/100, ale 120/50/60 jest nielegalne. Każda drużyna z nielegalnymi statystykami jest zdyskwalifikowana. Nie są wymagane , aby korzystać z wszystkich 80 punktów, ale prawdopodobnie nie powinien iść z minimalną 50/50/50.
Możesz również uznać HP za statystykę, ale każdy Codémon ma niemodyfikowalne 100 HP. Kiedy HP spadnie do zera, nie mogą kontynuować walki. Punkty życia są uzupełniane do 100 przed każdą bitwą.
Rusza się
Każdy potwór zna trzy ruchy bojowe. Wszystkie trzy wybrane muszą być odrębne, aby nie było opcji Punch / Punch / Punch.
Istnieje 15 ruchów, po trzy z każdego rodzaju. Każdy typ ma atak bezpośredni, słabszy atak z efektem i ruch pojedynczego efektu.
id name type power uses usable effect
0 Punch N 20 - NFWG
1 Heal N 0 3 NFWG Heals 50 HP
2 Slow N 10 5 NFWG Enemy speed x0.8
3 Pain P 20 - PFWG
4 Sleep P 0 3 PFWG No enemy action until wake
5 Weaken P 10 5 PFWG Enemy Atk x0.8
6 Fireball F 20 - NPFW
7 Burn F 0 3 NPFW Enemy -10 HP each turn
8 Sharpen F 10 5 NPFW Own Atk x1.25
9 Watergun W 20 - NPWG
10 Confuse W 0 3 NPWG Enemy may strike itself (10 power)
11 Shield W 10 5 NPWG Own Def x1.25
12 Vine G 20 - NPFG
13 Poison G 0 3 NPFG Enemy -5xTurns HP each turn
14 Sap G 10 5 NPFG Enemy Def x0.8
type
odnosi się do rodzaju ruchu. power
jest jego uderzająca moc. uses
wskazuje, ile razy można go użyć w bitwie ( -
jest nieograniczony). usable
pokazuje, jakich typów może używać (na przykład Puncha nie można podać typowi Psychicznemu, ponieważ nie ma go P
). effect
pokazuje, jakie efekty mają ruchy. Istnieje 75% szans na zadziałanie każdego efektu, z wyjątkiem Leczenia, które zawsze działa.
W przypadku efektów, które zmieniają statystyki potwora, efekty można nakładać . Na przykład dwukrotne użycie Osłabienia może obniżyć atak przeciwnika do skuteczności 0,64. Efekty, które nie zmieniają statystyk potwora (Sleep, Burn, itp.) Nie nakładają się .
Sen usypia przeciwnika, z 60% szansą na przebudzenie na początku każdej tury. Śpiące potwory nie podejmą żadnych działań.
Podpalenie zadaje przeciwnikowi 10 punktów życia na koniec każdej tury, gdy jest aktywny . Trucizna działa podobnie, ale z każdą turą wzrasta jej ilość. W pierwszej turze jest 5, a następnie zyskuje 5 w każdej turze. Tak więc, do czwartej tury, będzie to zadawać obrażenia za 20. Są to obrażenia płaskie, nie zależne od typu potwora ani nie podlegające bonusom.
Zamieszanie może spowodować sam atak potwora zamiast wykonania tego, co mu nakazano. Ten atak ma moc 10 i ma 30% szansy na wystąpienie w danej turze.
Żeby było jasne, efekty trwają do końca bitwy (oprócz Sen, jak wspomniano powyżej).
Ruchy również otrzymują 20% wzmocnienia mocy, jeśli są używane przez potwora odpowiedniego typu. Na przykład, Trawiasty potwór korzystający z Winorośli zostaje wzmocniony, podczas gdy nie używa Puncha.
Tajne statystyki
Statystyki i typ (ale nie ruchy) każdego potwora to wiedza publiczna. Twoi przeciwnicy będą mogli zobaczyć, z czym walczą, aby wybrać najlepszą akcję. Dostępne są jednak również ukryte bonusy.
W szczególności po każdych dwóch bitwach otrzymasz jeden „bonusowy” punkt statystyczny za każdego potwora w twojej drużynie. Punkty przyznawane są wszystkim potworom, martwym lub żywym, zwycięzcy lub przegranemu. Możesz przypisać to do dowolnej z trzech wybranych statystyk. Nie możesz kłaść ich na jednym potworze; każdy potwór dostaje jeden za każdym razem. Punkty te są odporne na limit 100. Ponieważ będzie 100 rund bitewnych, oznacza to, że możesz zdobyć jedną statystykę do 149, jeśli przydzielisz jej wszystkie swoje bonusy. Ponownie przeciwnik zobaczy tylko twoje „podstawowe” statystyki, więc im dalej w turnieju jesteś, tym bardziej ich wiedza odbiega od prawdy.
Bitwa
Bitwa rozgrywa się pomiędzy trzyosobowymi drużynami, z jedną aktywną dla każdej drużyny na raz. Na początku zostanie wyświetlona drużyna przeciwnika i zostaniesz poproszony o wybranie potwora, który będzie Twoim pierwszym „aktywnym” graczem.
Następnie następują tury, wykonując następujące czynności:
- Przełącznik: obowiązkowe przełączniki potworów mają miejsce (jeśli występują)
- Wybierz akcję bitewną
- Przełącznik: mają miejsce dowolne opcjonalne przełączniki potworów (wybrane jako akcja bitwy)
- Sleep Check: szansa na przebudzenie ze snu
- Atak 1: Jeśli to możliwe, szybszy potwór wykorzystuje wybrany ruch
- Atak 2: Jeśli to możliwe, drugi potwór wykorzystuje wybrany ruch
- Obrażenia od efektów: Zadaj obrażenia od oparzeń / trucizny żywym potworom
„Szybszy” oznacza potwora o większej prędkości. Jeśli obie statystyki prędkości są takie same, PRNG wybiera rzut monetą w każdej turze.
Pod koniec każdej tury, w której umiera Twój aktywny potwór, zostaniesz poproszony o wybranie nowego aktywnego. Możesz również zmienić aktywne potwory jako ruch na każdą turę (pod warunkiem, że masz więcej niż jednego żywego). Ponownie, jeśli zmienisz swój ruch, nie wykonasz ruchu bitewnego w tej turze.
Potwory nie są „przetwarzane”, gdy są nieaktywne. Oznacza to, że nie przyjmują obrażeń od poparzeń / trucizn, liczniki trucizn nie kumulują się, nie budzą się ze snu itp. Podczas przełączania nie są usuwane ani zmieniane żadne efekty . To nie jest inna gra z potworami. Jeśli wyłączysz się z podniesionym i spalonym atakiem, nadal będą tam, gdy wrócisz.
Obrażenia efektowe mają miejsce niezależnie od tego, czy zabijesz aktywnego przeciwnika, czy nie. W ten sposób członkowie obu drużyn mogą umrzeć w jednej turze.
Kiedy jednej drużynie zabraknie przydatnych potworów, przegrywają. Jeśli obie drużyny kończą się w tej samej turze, to remis. Jeśli bitwa trwa 1000 tur, to remis.
Formuła określająca uszkodzenie jest następująca:
floor((effAttack / effDefense) * movePower * typeMultiplier * moveBoost)
effAttack
i effDefense
są skutecznymi statystykami dla potworów. Skuteczny atak uzyskuje się poprzez dodanie Ataku i Ataku bonusowego, a następnie pomnożenie (o 0,8 lub 1,25), jeśli jakikolwiek efekt go zmieni. Pamiętaj, że te efekty mogą się nakładać.
Obrażenia mogą wynosić 0, gdy modyfikatorem typu jest 0 (Normalna <--> Wróżka) lub Moc ruchu wynosi 0 (Leczenie, Podpalenie itp.). W przeciwnym razie minimum jest egzekwowane na poziomie 1.
Zawody
Turnieje trwają 100 rund. W każdej rundzie drużyny są losowo tasowane i łączone ze sobą. Jeśli jest nieparzysta liczba drużyn, reszta otrzymuje pa (wyniki jako remis). Zwycięstwo w bitwie daje drużynie 2 punkty, remisy są warte 1 i nic nie tracą. Zespół z największą liczbą punktów na koniec wygrywa!
Jeśli drużyny są remisowane, odbędzie się turniej z drużynami remisowanymi na pierwszym miejscu w celu ustalenia kolejności remisów.
Protokół
Kontroler wyśle programowi jedno z czterech poleceń. Pierwszy znak określa typ polecenia, w razie potrzeby następujące dane.
Twój program zaakceptuje polecenie jako argument i odpowie na STDOUT w ciągu jednej sekundy . Nie żyj słuchając STDIN, nie będzie go tam. Każde polecenie spowoduje pojawienie się nowego procesu.
Możesz zapisać dane / stan na dysku. Umieść dowolne pliki w podfolderze o tej samej nazwie co Twój zespół. Nie zapisuj więcej niż 32 kilobajtów danych, w przeciwnym razie zostaniesz zdyskwalifikowany. Dane będą się utrzymywać między rundami, ale będą usuwane między turniejami.
Polecenia
Dane zespołu
To jest wysyłane raz na początku turnieju, aby zarejestrować swoją drużynę. Twoja odpowiedź powinna być stała , nie różna dla każdego turnieju.
Pytanie:
T
Odpowiedź; reakcja; reagowanie; odzew; oddźwięk:
name|member0|member1|member2
name
to ciąg z nazwą twojego zespołu. Proszę używać tylko alfanumerycznych, dla ułatwienia parsowania. memberN
to ciąg członkowski, podający szczegóły każdego potwora:
Ciąg członka:
name:typeid:attack:defense:speed:moveid0:moveid1:moveid2
Znów „imię” to ciąg znaków, tym razem z imieniem tego potwora. typeid
jest tego typu. Identyfikatory typów są w kolejności pokazanej na powyższej tabeli, przy Normalnej = 0 i Trawie = 4.
Następne trzy pola to twoje podstawowe statystyki. Pamiętaj o limitach opisanych w sekcji statystyk powyżej.
Ostatnie trzy to ruchy twojego potwora. Identyfikatory pokazano na powyższym wykresie ruchów.
Przykładowa odpowiedź danych zespołu może wyglądać następująco:
DummyTeam|DummyA:0:50:60:70:0:1:2|DummyB:0:50:60:70:0:1:2|DummyC:0:50:60:70:0:1:2
Każdy zespół, który odeśle tu śmieci, źle sformatowane lub nielegalne dane, nie weźmie udziału, dopóki nie zostanie naprawiony.
Wybierz Aktywny
Jest to wysyłane na początku każdej bitwy, a gdy potwór umiera i musi zostać zmieniony.
Pytanie:
C#battleState
battleState
pokazuje stan bieżącej bitwy. Miejcie mnie tutaj, jest brzydka:
yourTeamState#theirTeamState
Gdzie XteamState
wygląda:
name:activeSlot|member0state|member1state|member2state
activeSlot
pokazuje, który potwór jest aktualnie aktywny (0-2). Państwa członkowskie mają dwa smaki. Jeśli to twój zespół, daje dodatkowe informacje. Więc,
Twój członek
name:id:attack:defense:speed:hp:typeid:poisonedturns:moveCount0:moveCount1:moveCount2:bonusAttack:bonusDefense:bonusSpeed:effectid:effectid:effectid
Ich członek Xstate:
name:id:attack:defense:speed:hp:typeid:poisonedturns:effectid:effectid:effectid
id
to po prostu identyfikator liczb całkowitych, którego możesz użyć do śledzenia potworów, jeśli nie lubisz ich używać name
.
attack:defense:speed
są twoje podstawowe statystyki.
poisonedturns
mówi ci, ile razy zostałeś otruty.
moveCountX
informuje o liczbie pozostałych zastosowań dla każdego ruchu. Jeśli 0, nie można go użyć. W przypadku nieograniczonej liczby ruchów będzie to ujemne.
bonus(stat)
to ilość punktów bonusowych przypisanych do każdej statystyki.
effectid
jest zmienną wielkością listą efektów, które zostały zastosowane do twojego potwora. Nie będzie nie być wleczone :
na ciąg, czy istnieją aktywne efekty czy nie. Jeśli są ułożone efekty, pojawią się one jako wiele efektów na liście.
Identyfikatory efektów to:
0 NONE (should not appear, internal use)
1 POISON
2 CONFUSION
3 BURN
4 SLEEP
5 HEAL (should not appear, internal use)
6 ATTACK_UP
7 ATTACK_DOWN
8 DEFENSE_UP
9 DEFENSE_DOWN
10 SPEED_DOWN
Odpowiedź; reakcja; reagowanie; odzew; oddźwięk:
memberSlot
Jedyną wymaganą odpowiedzią jest pojedyncza liczba 0,1,2, która mówi, który członek ma być aktywny. To musi być członek, który jest w stanie walczyć. Nie odeślij, 1
jeśli członek 1 nie żyje.
Akcja bitwy
W każdej turze musisz zdecydować, co robić.
Pytanie:
A#battleState
battleState
Tutaj jest dokładnie tak, jak to opisano powyżej.
Odpowiedź; reakcja; reagowanie; odzew; oddźwięk:
Aby użyć ruchu, odeślij miejsce, w którym się znajduje. Na przykład, jeśli przypisałem Punch do slotu 0, wysyłanie 0
wykonuje Punch.
Aby przełączyć się na innego członka, wyślij slot członka plus dziesięć . Aby przejść do członka 2, wyślij 12
.
Wszystko, czego nie ma w [0,1,2,10,11,12], jest uważane za nieprawidłowe i nie spowoduje podjęcia żadnych działań w tej turze.
Statystyki bonusowe
Po każdych dwóch bitwach otrzymujesz tajny punkt bonusowy dla każdego członka drużyny.
Pytanie:
B#yourTeamState
Stan twojego zespołu jest taki sam, jak pokazano powyżej, nie każ mi tego powtarzać.
Odpowiedź; reakcja; reagowanie; odzew; oddźwięk:
stat0:stat1:stat2
Twoja odpowiedź będzie reprezentować, jakie statystyki zwiększyć dla każdego członka zespołu. Atak wynosi 0, obrona wynosi 1, prędkość wynosi 2.
Aby zwiększyć prędkość członka, atak drugiego członka i obronę trzeciego członka, odpowiedziałbyś:
2:0:1
Kontroler
Kontroler można znaleźć na BitBucket: https: //Geobits@bitbucket.org/Geobits/codemon.git
Po prostu wrzuć wszystkie skompilowane pliki klas, zgłoszenia i players.conf do folderu i uruchom.
Nazywana jest główna klasa kontrolera Tournament
. Zastosowanie to:
java Tournament [LOG_LEVEL]
Poziomy dziennika od 0-4 dają coraz więcej informacji. Poziom 0 prowadzi turniej po cichu i po prostu daje wyniki, a poziom 3 daje szczegółowe komentarze. Poziom 4 to wyjście debugowania.
Możesz dodać zgłoszenia do turnieju w players.conf
Wystarczy dodać ciąg wiersza poleceń potrzebny do uruchomienia programu, po jednym w wierszu. Linie zaczynające się od #
są komentarzami.
W swoim poście dołącz polecenie, które będę musiał dodać do mojego players.conf
, oraz wszelkie kroki kompilacji (jeśli są wymagane).
Uwzględniono drużynę-manekina złożoną ze wszystkich członków Normalnych z trzema ruchami Normalnymi. Wybierają ruchy losowo i mają okropne statystyki. Baw się dobrze, pokonując ich.
Różne zasady
Nie możesz czytać ani pisać do żadnych zasobów zewnętrznych (z wyjątkiem własnego podfolderu, do 32 kB, jak wspomniano powyżej).
Twoja drużyna musi wejść do turnieju „w ciemno”. Oznacza to, że nie możesz analizować źródła innych osób, aby dowiedzieć się, co konkretna drużyna / potwór zrobi w danej sytuacji. Państwo może analizować ruchy przeciwnika / statystyk i śledzić w miarę trwania turnieju, ale nie sztywno tę informację.
Nie ingeruj w inne procesy / zgłoszenia. Bez przywoływania ich, używania refleksji, aby uzyskać dostęp do danych itp. Nie zadzieraj z moim komputerem. Po prostu nie próbuj tego. To zależy ode mnie. Osoby naruszające prawo mogą zostać wykluczone z przyszłego wejścia.
Uczestnicy są ograniczeni do maksymalnie dwóch zgłoszeń. Jeśli prześlesz więcej, zdobędę tylko dwa pierwsze przesłane. Jeśli chcesz je odwołać, usuń je.
Wpisy mogą nie istnieć wyłącznie w celu wspierania innych wpisów. Nie możesz też próbować pośrednio dyskwalifikować innych zawodników (na przykład, używając nazwy drużyny 27M dla graczy DQ, którzy próbują zapisać to na dysk). Każde zgłoszenie powinno być odtwarzane, aby wygrać na własną korzyść.
Twój program może odradzać maksymalnie jeden proces potomny na raz (całkowita liczba potomków, a nie bezpośredni). Zarówno główny, jak i dowolny proces potomny muszą zostać zakończone bezpośrednio po podaniu danych wyjściowych. Tak czy inaczej, upewnij się, że nie przekroczysz limitu czasu.
Turniej odbędzie się na moim komputerze z systemem Ubuntu z procesorem Intel i7 3770K.
Wyniki
To są wyniki obecnych graczy. Pomiędzy najlepszymi rywalami jest bardzo blisko, a ja myślę o zwiększeniu liczby rund do 500 (i dostosowaniu odstępu punktów bonusowych do dopasowania). Jakieś zastrzeżenia, komentarze?
------- Final Results -------
158 Happy3Campers
157 LittleKid
71 InsideYourHead
68 HardenedTrio
46 BitterRivals
Pełne wyniki play-by-play na Dysku Google
bye
z nierówną liczbą zawodników i upewni się, że pary meczów są uczciwe i równomiernie rozłożone.
n^2
zamiast n
. Przy obecnych 7 zawodnikach i 100 rundach, to 2100 bitew (w porównaniu z obecnymi 300 i 1500 z 500 rundami). Jest coraz gorzej, gdy pojawia się więcej wpisów. Mógłbym zmniejszyć liczbę rund, ale waham się to zrobić ze względu na naturalną zmienność (w odniesieniu do statusów esp), a posiadanie wielokrotności 50 (dla punktów bonusowych) jest łatwiejsze.