스타크래프트-봇 24

스타크래프트 봇 동아리, 내전용 봇 개발 (#14)

이번 글은 내전용 봇 개발의 마지막 글이다. 구현하고자하는 기능은 반드시 필요한 일꾼과 인구수를 계속 보충하는 기능을 구현하고자한다. // 일꾼 계속 추가 생산 public void executeWorkerTraining() { // InitialBuildOrder 진행중에는 아무것도 하지 않습니다 if (!isInitialBuildOrderFinished) { return; } if (MyBotModule.Broodwar.self().minerals() >= 50) { // workerCount = 현재 일꾼 수 + 생산중인 일꾼 수 int workerCount = MyBotModule.Broodwar.self().allUnitCount(InformationManager.Instance().getWor..

스타봇 2021.07.25

스타크래프트 봇 동아리, 내전용 봇 개발 (#13)

스타크래프트의 자원 줄을 계속 늘려주는 것은 병력을 쌓는 것 다음으로 중요하다는 것은 누구나 아는 사실이다. 그래서 내전용 봇에게 영역 확장을 하는 코드를 넣고자 한다. 먼저 종족이 저그인만큼 해처리를 늘리는 데에는 두 가지 이유가 있다. 1) 보다 많은 라바를 채우기 위해서 2) 자원 줄 3) 인구수 확보 먼저 영역 확장에 대해서부터 작성하도록하겠다. ※다른 종족에 비해 앞마당을 빨리 먹는 저그이기에 앞마당을 확장은 영역확장에 포함하지않았습니다. 유의해주세요. 물론 타 종족에서도 사용할 수 있게 코드상으로는 앞마당 확장은 영역확장에 포함하였습니다. 영역확장은 시간이 조금 지난 후, 중반쯤되어있을 때부터 확장을 하는 일반적이다. 또, 자원이 어느정도 확보가 되어있어야한다. 필자는 본진으로부터 가장 가깝지..

스타봇 2021.07.24

