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.javadoit 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' --recursiveindicateur 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/javadossier. 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 ...