이 도전에서, 당신은 친교 를 만들 것입니다 전투에서 다른 모든 친교를 물리 치기 것입니다.
친교 (팀)는 3 자로 구성됩니다 . 각 캐릭터는 다른 팀과 독립적으로 움직이지만 적과 싸울 때 함께 일해야합니다. 팀은 서로 마주보고 회전합니다. 승은 3 점, 동점은 1 점, 손실은 0 점입니다.
캐릭터는 능력이 있습니다. 캐릭터가 가진 능력의 선택은이 KotH에서 가장 중요하고 재미있는 부분 중 하나입니다 . 그것들은 모두 강하고 적을 쓸어 낼 수 있습니다.
캐릭터의 체력은 (HP)이고, 체력이 0 이하일 때 죽습니다 . 상대 팀의 모든 캐릭터가 죽으면 승리합니다!
캐릭터에는 마나가 있습니다. 대부분의 작업에는 Mana가 수행해야하며 , 충분하지 않으면 해당 작업을 사용할 수 없습니다.
캐릭터는 턴 지연이 있습니다. 각 턴 사이의 틱 수를 결정합니다 (100에서 시작). 낮을수록 좋습니다.
문자에는 속성이 있습니다. 각 캐릭터는 각 속성에 밑이 5이며, 분할 할 속성 포인트가 20 개 더 있습니다. 속성 포인트를 할당하면 기본 속성 이 가장 높은 속성으로 설정됩니다.
사용 가능한 속성은 다음과 같습니다.
- 힘 : 1 턴당 최대 HP 10, .5 HP
- 지능 : 턴당 최대 마나 7과 마나 1을줍니다.
- 민첩성 : 회전 지연을 1 감소
움직임, 비전, 범위
범위는 다음과 같습니다 (0을 중심으로). 일부 범위는 추기경 이므로 직접 위, 왼쪽, 오른쪽 또는 아래로만 이동할 수 있습니다.
444
43334
4322234
432111234
432101234
432111234
4322234
43334
444
등장 인물은 2의 시작 비전을 가지고 있습니다.
게임 방법
건설
플레이어는 교제를 구성합니다. 다음 단계를 수행해야합니다 .
각 문자 속성 포인트를 지정하십시오 . 각 캐릭터는 각 스탯에서 5로 시작하고 3 사이에 20을 더 분배합니다.
각 캐릭터에게 능력을 부여하십시오 . 각 캐릭터는 4 개의 능력 슬롯으로 시작하며 기본적으로 능력은 1 슬롯을 사용합니다. 일부 능력은 반복 가능 하며 캐릭터에게 여러 번 주어질 수 있습니다. 소유자의 허가없이 다른 제출 기능을 사용하는 것은 허용되지 않습니다.
봇을위한 코드 를 작성 하십시오. 코드는 Java로 작성되어야하며 전투에 사용됩니다 (다음 단계).
행위
모든 캐릭터는 3 가지 표준 액션으로 시작합니다 :
- 단계 : 1의 기본 범위에서 캐릭터를 이동
- 슬라이스 : 기본 범위 1에서 1 차 속성 으로 적 공격
- 스마일 : 아무것도 하지마
캐릭터 차례에 수행 할 액션을 선택해야합니다. 행동에는 마나가 소모되고 재사용 대기 시간이 생겨 해당 행동을 다시 수행하기 전에 기다려야하는 턴 수를 정의 할 수 있습니다.
능력
모든 캐릭터에는 능력 슬롯이 4 개 있습니다. 이탤릭체로 된 능력이라면 행동입니다.
능력
이름 설명 마나 재사용 대기 시간 이동 깜박임 사각형으로 이동, 범위 4 2 2 대상과 스왑 스왑 위치 5 5 텔레포트 어디든 이동 20 5 대시 단계의 범위를 1 씩 증가시킵니다. Mobile Step은 8 방향으로 움직일 수 있습니다 공격 퀵 슬라이스 두 번 3 0 직조 보이는 모든 적을 한 번만 슬라이스하십시오 15 10 각 조각을 흡수하면 대상의 기본 특성 중 1 개를 훔칩니다. 20 턴 지속 각 조각을 쪼개서 인접한 적에게 1/2의 피해를줍니다. 치명타 슬라이스가 30 %의 확률로 200 %의 피해를 입 힙니다. 반복 가능 Feast Each Slice는 HP를 3 증가시킵니다. 8 개 방향 중 어느 방향 으로든 플렉시블 캔 슬라이스 마나 도둑 조각이 2 마나를 훔칩니다. 반복 가능 슬라이스시 반사 슬라이스 0 3 원거리 슬라이스의 범위에 1을 더함 스 와이프 같은 대상에있는 연속 조각 하나당 마지막보다 3 개의 추가 피해를줍니다. 상태 Dispel 대상에서 모든 상태를 제거합니다. 사거리 2. 20 10 결투 당신 중 한 명이 죽을 때까지 당신과 대상을 얼립니다. 범위 1 25 0 개편, 당신과 대상이 틱 다음 1000 기절 10 10 유성 다음 100 25 10 틱에 대한 모든 적들은 기절 가죽 끈 대상은 자신이 다음 턴 동안 4 ~ 6 동결 독 5 턴 동안 1 HP에 대한 독 적을 5 0 침묵 대상이 5 턴 동안 침묵합니다. 5 7 느린 대상이 다음 3 턴 동안 40 틱만큼 느려집니다. 10 5 충격 대상이 다음 300 틱 동안 기절합니다. 10 10 추위 2 범위 내의 다른 모든 문자는 10 틱만큼 느려집니다. 면역 상태가 적용되지 않습니다 방어 포스 필드 블록 다음 5 가지 피해 원. 하지 스택 (15) 5합니까 Ghost를 회전, 모든 피해의 치유 (10) (10) 치유 HP 10 3 20 대상을 치유 복원 모든 단위는 전체 건강 (20) (40)에 다시 복원 쉴드 당신의 다음 턴 때까지 슬라이스를 할 수 없다 3 0 회피가 25 % 확률로 슬라이스가 맞지 않습니다. 반복 가능 기둥 만 한 번만 슬라이스 가능 부활 죽었을 때 완전한 HP 상태로 상태가 회복됩니다. 스파이크 데미지를 입었을 때, 데미지의 절반을 되돌립니다 전망 망토 팀이 5 턴 동안 보이지 않습니다. 20 20 숨기기 5 턴 동안 보이지 않습니다. 4 7 단계 1 턴 동안 보이지 않습니다. 0 3 트랙 대상이 보이지 않게되어 공격력이 10 %만큼 증가합니다. 10 턴 동안 지속됩니다. 5 5 암흑 적의 시야 범위가 1만큼 감소했습니다. 원거리 시력 범위가 2만큼 증가했습니다. 보이지 않음 당신은 적의 비전에서 당신의 차례를 시작하면 보이지 않습니다 진정한 시야 턴 시작시 범위 2 내의 모든 숨겨진 유닛을 공개합니다 손해 드레인은 그들이 한 범위를 유지하면서 5 HP의 대상과 치유자가 5 데미지를 10 5 번개 거래 모든 적 20 10-15 손상 K / O 대상이 20 % HP 20 0 이하이면 킬 대상 트랩 장소 보이지 않는 함정. 함정을 밟으면 함정에 15의 피해를줍니다. 스택. 10 2 랩 거래 30 대상에게주는 피해 30 5 정적 1 범위 내의 모든 적에게 1 턴마다 5의 피해를줍니다. 반복 가능 통계 늑대 인간 5 턴 30 25 모든 통계에 10 추가 버프 HP 풀을 두 배로 늘리십시오. 반복 가능 영리한 행동의 재사용 대기 시간이 20 % 짧습니다. 반복 가능 집중 마나 회복 속도를 Int / 10만큼 증가시킵니다. 반복 가능 재생 재생력이 2만큼 증가합니다. 반복 가능 현명한 행동은 마나가 2만큼 감소합니다. 반복 가능 강점 10 특성 포인트를 얻습니다. 반복 가능 약점 15 점을 잃습니다. 능력 슬롯이 2 개 있습니다 (이 중 하나가 필요합니다) 다른 곰 캔 각 합계 8 10 5을 가진 곰 소환 복제 복제 자신을. 능력 슬롯 2 개를 가져갑니다. 100 100 Steal 이 액션을 마지막으로 사용한 적 대상으로 바꿉니다. 지속 10 턴 5 0 벽 목표로 지정된 빈 정사각형, 범위 6 10 10에 통과 할 수없는 벽 만들기
상태 :
- 기절은 캐릭터가 스마일 동작 만 수행하고 X 진드기를 지속 합니다.
- 동결은 캐릭터가 움직이지 못하게하고 X 턴 동안 지속됩니다.
- 침묵은 캐릭터가 스마일, 스텝 또는 슬라이스 이외의 것을 수행하지 못하게하고 X 턴을 지속합니다.
- 독은 Y 턴 동안 X의 피해를 입 힙니다. 다른 독을 적용하면 피해가 합쳐지고 지속 시간이 새로 고쳐집니다.
- 천천히는 턴 사이의 진드기 수에 X를 더합니다. 그것은 다가오는 턴 에는 영향을 미치지 않으며 , 오직 다음 턴에만 영향을줍니다 .
- 보이지 않음으로 인해 상대방이 보거나 손상을 입을 수 없습니다. Step 또는 Smile 이외의 작업을 수행하면 제거됩니다. 상대방에게 당신의 시야를 제공하는 능력이 있다면, 투명성이 제거됩니다.
모든 상태 (독을 제외하고)는 서로 독립적으로 작동합니다.
사이드 노트 :
- 기본 속성과의 연계가 있으면 STR> AGI> INT로 확인됩니다.
- 10x10 그리드에서 재생합니다. 팀은 반대편에 배치됩니다.
- Clever를 제외하고 백분율은 곱셈으로 누적됩니다.
제출 규칙
두 가지 기능을 구현해야합니다.
// 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);
또한 세 가지 변수 (멤버 변수)에 액세스 할 수 있습니다.
Set<ReadonlyCharacter> team;
Set<EnemyCharacter> enemies;
Map<Point2D, EnemyCharacter> visibleEnemies;
그게 다야. 아래에서 알파벳순으로 완전한 API를 찾을 수 있습니다.
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
위는 제출에 필요할 수있는 모든 기능입니다. 반사는 허용되지 않습니다. 어떤 이유로 든 제출이 유효하지 않은 경우 제출을 삭제하거나 헤더에 "잘못된"을 추가하십시오. 귀하의 제출은해야 하지 패키지 선언을해야합니다. 제출물은 첫 번째 여러 줄 코드 블록에 포함되어야하며 첫 번째 줄에는 파일 이름이 있어야합니다.
프로젝트를 실행하는 방법 :
몇 가지 방법이 있습니다.
- JAR 파일을 다운로드 하고 실행하십시오
java -jar Fellowship.jar
. 다른 제출물을 다운로드하려면을 전달하십시오-q 99744
. JRE가 아닌 JDKjava
를 가리켜 야합니다 . - 자식 저장소를 복제 하고 실행하십시오
gradle run
. gradle을 설치해야하며 인수를 전달하려면 다음을 사용하십시오.-PappArgs="['arg1', 'args2']"
- git repo를 복제하고 직접 컴파일하십시오. 당신은 다음 라이브러리가 필요합니다 :
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
복제하는 경우 --recursive
플래그 를 사용해야하며 업데이트를 가져올 때--recurse-submodules
다음 중 하나를 포함 하십시오. 클래스 중 하나를 submissions/java
폴더 로 이동해야 합니다. gradle을 사용하거나 직접 컴파일하는 경우 클래스를 프로젝트 자체에 넣을 수 있습니다. 주 함수에서 일부 줄의 주석을 해제하고 클래스를 가리 키도록 업데이트해야합니다.
스코어 보드 :
+------+-------------------+-------+
| 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 |
+------+-------------------+-------+
Deal 15 damage to all enemies
되지만 보이지 않는 적들은 번개의 영향을받지 않습니다. 이것이 버그입니까? 그렇지 않으면, 보이지 않는 것이 나에게 꽤 강해 보인다.