전체 글 200

스타크래프트 봇 동아리, 내전용 봇 개발 (#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

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

스타크래프트를 복잡하게 생각하지 않고 단순하게 생각하자면 공·수 게임이다. 공격과 수비를 번갈아가며 플레이를 하는 게임이다. 저자가 생각한 바로는 상대방이 빠른 러쉬를 한다면 그에 맞대응하기위해 저글링으로 방어를 하고 어느정도 병력이 쌓이면 공격을 간다라는 것은 스타크래프트를 해본 플레이어라면 모두가 아는 사실일 것 이다. 또, 대부분의 유닛을 집결시키는 곳은 앞마당 혹은 본진 길목이다. 봇 역시 길목에 배치를 시키되, 조건을 하나 추가하자면 앞마당을 먹었다면 앞마당 길목로 집결시키고, 본진뿐이라면 본진 길목으로 집결시킨다. 이를 구현하고자 기존 코드를 뜯어고쳤다. // 공격 모드가 아닐 때에는 전투유닛들을 아군 진영 길목에 집결시켜서 방어 if (!isFullScaleAttackStarted) { Ch..

스타봇 2021.07.12

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

스타크래프트는 유즈맵으로 더 많이 알려져있으나 원래는 전략게임이다. 스타크래프트 수도 셀 수없이 많은 빌드들이 있고 또, 저자가 구현하는 봇 역시 빌드를 구현하고자한다. 봇에게 부여할 빌드는 9드론 빌드를 부여하고자한다. 공격도 자주할 수 있고 후속 빌드를 이어가서 최대한 빠르게 게임을 끝내고자 9드론 빌드를 선택하였다. Strategy에서 setInitialBuildOrder메소드에서 미리지정을 하면 그에 따라 순차적으로 작동한다. 자신의 종족에 따라 초반 빌드오더가 미리 짜여있겠으나 저자는 저그만 구현할 예정이기에 이를 다 지우고 9드론 초반 빌드만을 작성하였다. public void setInitialBuildOrder() { BuildManager.Instance().buildQueue.queue..

스타봇 2021.07.12

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

스타크래프트에서 무엇보다도 가장 중요한 것은 '정찰'이다. 정찰을 통해 현재 적의 전략, 그리고 적의 위치등을 파악을 하기위해서는 정찰이 필수이다. BasicBot에도 충분히 정찰 기능이 존재하나 추가적으로 더 효율적인 정찰 기능을 추가하고자 오버로드 첫 정찰과 드론의 정찰을 업그레이드하고자한다. 저그는 게임 시작시, 오버로드 1기를 주어 빠르게 정찰을 시작할 수 있다. 하지만 오버로드의 속도가 매우 느리기에 스포닝풀을 올리고 나서도 기지를 겨우 하나 돌 정도로 느리다. 그러기에 스포닝풀이 지어졌는 데도 적군 기지를 찾지 못하였다면 드론을 정찰을 보내고자한다. 먼저 GameCommander에서 onStart메소드에서 오버로드 찾아 정찰기로 지정한다. for (Unit unit : MyBotModule.B..

스타봇 2021.07.12

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

방학동안 종족에 상관없이 스타크래프트 봇을 완성하여 내전할 예정이라는 공고가 내려와 개발을 시작하기로 했다. 방학기간은 7/16 ~ 8/14 하지만 미리 개발을 한다고 하여 나쁠 것은 없기에 먼저 봇을 개발하고자한다. 또, 내전 1등 상품도 있기에 흥미가 생겼다. 저자의 주종족인 저그(Z)로 개발하려고 한다. 앞으로 작성할 스타크래프트 봇 일지들은 카테고리 '스타봇'에 넣을 예정이다. 알고리즘 경진대회 공식 깃헙에서 제공한 소스인 BasicBot을 사용하여 제작을 할 것이다. 언어는 자바로 할것이다. 최소 기본 AI는 이길 수 있도록 개발할 예정이며, 최대 목표는 준우승이다. 에디터는 인텔리제이를 사용할 것이다. 미리 코드나 전략이 새나갈 수 있기에 8월 15일이후에 블로그에 공개될 예정이다. 시작 20..

스타봇 2021.07.12

자바로 게임을 만들어보자 Chap 1

※본 글은 자바에 흥미가 많은 고등학교 1학년이 작성한 코드입니다. 코드가 많이 지저분하더라도 양해부탁드립니다.※ 현재 기말고사를 치르고 있어 이시기에 블로그를 운영하는 것이 맞는 판단이 맞나 싶긴 하지만 개인적으로 처음 블로그 운영이다보니 제가 하고싶은 것들은 최대한 하는 것을 목표로 개발을 하도록하겠습니다. 제목에서도 나와있듯이 Java의 GUI를 사용하여 RPG형태의 게임을 만들고자 합니다. 게임에 가장 필수적인 요소와 함께 개인적으로 넣고 싶은 요소들 역시 추가할 계획이며, 최종 목표는 해당 게임을 완성하여 직접 플레이를 하는 것입니다. 작명센스가 떨어지기에 아무거나 막 떠오르는 것을 제목으로 대충 적을 것이고 만들고자 하는 기능들은 * 사냥 * 대장간 * 전투 * 상점 등 필수요소들이고 특징적으..