In dieser Herausforderung erstellen Sie eine Gemeinschaft mit dem Ziel, alle anderen Gemeinschaften im Kampf zu besiegen.
Ein Fellowship (Team) besteht aus 3 Charakteren . Jeder Charakter bewegt sich unabhängig vom Rest seines Teams, aber er muss zusammenarbeiten, wenn er gegen seinen Feind kämpft. Die Teams stehen sich rotierend gegenüber. Siege sind 3 Punkte wert, Unentschieden 1 Punkt und Verluste 0 Punkte.
Charaktere haben Fähigkeiten. Die Auswahl der Fähigkeiten Ihrer Charaktere ist einer der wichtigsten (und unterhaltsamsten) Aspekte dieser KotH . Sie sind alle stark und haben das Potenzial, Ihren Feind auszulöschen.
Charaktere haben Lebenspunkte (HP) und wenn ihre HP 0 erreichen (oder unterschreiten), sterben sie . Wenn alle Charaktere in der gegnerischen Mannschaft sterben, haben Sie gewonnen!
Charaktere haben Mana. Die meisten Aktionen erfordern Mana , und wenn Sie nicht genug haben, steht Ihnen diese Aktion nicht zur Verfügung.
Charaktere haben eine Turn-Verzögerung . Dies bestimmt die Anzahl der Ticks zwischen jeder Runde (beginnt bei 100). Weniger ist besser.
Charaktere haben Attribute . Jeder Charakter hat eine Basis von 5 in jedem Attribut und Sie erhalten 20 zusätzliche Attributpunkte zum Teilen. Nach dem Zuweisen von Attributpunkten wird Ihr primäres Attribut als höchstes Attribut festgelegt.
Verfügbare Attribute sind:
- Stärke: Gewährt 10 HP und 0,5 HP pro Spielzug
- Intelligenz: Gewährt 7 max. Mana und 0,1 Mana pro Spielzug
- Beweglichkeit: Reduziert die Abbiegeverzögerung um 1
Bewegung, Sicht und Reichweite
sind wie folgt (zentriert um die 0). Einige Bereiche sind kardinal , was bedeutet, dass sie nur direkt nach oben, links, rechts oder unten gehen können.
444
43334
4322234
432111234
432101234
432111234
4322234
43334
444
Charaktere haben eine Startvision von 2. Die Vision zwischen Spielern der gleichen Gemeinschaft wird geteilt.
Spielanleitung
Aufbau
Spieler werden ihre Gemeinschaft aufbauen. Sie müssen die folgenden Schritte ausführen :
Geben Sie jedem Charakter Attributpunkte . Jeder Charakter beginnt mit 5 in jeder Statistik, wobei weitere 20 auf die 3 verteilt werden.
Gib jedem Charakter Fähigkeiten . Jeder Charakter beginnt mit 4 Fähigkeitsfeldern, und Fähigkeiten nehmen standardmäßig 1 Feld ein. Einige Fähigkeiten sind wiederholbar und können einem Charakter mehrmals gegeben werden. Die Verwendung eines Fähigkeitssatzes eines anderen Beitrags ohne die Erlaubnis des Besitzers ist nicht gestattet.
Schreiben Sie Code für Ihre Bots. Der Code muss in Java sein und wird zum Kämpfen verwendet (der nächste Schritt)
Aktionen
Alle Charaktere beginnen mit den 3 Standardaktionen:
- Schritt : Bewegen Sie Ihren Charakter in einen Kardinalbereich von 1
- Slice : Greife einen Gegner für PrimaryAttribute in einem Kardinalbereich von 1 an
- Lächeln : Nichts tun
Wenn ein Charakter an der Reihe ist, muss er eine Aktion auswählen, die ausgeführt werden soll. Aktionen können Manakosten und eine Abklingzeit haben, die die Anzahl der Runden definiert, die Sie warten müssen, bevor Sie diese Aktion erneut ausführen.
Fähigkeiten
Jeder Charakter hat 4 Fähigkeitsfelder. Wenn eine Fähigkeit kursiv gedruckt ist, handelt es sich um eine Aktion.
Fähigkeiten
Name Beschreibung Mana Abklingzeit Mobilität Blink Umzug in ein Quadrat, Bereich 4 2 2 Swap Swap Standorte mit Ziel 5 5 Teleportation Bewegen überall 20 5 Strich Erhöhen Sie die Schrittweite um 1. Wiederholbar Mobile Step kann sich in jede der 8 Richtungen bewegen Angreifen Schneller Schnitt zweimal 3 0 Weben Schneiden Sie alle sichtbaren Feinde einmal 15 10 Absorbieren Jede Scheibe stiehlt 1 der primären Attribute Ihres Ziels. Hält 20 Runden Jede Scheibe spalten fügt benachbarten Gegnern 1/2 Schaden zu Kritisch Erhöht die Chance, dass 'Scheibe' 200% Schaden verursacht, um 30%. Wiederholbar Schlemmen Sie jede Scheibe, um Ihre HP um 3 zu erhöhen. Wiederholbar Flexible Can Slice in eine der 8 Richtungen Mana stehlen Slice stiehlt 2 Mana. Wiederholbar Reflexive Scheibe in Scheiben 0 3 Fernkampf Erhöht die Reichweite von Slice um 1 Streichen Jedes aufeinanderfolgende Stück auf demselben Ziel verursacht 3 Schadenspunkte mehr als das letzte Status Zerstreuen Entfernt alle Status von einem Ziel. Reichweite 2. 20 10 Duell Friert dich und dein Ziel ein, bis einer von dir stirbt. Reichweite 1 25 0 Ko Sie und das Ziel sind für die nächsten 1000 Ticks betäubt. 10 10 Meteor Alle Feinde sind für die nächsten 100 Ticks betäubt. 25 10 Leine Das Ziel ist für die nächsten 2 Runden eingefroren. 4 6 Gift vergiftet den Gegner für 1 HP für 5 Runden 5 0 Stille Das Ziel wird für 5 Runden zum Schweigen gebracht. 5 7 Langsam Das Ziel wird für die nächsten 3 Runden um 40 Ticks verlangsamt. 10 5 Betäubt Das Ziel wird für die nächsten 300 Ticks betäubt. 10 10 Kalt Alle anderen Zeichen innerhalb des Bereichs 2 werden um 10 Ticks verlangsamt Immun Es kann kein Status auf Sie angewendet werden Defensive Force Field Block nächsten 5 Schadensquellen. Nicht gestapelt 15 5 Geist Für eine Runde heilt jeder Schaden 10 10 Heilen Heilen Ziel für 20 HP 10 3 Wiederherstellen Alle Einheiten sind wieder in vollem Zustand 20 40 Schild Sie können erst in Ihrer nächsten Runde in Scheiben geschnitten werden 3 0 Ausweichchance von 25%, dass ein Slice Sie nicht trifft. Wiederholbar Pillar Only kann einmal pro Runde geschnitten werden Auferstehen Wenn Sie getötet wurden, werden Sie mit voller HP (und ohne Status) wieder lebendig. 0 40 Spikes Wenn Sie Schaden zugefügt haben, geben Sie die Hälfte des Schadens zurück Vision Mantel - Team wird unsichtbar für 5 Umdrehungen 20 20 Verstecken Sie sind unsichtbar für 5 Umdrehungen 4 7 Phase für 1 Umdrehung 0 3 unsichtbar Spur Ziel kann nicht unsichtbar gehen, und nimmt 10% mehr Schaden. Hält 10 Runden. 5 5 Die Sichtweite von Darkness Enemy wurde um 1 verringert. Sie kann jedoch nicht unter 1 fallen. Fernsicht Sichtweite um 2 erhöht. Wiederholbar Unsichtbar Sie sind unsichtbar, wenn Sie sich aus der Sicht des Feindes entfernen Wahre Sicht Enthüllt alle versteckten Einheiten in Reichweite 2 beim Start der Runde Beschädigung Entleeren Fügt dem Ziel 5 Schadenspunkte zu und heilt sich selbst um 5 HP, solange es sich in 1 Reichweite befindet. 10 5 Blitzschlag Fügt allen Gegnern 15 Schadenspunkte zu. 20 10 K / O Tötet das Ziel, wenn das Ziel unter 20% HP liegt. 20 0 Falle Platziert eine unsichtbare Falle. Die Falle fügt beim Betreten 15 Schadenspunkte zu. Stapel. 10 2 Zap Füge dem Ziel 30 Schaden zu. 5 Statisch Fügt allen Gegnern in 1 Reichweite pro Runde 5 Schadenspunkte zu. Wiederholbar Statistiken Werwolf Addiere 10 zu allen Statistiken für 5 Runden 30 25 Buff Verdopple deinen HP-Pool. Wiederholbar Kluge Aktionen haben eine um 20% kürzere Abklingzeit. Wiederholbar Konzentriert Erhöht Eure Manaregeration um Int / 10. Wiederholbar Regenerieren Erhöht Eure Regenerationsrate um Stärke / 2. Wiederholbar Intelligente Aktionen kosten 2 Mana weniger. Wiederholbar Stark Sie erhalten 10 Attributpunkte. Wiederholbar Schwach Sie verlieren 15 Attributpunkte. Du erhältst 2 Fähigkeits-Slots (dies nimmt einen von ihnen) Andere Bär Kann einen Bären beschwören, der jeweils 5 Punkte enthält. 8 10 Klon Klonen Sie sich. Nimmt zwei Fähigkeitsplätze ein. 100 100 Steal Ersetze diese Aktion durch die zuletzt verwendete Aktion des Gegners Target. Hält 10 Runden an 5 0 Mauer Erstelle eine unpassierbare Mauer auf einem leeren Zielfeld, Reichweite 6 10 10
Status:
- Durch Betäuben kann dein Charakter nur die Aktion „Lächeln“ ausführen und hält X Ticks an .
- Einfrieren verhindert, dass sich dein Charakter bewegt, und dauert X Runden.
- Die Stille verhindert, dass dein Charakter etwas anderes als Lächeln, Schritt oder Slice ausführt, und hält X Runden lang an.
- Gift beschädigt deinen Charakter für X Schaden für Y Runden. Wenn Sie ein anderes Gift anwenden, addiert sich der Schaden und die Dauer wird aktualisiert.
- Langsam erhöht die Anzahl der Ticks zwischen Ihren Zügen um X. Es wirkt sich nicht auf Ihre bevorstehende Runde aus, sondern erst danach.
- Unsichtbar macht es so, dass Sie von Ihrem Gegner nicht gesehen oder beschädigt werden können. Wenn Sie eine andere Aktion als "Schritt" oder "Lächeln" ausführen, wird diese entfernt. Wenn dein Gegner eine Fähigkeit hat, die ihm eine Vision von dir gibt, wird die Unsichtbarkeit entfernt.
Alle Status (mit Ausnahme von Poison) sind unabhängig voneinander.
Randnotizen:
- Wenn für das primäre Attribut ein Gleichstand besteht, wird es als STR> AGI> INT aufgelöst.
- Du spielst auf einem 10x10 Gitter. Die Mannschaften werden auf entgegengesetzte Seiten gestellt.
- Die Prozentsätze werden multiplikativ gestapelt, mit Ausnahme von Clever.
Einreichungsregeln
Sie müssen 2 Funktionen implementieren:
// Create *exactly* 3 Character templates. You must return the same templates every time
public List<CharacterTemplate> createCharacters();
// Choose an action for a character. If the action requires a target or location, it must be set.
public ReadonlyAction choose(Set<ReadonlyAction> actions, ReadonlyCharacter character);
Sie haben auch Zugriff auf drei Variablen (Mitgliedsvariablen):
Set<ReadonlyCharacter> team;
Set<EnemyCharacter> enemies;
Map<Point2D, EnemyCharacter> visibleEnemies;
Das ist es. Nachfolgend finden Sie eine vollständige API in alphabetischer Reihenfolge:
class Ability and ReadonlyAbility
int getNumSlots() returns the number of slots it takes up
boolean repeatable() returns true if the ability can be repeated
String name()
class Action and ReadonlyAction
Set<Point2D> availableLocations()
Set<ReadonlyCharacter> availableTargets()
boolean basicAction() returns true if the action is Smile, Step, or Slice
boolean breaksInvisibiliby()
int getCooldown() returns the cooldown cost (not the cooldown remaining)
int getManaCost()
String getName()
int getRemainingCooldown()
boolean isAvailable() returns true if the action can be performed
boolean movementAction() returns true if the action is prevented when Frozen
boolean needsLocation()
boolean needsTarget()
void setTarget(ReadonlyCharacter target)
void setLocation(Point2D location)
class CharacterTemplate
void addAbility(Ability)
boolean canAddAbility(Ability)
List<Ability> currentAbilities()
Map<Stat, Integer> currentAttributes()
int getRemainingPoints() returns the total number of ability points you have left to assign
int getRemainingSlots() returns the total number of slots you have to assign
int getStat(Stat stat)
boolean isValid() returns true if your character template is complete and valid
class Point2D
getX()
getY()
class Range
boolean isCardinal() returns true if the range only extends in the 4 cardinal directions
int getRange() returns the distance of the range
class ReadonlyCharacter and EnemyCharacter
Class characterClass()
int cleverness()
List<ReadonlyAbility> getAbilities()
Point2D getLocation() Not on EnemyCharacter
double getHealth()
double getMana()
int getMaxHealth()
int getMaxMana()
Range getSightRange()
Range getSliceRange()
int getStat(Stat stat)
Range getStepRange()
ReadonlyAction getLastAction()
boolean isFrozen()
boolean isStunned()
boolean isPoisoned()
int getPoisonAmount()
boolean isSilenced()
boolean isInvisible()
boolean isDead()
Stat primaryStat()
int smartness()
enum Stat
INT, STR, AGI
Das Obige sind alle Funktionen, die Sie möglicherweise für Ihre Einreichung benötigen könnten. Reflexion ist nicht erlaubt. Wenn eine Einsendung aus irgendeinem Grund ungültig ist, entfernen Sie sie bitte oder fügen Sie "Ungültig" in die Kopfzeile ein. Ihre Einreichung sollte keine Paketdeklaration enthalten. Ihre Einreichung sollte im ersten mehrzeiligen Codeblock enthalten sein, und die erste Zeile muss den Dateinamen haben.
So führen Sie das Projekt aus:
Es gibt verschiedene Möglichkeiten:
- Laden Sie die JAR-Datei herunter und führen Sie sie aus
java -jar Fellowship.jar
. Wenn Sie andere Beiträge herunterladen möchten, übergeben Sie-q 99744
.java
muss auf das JDK verweisen, nicht auf das JRE. - Klonen Sie das Git-Repo und führen Sie es aus
gradle run
. Sie müssen gradle installiert haben, und wenn Sie Argumente übergeben möchten, verwenden Sie-PappArgs="['arg1', 'args2']"
- Klonen Sie das Git Repo und kompilieren Sie es selbst. Sie werden die folgenden Bibliotheken müssen:
org.eclipse.collections:eclipse-collections-api:8.0.0
,org.eclipse.collections:eclipse-collections:8.0.0
,com.beust:jcommander:1.48
,com.google.code.gson:gson:2.7
,org.jsoup:jsoup:1.9.2
Wenn Sie klonen, müssen Sie das --recursive
Flag verwenden und beim Abrufen von Aktualisierungen Folgendes einschließen:--recurse-submodules
In einem der oben genannten Fälle muss Ihre Klasse in den submissions/java
Ordner verschoben werden. Wenn Sie gradle verwenden oder selbst kompilieren, können Sie die Klasse in das Projekt selbst einfügen. Sie müssen einige Zeilen in der Hauptfunktion auskommentieren und aktualisieren, um auf Ihre Klasse zu verweisen.
Anzeigetafel:
+------+-------------------+-------+
| Rank | Name | Score |
+------+-------------------+-------+
| 1 | TheWalkingDead | 738.0 |
| 2 | RogueSquad | 686.0 |
| 3 | Spiky | 641.0 |
| 4 | Invulnerables | 609.0 |
| 5 | Noob | 581.0 |
| 6 | Railbender | 561.0 |
| 7 | Vampire | 524.0 |
| 8 | LongSword | 508.0 |
| 9 | SniperSquad | 456.0 |
| 10 | BearCavalry | 430.0 |
| 11 | StaticCloud | 429.0 |
| 12 | PlayerWerewolf | 388.0 |
| 13 | LongSwordv2 | 347.0 |
| 14 | Derailer | 304.0 |
| 15 | Sorcerer | 266.0 |
| 16 | CowardlySniperMk2 | 262.0 |
| 17 | TemplatePlayer | 59.0 |
+------+-------------------+-------+
Wenn Sie Fragen haben oder Hilfe benötigen, kommentieren Sie unten oder treten Sie dem Chatraum bei ! Viel Glück und hab Spaß
Deal 15 damage to all enemies
, aber unsichtbare Feinde sind vom Blitz nicht betroffen. Ist das ein Bug? Ansonsten scheint mir die Unsichtbarkeit ziemlich stark zu sein ...