Neste desafio, você criará uma Irmandade com o objetivo de derrotar todas as outras irmandades em batalha.
Uma bolsa (equipe) consiste em 3 caracteres . Cada personagem se move independentemente do resto de sua equipe, mas eles precisam trabalhar juntos ao combater seu inimigo. As equipes se enfrentam frente a frente de maneira rotativa. Os ganhos valem 3 pontos, os empates valem 1 ponto e as perdas valem 0 pontos.
Personagens têm habilidades. A escolha de quais habilidades seus personagens têm é uma das partes mais cruciais (e divertidas) deste KotH . Eles são todos fortes e têm o potencial de acabar com seu inimigo.
Os personagens têm Pontos de Vida (HP) e, quando o HP atinge (ou fica abaixo) 0, eles morrem . Se todos os personagens do time do seu oponente morrerem, você ganha!
Os personagens têm Mana. A maioria das ações exige que o Mana execute , e se você não tiver o suficiente, essa ação não estará disponível para você.
Os caracteres têm um atraso de turno . Isso determina o número de ticks entre cada turno (começa em 100). Menor é melhor.
Caracteres têm atributos . Cada personagem tem uma base de 5 em cada atributo, e você recebe 20 pontos de atributo adicionais para dividir. Depois de atribuir pontos de atributo, seu atributo principal é definido como seu atributo mais alto.
Os atributos disponíveis são:
- Força: Dá 10 HP máx. E 0,5 HP por turno
- Inteligência: Dá 7 Mana Max e .1 Mana por turno
- Agilidade: Reduz o atraso de turno em 1
Movimento, Visão, Intervalos de Gama
são os seguintes (centrados em torno do 0). Alguns intervalos são cardinais , o que significa que eles só podem ir diretamente para cima, esquerda, direita ou baixo.
444
43334
4322234
432111234
432101234
432111234
4322234
43334
444
Os personagens têm uma visão inicial de 2. A visão entre jogadores da mesma irmandade é compartilhada.
Como jogar
Construção
Os jogadores irão construir sua comunhão. Você precisa executar as seguintes etapas :
Dê a cada personagem pontos de atributo . Cada personagem começa com 5 em cada estatística, com 20 adicionais para distribuir entre os 3.
Dê habilidades a cada personagem . Cada personagem começa com 4 slots de habilidade, e as habilidades recebem 1 slot por padrão. Algumas habilidades são repetíveis e podem ser dadas a um personagem várias vezes. Não é permitido o uso de um conjunto de habilidades de outro envio sem a permissão do proprietário.
Escreva algum código para seus bots. O código deve estar em Java e será usado na batalha (a próxima etapa)
Ações
Todos os personagens começam com as 3 ações padrão:
- Etapa : mova seu personagem em um alcance cardinal de 1
- Fatia : Ataque um inimigo por PrimaryAttribute em um alcance cardinal de 1
- Sorriso : não faça nada
Por sua vez, os personagens devem escolher uma ação para executar. As ações podem ter um custo de Mana e um Tempo de Recarga, que define o número de turnos que você deve esperar antes de executar a ação novamente.
Habilidades
Todo personagem tem 4 slots de habilidade. Se uma habilidade está em itálico, é uma ação.
Habilidades
Nome Descrição Mana Cooldown Mobility Blink mover para um quadrado, faixa 4 2 2 Trocar locais da troca com Meta 5 5 Teleport passar em qualquer lugar 20 5 Traço Aumente o intervalo do passo em 1. Repetível O Mobile Step pode se mover em qualquer uma das 8 direções Atacante Quick Slice duas vezes 3 0 Weave Slice todos os inimigos visíveis uma vez 15 10 Absorver Cada fatia rouba 1 do atributo principal do seu alvo. Dura 20 turnos Cleave Each Slice causa 1/2 de dano aos inimigos adjacentes Crítico Adiciona 30% de chance de Fatia causar 200% de dano. Repetivel Festa Cada fatia aumenta seu HP em 3. Repetível Fatia de lata flexível em qualquer uma das 8 direções Roubo de mana Fatia rouba 2 de mana. Repetivel Fatia reflexiva quando cortada 0 3 Intervalo Adiciona 1 ao intervalo de Fatia Deslizar Cada fatia consecutiva no mesmo alvo causa 3 mais dano que o último Status Dissipar Remove todos os status de um destino. Alcance 2. 20 10 Duelo Congela você e seu alvo até que um de vocês morra. Alcance 1 25 0 Knockout Você e o alvo ficam atordoados pelos próximos 1000 tiques 10 10 Meteor Todos os inimigos ficam atordoados pelos próximos 100 tiques 25 10 Trela O alvo está congelado nos 2 turnos seguintes 4 6 Veneno envenenado pelo inimigo por 1 PV por 5 turnos 5 0 Silêncio O alvo é silenciado por 5 turnos 5 7 Lento O alvo é retardado em 40 tiques nos próximos 3 turnos 10 5 Atordoamento O alvo é atordoado nos próximos 300 tiques 10 10 Frio Todos os outros personagens dentro do intervalo ficam lentos em 10 tiques Imune Nenhum status pode ser aplicado a você Defensiva Force Field Block próximas 5 fontes de dano. Não acumula 15 5 Fantasmas Por um turno, todo o dano cura 10 10 Curar Cura Alvo para 20 PV 10 3 Restaurar Todas as unidades são restauradas de volta à saúde total 20 40 Escudo Você não pode ser cortado até o próximo turno 3 0 Evasiva 25% de chance de uma fatia não acertar em você. Repetivel Apenas o pilar pode ser cortado uma vez por turno Ressuscitar Quando morto, volta à vida com HP total (e sem status) 0 40 Spikes Quando causar dano, cause metade do dano de volta Visão O Cloak Team fica invisível por 5 turnos 20 20 Esconder Você é invisível por 5 turnos 4 7 Fase Torna-se invisível por 1 turno 0 3 Track O alvo não pode ficar invisível e recebe 10% a mais de dano. Dura 10 turnos. 5 5 Escuridão O raio de visão do inimigo diminuiu em 1. Pilhas, mas não pode ficar abaixo de 1. Visão remota Alcance da visão aumentado em 2. Repetível Invisível Você é invisível se começar a sair da visão inimiga Visão verdadeira Revela todas as unidades ocultas dentro do alcance 2 no início do turno Danificar Drenar Causa 5 de dano ao Alvo e se cura por 5 PV enquanto permanece em 1 alcance 10 5 Relâmpago Causa 15 de dano a todos os inimigos 20 10 K / O Mata o alvo se o alvo estiver abaixo de 20% HP 20 0 Armadilha Coloque uma armadilha invisível. Armadilha causa 15 pontos de dano ao pisar. Pilhas. 10 2 Zap Causa 30 de dano ao alvo 30 5 Estático Causa 5 de dano a cada turno a todos os inimigos em um raio de alcance. Repetivel Estatísticas Lobisomem Adicione 10 a todas as estatísticas para 5 turnos 30 25 Buff Dobre sua piscina HP. Repetivel Ações inteligentes têm recarga 20% menor. Repetivel Focado Aumenta a taxa de regeneração de Mana em Int / 10. Repetivel Regenerar Aumenta sua taxa de regeneração em Força / 2. Repetivel Ações inteligentes custam 2 a menos de mana. Repetivel Forte Você ganha 10 pontos de atributo. Repetivel Fraco Você perde 15 pontos de atributo. Você ganha 2 slots de habilidade (isso leva um deles) De outros Urso Pode convocar um urso com 5 em cada stat 8 10 Clone Clone você mesmo. Toma dois slots de habilidade. 100 100 Roubar Substitua esta ação pela última ação que o inimigo usado. Dura 10 turnos 5 0 Mural Crie um muro intransponível no quadrado vazio desejado, alcance 6 10 10
Status:
- Atordoar permite que seu personagem execute apenas a ação Sorriso e dura X carrapatos .
- Congelar impede que seu personagem se mova e dura X turnos.
- O silêncio impede que o seu personagem realize algo além de Sorriso, Passo ou Fatia e dura X turnos.
- O veneno causa dano ao seu personagem por X de dano nos turnos Y. Se você aplicar outro veneno, o dano se soma e a duração é atualizada.
- Slow adiciona X ao número de ticks entre seus turnos. Não afeta o seu próximo turno, apenas os turnos seguintes.
- Invisível faz com que você não possa ser visto ou danificado pelo seu oponente. Se você executar qualquer ação além de Etapa ou Sorriso, ela será removida. Se seu oponente tem uma habilidade que lhe dá visão de você, a invisibilidade é removida.
Todos os status (exceto Veneno) agem independentemente um do outro.
Notas laterais:
- Se houver um empate para o atributo principal, ele será resolvido como STR> AGI> INT.
- Você joga em uma grade de 10x10. As equipes serão colocadas em lados opostos.
- As porcentagens empilham multiplicativamente, exceto Clever.
Regras de envio
Você precisa implementar 2 funções:
// 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);
Você também terá acesso a três variáveis (variáveis de membro):
Set<ReadonlyCharacter> team;
Set<EnemyCharacter> enemies;
Map<Point2D, EnemyCharacter> visibleEnemies;
É isso aí. Abaixo, você encontra uma API completa, em ordem alfabética:
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
O acima é todas as funções que você poderia precisar para a sua apresentação. Reflexão não é permitida. Se um envio for inválido por qualquer motivo, remova-o ou adicione "Inválido" ao cabeçalho. Seu envio não deve ter uma declaração de pacote. Seu envio deve estar contido no primeiro bloco de código de várias linhas e a primeira linha deve ter o nome do arquivo.
Como executar o projeto:
Existem várias maneiras:
- Faça o download do arquivo JAR e execute
java -jar Fellowship.jar
. Se você deseja fazer o download de outros envios, passe-q 99744
.java
deve apontar para o JDK, não o JRE. - Clone o repositório git e execute
gradle run
. Você precisa ter o gradle instalado e, se quiser passar argumentos, use-PappArgs="['arg1', 'args2']"
- Clone o repositório git e compile você mesmo. Você terá as seguintes bibliotecas:
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
Se você clonar, deverá usar o --recursive
sinalizador e, quando receber atualizações, inclua.--recurse-submodules
Para qualquer uma das opções acima, sua classe precisa estar na submissions/java
pasta. Se você estiver usando gradle ou compilando você mesmo, poderá colocar a classe no próprio projeto. Você precisará descomentar algumas linhas da função principal e atualizá-las para apontar para a sua classe.
Placar:
+------+-------------------+-------+
| 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 |
+------+-------------------+-------+
Se você tiver alguma dúvida ou precisar de ajuda, comente abaixo ou entre na sala de bate-papo ! Boa sorte e divirta-se
Deal 15 damage to all enemies
, mas os inimigos invisíveis não são afetados pelos raios. Isso é um inseto? Caso contrário, a invisibilidade parece muito forte para mim ...