728x90
저그의 또다른 카이팅 유닛이자 테란전 필수 유닛 '뮤탈리스크'
체력도 무난하고 이름바 쓰리쿠션이라고 자주 불리는 일종의 스플래시 대미지가 존재한다.
한 번에 세 번 공격 하나, 첫 번째 공격만 컨트롤이 가능하고 나머지 공격들은 컨트롤할 수 없다.
공격 방식이 독특하기에 이를 글로 설명하자니 어렵기에 직접 찾아 이해하시길 바랍니다.
비교적 짧은 코드로 나쁘지 않는 성과를 내어 좋았다.
물론 여러 프로들이 사용하는 뮤탈 뭉치기, 뮤탈 컨트롤은 따로 구현할 수 있다면 구현하도록하겠다.
Position getKiteVector(Unit unit, Unit target) {
Position fleeVec = new Position(target.getPosition().getX() - unit.getPosition().getX(),
target.getPosition().getY() - unit.getPosition().getY());
double fleeAngle = Math.atan2(fleeVec.getY(), fleeVec.getX());
fleeVec = new Position((int)(64*Math.cos(fleeAngle)), (int)(64*Math.sin(fleeAngle)));
return fleeVec;
}
뮤탈리스크는 체력이 준수한 편이기는 하나, 공중 공격을 하는 유닛들을 상대로 약하고, 사거리도 짧아 한 번이라도 쳤다면 뒤쪽으로 잠깐 빠져 다시 공격하는 방식으로 플레이를 해야한다.
뮤탈리스크의 기동성을 최대한으로 이끌어 카이팅을 사용해야한다.
private void mutaControl(Unit unit, Unit target) {
if (unit == null || target == null)
return;
final int cooldown = unit.getType().groundWeapon().damageCooldown();
final int latency = MyBotModule.Broodwar.getLatency();
final double speed = unit.getType().topSpeed();
final double range = unit.getType().groundWeapon().maxRange();
final double distanceToTarget = unit.getDistance(target);
final double distanceToFiringRange = Math.max(distanceToTarget - range, 0.0);
final double timeToEnterFiringRange = distanceToFiringRange / speed;
final int framesToAttack = (int)(timeToEnterFiringRange) + 2 * latency;
final int currentCooldown = unit.isStartingAttack() ? cooldown : unit.getGroundWeaponCooldown();
Position fleeVector = getKiteVector(target, unit);
Position moveToPosition = new Position(unit.getPosition().getX() + fleeVector.getX(),
unit.getPosition().getY() + fleeVector.getY());
if (currentCooldown <= framesToAttack)
unit.attack(target);
else {
if (moveToPosition.isValid())
unit.rightClick(moveToPosition);
}
}
가장 정석적인 뮤탈 컨트롤을 만들기 위해 사거리, 속도, 게임 지연시간, 공격 쿨타임, 공격까지의 딜레이, 위치 등등을
참고하여 컨트롤을 하도록 하였다.
시연 영상으로 끝으로 마무리하겠다.
영상 녹화 후, 속도가 느린 것 같아 강제적으로 속도를 1.5배로 하여 사운드가 기본 사운드가 아닌 배속 사운드입니다.
'스타봇' 카테고리의 다른 글
스타크래프트 봇 동아리, 내전용 봇 개발 (#10) (0) | 2021.07.21 |
---|---|
스타크래프트 봇 동아리, 내전용 봇 개발 (#9) (0) | 2021.07.20 |
스타크래프트 봇 동아리, 내전용 봇 개발 (#7) (0) | 2021.07.15 |
스타크래프트 봇 동아리, 내전용 봇 개발 (#6) (0) | 2021.07.14 |
스타크래프트 봇 동아리, 내전용 봇 개발 (#5) (0) | 2021.07.13 |