Dans ce défi, vous allez créer une fraternité dans le but de vaincre toutes les autres fraternités au combat.
Une fraternité (équipe) est composée de 3 personnages . Chaque personnage se déplace indépendamment du reste de son équipe, mais ils devront travailler ensemble pour combattre leurs ennemis. Les équipes se feront face de manière tournante. Les victoires valent 3 points, les matchs nuls, 1 point et les défaites, 0 point.
Les personnages ont des capacités. Le choix des capacités de vos personnages est l’une des parties les plus cruciales (et amusantes) de ce KotH . Ils sont tous forts et ont le potentiel d’éliminer votre ennemi.
Les personnages ont des points de vie (PV), et quand ils atteignent (ou vont en dessous) à 0, ils meurent . Si tous les personnages de l'équipe de votre adversaire meurent, vous gagnez!
Les personnages ont du mana. La plupart des actions nécessitent l'exécution de Mana , et si vous n'en avez pas assez, cette action n'est pas disponible.
Les personnages ont un délai de rotation . Ceci détermine le nombre de ticks entre chaque tour (commence à 100). Plus c'est bas, mieux c'est.
Les personnages ont des attributs . Chaque caractère a une base de 5 dans chaque attribut, et vous avez 20 points d'attribut supplémentaires à diviser. Après avoir attribué des points d'attribut, votre attribut principal est défini comme votre attribut le plus élevé.
Les attributs disponibles sont:
- Force: Donne 10 CV maximum et 0,5 CV par tour
- Intelligence: Donne 7 mana maximum et 0,1 mana par tour
- Agilité: Réduit le délai de virage de 1
Mouvement, vision,
gammes sont les suivantes (centré autour du 0). Certaines plages sont cardinales , ce qui signifie qu'elles ne peuvent aller directement que vers le haut, la gauche, la droite ou le bas.
444
43334
4322234
432111234
432101234
432111234
4322234
43334
444
Les personnages ont une vision de départ de 2. La vision entre les joueurs d'une même communauté est partagée.
Comment jouer
Construction
Les joueurs construiront leur communauté. Vous devez suivre les étapes suivantes :
Donnez à chaque caractère des points d'attributs . Chaque personnage commence par 5 dans chaque statistique, avec 20 supplémentaires à répartir entre les 3.
Donnez des capacités à chaque personnage . Chaque personnage commence avec 4 emplacements de capacité, et les capacités prennent 1 emplacement par défaut. Certaines capacités sont répétables et peuvent être attribuées à un personnage plusieurs fois. L'utilisation d'un ensemble de capacités d'une autre soumission sans l'autorisation du propriétaire n'est pas autorisée.
Ecrivez du code pour vos robots. Le code doit être en Java et sera utilisé pour le combat (la prochaine étape)
actes
Tous les personnages commencent par les 3 actions standard:
- Étape : déplacez votre personnage dans une plage cardinale de 1
- Slice : Attaque un ennemi pour PrimaryAttribute dans une gamme cardinale de 1
- Sourire : ne rien faire
Au tour des personnages, il faut alors choisir une action à effectuer. Les actions peuvent avoir un coût en mana et un temps de recharge, ce qui définit le nombre de tours que vous devez attendre avant d'effectuer cette action à nouveau.
Capacités
Chaque personnage dispose de 4 emplacements de capacité. Si une capacité est en italique, c'est une action.
Les capacités
Nom Description Mana Cooldown Mobility Blink Déplacer vers un carré, plage 4 2 2 Swap emplacements Swap avec cible 5 5 Téléportation se déplacer partout 20 5 Tiret Augmenter la plage de pas par 1. Répétable Mobile Step peut se déplacer dans l'une des 8 directions Attaquant Couper rapidement deux fois 3 0 Tisser tous les ennemis visibles en tranches une fois 15 10 Absorber chaque tranche vole 1 des attributs principaux de votre cible. Dure 20 tours Couper chaque tranche inflige 1/2 points de dégâts aux ennemis adjacents. Critital Ajoute 30% de chance à Slice d'infliger 200% de dégâts. Répétable Régalez-vous chaque tranche augmente vos HP de 3. Répétable Tranchée flexible dans l'une des 8 directions Vol de mana Slice vole 2 mana. Répétable Tranche réflexive tranchée 0 3 Ranged Ajoute 1 à la gamme de Slice Balayage Chaque tranche consécutive sur la même cible inflige 3 dégâts supplémentaires par rapport à la dernière. Les statuts Dissiper Supprime tous les statuts d'une cible. Portée 2. 20 10 Duel Vous bloque, vous et votre cible, jusqu'à la mort de l'un de vous. Portée 1 25 0 KO Vous et votre cible êtes assommés pour les 1000 prochains ticks 10 10 Météore Tous les ennemis sont assommés pour les 100 prochains ticks 25 10 Laisse La cible est gelée pour leurs 2 prochains tours 4 6 Poison Empoisonne l'ennemi pour 1 PV à 5 tours 5 0 silence Target est réduit au silence pendant 5 tours 5 7 lente est ralentie par la cible 40 tiques pour les 3 tours suivants 10 5 Stun cible est assommé pour la prochaine 300 10 10 tiques Froid Tous les autres personnages dans les 2 limites sont ralentis de 10 ticks Immunitaire Aucun statut ne peut vous être appliqué Défensive Force Field Block 5 prochaines sources de dégâts. N'empile pas 15 5 Ghost Pour un tour, tous les dégâts sont soignés 10 10 points de vie Soins de cible-cible de 20 PV 10 3 Restaurer toutes les unités sont restaurées à leur pleine santé 20 40 Bouclier Vous ne pourrez plus être tranché avant votre prochain tour 3 0 Evasif 25% de chance pour une tranche de ne pas vous toucher. Répétable Pilier seul peut être tranché une fois par tour Ressusciter Une fois tué, revenez à la vie avec des PV complets (et aucun statut) 0 40 Pointes Lorsque les dégâts sont infligés, inflige la moitié des dégâts en retour Vision Cloak Team devient invisible pendant 5 tours 20 20 Cacher Vous êtes invisible pendant 5 tours 4 7 Phase Devenez invisible pendant 1 tour 0 3 Piste La cible ne peut pas devenir invisible et inflige 10% de dégâts supplémentaires. Dure 10 tours. 5 5 Ténèbres La portée de vision ennemie a été réduite de 1. Piles, mais ne peut pas descendre en dessous de 1. Loin de la vue Distance de la vue augmentée de 2. Répétable Invisible Vous êtes invisible si vous démarrez votre vision ennemie La vraie vue révèle toutes les unités cachées dans la plage 2 au début du tour Dommage Drain Inflige 5 points de dégâts à la cible et soigne 5 points de vie tout en restant dans une zone. 10 5 Éclair inflige 15 points de dégâts à tous les ennemis 20 10 K / O Tue la cible si la cible est inférieure à 20%. HP 20 0 Piège Placez un piège invisible. Le piège inflige 15 points de dégâts quand on marche dessus. Des piles. 10 2 Zap Deal 30 dégâts à la cible 30 5 Statique Inflige 5 points de dégâts à chaque tour à tous les ennemis dans un rayon de 1. Répétable Statistiques Loup-garou Ajoutez 10 à toutes les statistiques pour 5 tours 30 25 Buff Doublez votre piscine HP. Répétable Les actions intelligentes ont un temps de recharge plus court de 20%. Répétable Focalisé Augmente votre taux de régression Mana de Int / 10. Répétable Régénérer Augmente votre taux de régénération de Force / 2. Répétable Les actions intelligentes coûtent 2 points de mana de moins. Répétable Fort Vous gagnez 10 points d'attribut. Répétable Faible Vous perdez 15 points d'attribut. Vous gagnez 2 emplacements de compétences (cela en prend un) Autre L'ours peut appeler un ours qui a 5 dans chaque stat 8 10 Clone Clone toi-même. Prend deux emplacements de capacité. 100 100 Steal Remplace cette action par la dernière action ennemie Cible utilisée. Dure 10 tours 5 0 Mur Crée un mur impassible sur une case vide ciblée, plage 6 10 10
États:
- Stun permet à votre personnage d' effectuer uniquement l'action Smile et dure X ticks .
- Le gel empêche votre personnage de bouger et dure X tours.
- Le silence empêche votre personnage de faire autre chose que sourire, step ou slice, et dure X tours.
- Le poison inflige des dégâts X à votre personnage pendant les tours Y. Si vous appliquez un autre poison, les dégâts s’additionnent et la durée est régénérée.
- Slow ajoute X au nombre de ticks entre vos tours. Cela n'affecte pas votre prochain tour, mais seulement après.
- Invisible fait en sorte que vous ne puissiez pas être vu ou endommagé par votre adversaire. Si vous effectuez une action autre que Step ou Smile, elle est supprimée. Si votre adversaire a une capacité qui lui donne une vision de vous, l'invisibilité est supprimée.
Tous les statuts (à l'exception de Poison) agissent indépendamment l'un de l'autre.
Notes de côté:
- S'il existe une égalité pour l'attribut primaire, il est résolu en tant que STR> AGI> INT.
- Vous jouez sur une grille 10x10. Les équipes seront placées des côtés opposés.
- Les pourcentages se cumulent, sauf pour Clever.
Règles de soumission
Vous devez implémenter 2 fonctions:
// 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);
Vous aurez également accès à trois variables (variables membres):
Set<ReadonlyCharacter> team;
Set<EnemyCharacter> enemies;
Map<Point2D, EnemyCharacter> visibleEnemies;
C'est ça. Vous trouverez ci-dessous une API complète, par ordre alphabétique:
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
Ce qui précède représente toutes les fonctions dont vous pourriez avoir besoin pour votre soumission. La réflexion n'est pas autorisée. Si une soumission est invalide pour quelque raison que ce soit, veuillez la supprimer ou ajouter "Non valide" à l'en-tête. Votre soumission ne devrait pas avoir de déclaration de paquet. Votre soumission doit être contenue dans le premier bloc de code multiligne et la première ligne doit avoir le nom du fichier.
Comment exécuter le projet:
Il y a plusieurs façons:
- Téléchargez le fichier JAR et exécutez-le
java -jar Fellowship.jar
. Si vous voulez télécharger d'autres soumissions, passez-q 99744
.java
doit pointer vers le JDK, pas le JRE. - Cloner le repo git et lancer
gradle run
. Vous devez avoir installé gradle et si vous voulez passer des arguments, utilisez-PappArgs="['arg1', 'args2']"
- Clonez le repo git et compilez-le vous-même. Vous aurez besoin des bibliothèques suivantes:
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
Si vous clonez, vous devez utiliser l' --recursive
indicateur et, lorsque vous extrayez les mises à jour, inclure--recurse-submodules
Pour tout ce qui précède, votre classe doit être placée dans le submissions/java
dossier. Si vous utilisez gradle ou si vous le compilez vous-même, vous pouvez placer la classe dans le projet lui-même. Vous devrez supprimer certaines lignes dans la fonction principale et les mettre à jour pour qu'elles pointent vers votre classe.
Tableau de bord:
+------+-------------------+-------+
| 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 |
+------+-------------------+-------+
Si vous avez des questions ou avez besoin d’aide, commentez ci-dessous ou rejoignez la salle de discussion ! Bonne chance et amusez-vous bien
Deal 15 damage to all enemies
, mais les ennemis invisibles ne sont pas affectés par la foudre. Est-ce un bug? Sinon, l'invisibilité me semble assez forte ...