스타크래프트 봇 동아리, 내전용 봇 개발 (#12) | 디파일러 파트 (2)

파트1을 확인하고자하면 아래의 링크를 참고하시길 바란다. 디파일러 파트 (1) 파트1과 동일하게 영상을 시작으로 개선된 코드를 작성하겠다. 파트1에 작성되었던 코드 중 다크스웜은 문제가 아니었음을 파악하였다. 컨슘 파트가 문제였다. 컨슘파트도 메소드로 나누었다. private Unit nearestMyUnit(Unit unit, UnitType unitType) { double minDist = Double.MAX_VALUE; Unit nearestType = null; for (Unit findType : MyBotModule.Broodwar.self().getUnits()) { if (findType.getType() == unitType) { if (unit.getDistance(findType) ..

스타봇 2021.07.23

스타크래프트 봇 동아리, 내전용 봇 개발 (#11) | 디파일러 파트 (1)

퀸 다음으로 컨트롤이 어려운 유닛이자, 저그의 심장이라고도 불리우는 유닛, '디파일러'. 디파일러는 테란전에서 빠질 수 없는 유닛입니다. 퀸과 마찬가지로 공격은 따로 없으나, 3가지의 특수한 능력이 있습니다. '다크스웜', '플레이그', '컨슘'으로 순서대로 '다크스웜'은 저그의 연막탄이라고 할 수 있다. 생성된 구름안에 있는 유닛들은 원거리 공격의 타점을 빗나가게 한다. 즉, 타점을 빗나가게 하는 무시하는 것은 아니다. 타점은 본 유닛의 앞쪽으로 타점이 변경되기에 뒤쪽에 있는 유닛을 겨냥하면 타점 변경으로 앞쪽에 있는 유닛이 맞게된다. 시즈탱크의 공격을 무력화시키는 데 있어 좋다. '플레이그'는 지속형 피해를 주는 능력 중 하나이나, 스타크래프트 내에서 가장 강력한 능력 중 하나이다. 퀸의 브루들링은 ..

스타봇 2021.07.22

스타크래프트 봇 동아리, 내전용 봇 개발 (#10)

사용하기 매우 까다롭지만 사용만 잘하면 이득을 최대한 취할 수 있는 유닛 '퀸' 퀸에게 4가지의 특별한 능력인 '패러사이트', '브루들링 스폰', '인스네어', '인페스트 커맨드 센터'가 있다. 패러사이트는 적군에게 기생충을 심어 해당 적군의 시야를 엿 볼 수 있다. 패러사이트를 제거하는 방법은 해당 적군이 죽거나 메딕의 리스토레이션으로만 제거가 가능하다. 브루들링은 모든 적군을 즉사를 시킬 수 있는 강력한 능력이다. 적군 1기를 죽여 공생충(브루들링)을 2기 생성한다. 인스네어는 적군의 발을 묶는 데에 매우 효과적이다. 광역으로 적군의 이동속도를 50%만큼 감소시킨다. 인페스트 커맨드 센터는 파손되가는 커맨드 센터에 퀸이 들어가 커맨드 센터를 저그로 감염시킬 수 있는 능력이다. 위 4가지 능력들 중 저..

스타봇 2021.07.21

스타크래프트 봇 동아리, 내전용 봇 개발 (#9)

또다른 정찰기로서 써먹으면 좋은 저그 유닛 '스커지' ※ 스커지, 스컬지, 스콜지 등등으로 많이 불리지만 저자는 스커지라고 작성하겠다. 스커지는 재빠르게 적에게 붙어 자폭하는 공중에서 잘못 만나면 공중 유닛하나 잃어버릴 수 있지만 우리는 스커지의 속도를 보고 나쁘지않음을 깨닫고 정찰로서 사용하도록한다. 물론 시야가 짧지만 만일 맵이 섬맵일 수 있기에 정찰을 하도록 개발하였다. 저글링과 코드가 흡사하기에 이코드로 저글링 정찰의 코드를 대체하도록한다. 하지만 다른 점이 있다면 모든 스컬지들을 정찰하도록한다. 굳이 한 마리만 보낼 필요는 없다고 판단. 물론 추후 정찰을 해제해야할 수도 있기에 코드는 추후 수정될 가능성이 높다. static int count = 0; static ArrayList makeNew..

스타봇 2021.07.20

스타크래프트 봇 동아리, 내전용 봇 개발 (#8)

저그의 또다른 카이팅 유닛이자 테란전 필수 유닛 '뮤탈리스크' 체력도 무난하고 이름바 쓰리쿠션이라고 자주 불리는 일종의 스플래시 대미지가 존재한다. 한 번에 세 번 공격 하나, 첫 번째 공격만 컨트롤이 가능하고 나머지 공격들은 컨트롤할 수 없다. 공격 방식이 독특하기에 이를 글로 설명하자니 어렵기에 직접 찾아 이해하시길 바랍니다. 비교적 짧은 코드로 나쁘지 않는 성과를 내어 좋았다. 물론 여러 프로들이 사용하는 뮤탈 뭉치기, 뮤탈 컨트롤은 따로 구현할 수 있다면 구현하도록하겠다. Position getKiteVector(Unit unit, Unit target) { Position fleeVec = new Position(target.getPosition().getX() - unit.getPosition..

스타봇 2021.07.16

스타크래프트 봇 동아리, 내전용 봇 개발 (#7)

저그 유저의 필수 유닛 중 하나이지만 본인이 당하면 역겨운 유닛, '러커 (럴커)'. ※본 저자는 러커보다는 럴커가 더 편하여 럴커라고 적겠습니다. 글을 읽는 데에 참고해주세요. 저그의 희망 중 하나인 '럴커'는 지상으로만 공격이 가능하고, 또 공격을 하기위해서는 반드시 '버러우(잠복)'을 해야만 한다. 럴커의 공격하는 거리는 6이지만, 실제 타격 범위는 7로 코드를 짜는 데 7로 작성하였다. (물론 추후 6으로 수정가능) 이번 코드는 꽤 복잡하나, 중간중간 설명을 하겠다. private void lurkerControl(Unit unit) { if (!unit.exists() || unit == null || pos == null) return; boolean inOrderRange = unit.get..

스타봇 2021.07.15

스타크래프트 봇 동아리, 내전용 봇 개발 (#6)

이제부터 작업할 기능들은 꼭 필요한 기능들은 아니지만 있으면 쓸만한 기능들 중 하나인 '카이팅'을 구현해보고자 한다. 카이팅이란? '공격과 공격 사이에는 텀이 생긴다'는 게임 시스템을 이용한 것이다. 어차피 연타한다고 공격이 더 빨리 나가는 것도 아니니, 그 텀을 다음 공격을 하기 좋게, 상대의 공격을 회피하기 위해 이동하는 데 쓰는 것. 즉, 공격, 공격, 공격...이 아니라 공격, 이동, 공격, 이동...식으로 조종하는 것을 의미한다. 저그 유닛 가운데 카이팅을 할 만한 유닛은 두 가지뿐이다. '히드라리스크'와 '뮤탈리스크'인데, 그중 이번에 해볼 유닛은 '히드라리스크'이다. 먼저 코드부터 확인하자면 private void hydraKite(Unit unit, Unit target) { if (uni..

스타봇 2021.07.14