워크샵6349 141

스타크래프트 2 봇 개발 일지-1(Ocraft)

좋은 새해 아침입니다. 새해는 아침을 보기 위해 날을 새고 친구들과 디코 통화를 했습니다. 덕분에 카페인에 절여진 기분이 듭니다. 스타크래프트 2 봇을 개발 일지를 작성하기 전 확인해주세요! 먼저 언어는 C++로 할려고 했지만 아직 C++를 자세히 몰라서 JVM언어인 Java, Kotlin, Python으로 할 예정입니다. C++는 나중에 기회가 된다면 시도해보도록 하겠습니다. (죄송합니다. (>人<;)) Jvm 같은 경우에는 Ocraft-s2client라는 블리자드의 공식 api인 s2client-api를 자바로 Wrapper 처리한 api를 사용합니다. Python 같은 경우에는 구글의 deepmind팀의 api인 pysc2를 사용합니다. 일단 2가지 방식 둘 다 게시할 계획이기에 Ocraft-s2c..

2021년 마무리

2021년을 마무리하며.... 올해의 마지막인 오늘, 한 해를 되돌아보고자 크게 2가지 정도 확인하였습니다. 깃허브 일단 개인적인 목표인 365 커밋은 이루었습니다. 대표적으로는 스타크래프트2 봇 Absinthe(압생트)의 완성, Java와 Kotlin으로 개발한 마인크래프트 가챠 플러그인 완성, 그리고 올해 2학기 해커톤에서 제가 담당하였던 MyPeng의 서버 영역인 MyPengAPI (REST API) 완성입니다. 티스토리 일단 누적 방문수 1000은 저에게 있어 큰 의미가 되었습니다. 개인적으로 어떻게 시작하지 고민을 굉장히 많이 하게 되었는 데 지금까지 거의 70개의 글을 쓰며 어떤 방식으로 설명을 해야하는 지에 대해서 스스로 경험이 쌓여 성장해나간 것 같습니다. 댓글 하나 없다는 것이 개인적으로..

일상 2021.12.31

스타크래프트 2 봇 개발 일지-0

스타크래프트 봇 개발을 마무리 짓고 스타크래프트2 봇으로 다시 돌아왔습니다. 압생트 봇 글을 보신 분들은 알겠지만 Python을 사용해서 개발을 하였습니다. 이제부터 작성할 글인 스타크래프트2 봇 개발 일지는 파이썬 외에도 자유롭게 스타크래프트2 봇 개발과 관련된 글들을 올리는 개발 일지입니다. 겨울 방학 기간(2022-01-01 ~ 2022-02-01) 동안 하루에서 이틀 사이마다 제가 개발을 하며 맞추친 버그, 오류, 그리고 구현한 기능, 해결 등등 스타크래프트2 봇과 관련해서는 무엇이든지 올릴 계획입니다. 현재 스타크래프트 봇 동아리가 터진 이시점에서 정보가 부족한 스타1 보다는 스타2로 넘어갈도 생각 중에 있어 혹여나 스타크래프트2로 하게 된다면 좋은 글로 남기를 바랍니다. 그리고 개발 일지를 하..

스타크래프트 봇 테란편 (최종편)

이제 스타크래프트 봇은 해당 편을 마지막으로 막을 내립니다.... 이때까지 스타크래프트 봇을 봐주신 많은 분들께 감사를 표하며 스타크래프트 봇 글을 끝내도록 하겠습니다. 하지만 이번편은 끝내고 끝내야지... 라는 마음으로 글을 작성해봅니다. 프로토스 편에 작성하였던 ExampleUtil를 사용하였으며 빌드는 기존에는 초반러쉬로 게임을 끝내버렸다면 마지막편이고 테란편인 만큼 고급 유닛인 벌처를 사용하도록 하였습니다. 먼저 개발한 클래스는 다음과 같습니다. Main, ExampleBot, ExampleUtil, Vulture, Worker Main은 늘 동일하니 건너뛰도록 하겠습니다. public class Main { public static void main(String[] args) { try { ne..

스타크래프트 봇 예제 저그편

교내 해커톤이 끝나 일주일만에 다시 돌아왔습니다. 먼저 저그편을 적기 전에 시험이에요. 시험이에요 제목 그대로입니다. 12월 1일자부터 기말고사가 저를 기다리고 있기에 지금 하고 있습니다. 기말은 12월 13일 ~ 12월 15일까지인데 수학, DB 제외해서는 다 할 만한데 그 2개가 제일 버거운 것 같습니 workshop-6349.tistory.com ..에 작성하였던 위 리스트에서 스타크래프트 봇 Whiskey를 개발하려고 했으나 오늘 터졌습니다. 오류 수천 라인을 보고선 바로 때려쳤습니다. 그래서 도저히 bwapi를 못 해먹을 것 같아 그나마 했을 때 재미가 있었고 제가 했을 때 어느정도 성과가 나왔던 압생트 봇 재개로 merge 시켜버릴 예정입니다. (#code는 예정대로 진행될 예정입니다.) 본론..

스타크래프트 봇 예제 프로토스편

지난 번에는 튜토리얼을 진행했습니다. 이제부터는 각 종족별 예제 봇 하나씩 개발할 것입니다. 먼저 어떤 빌드를 어떻게 사용할 것인지 정합니다. 저같은 경우에는 최소한 봇은 이길 수 있도록 하기 위해 2게이트 질럿 러쉬를 하되, 만일 막힐 경우 생존한 질럿들을 다시 귀환한 뒤 드라군 및 질럿 다시 모아 공격할 수 있도록 하였습니다. 먼저 Main, ExampleBot, ExampleUtil 이 3개의 클래스로 개발을 하였습니다. Main은 아래와 같이 ExampleBot에 있는 run 메소드만 사용하도록 하였습니다. public static void main(String[] args) { try { new ExampleBot().run(); } catch (Exception e) { e.printStack..

스타크래프트 봇 강의 튜토리얼 2편

지난 번에 갑자기 마무리가 되어 이어서 설명 후, 튜토리얼 코드 테스트 해보는 방향으로 글을 마무리하겠습니다. 먼저 위 부분은 한 번이라도 게임을 진행하면서 탐험, 즉 시야를 얻은 적이 있는 지 여부를 확인하는 메소드입니다. game에 isExplored(int x, int y) 그리고 이 메소드는 현재 시야 내에 들어오는 지 확인하는 메소드입니다. hasPowered는 해당 위치가 파워드(powered) 즉, 전력이 공급되고 있는 지 파악하는 메소드입니다. 프로토스 건물과 관련된 메소드입니다. isValidTile 메소드는 이미 game에 있는 메소드이긴 하나 따로 만든다고 하여 문제되지않고, 그냥 어떤 방식으로 메소드가 작동하는 지 파악하고자 작성한 메소드입니다.' isBuildable 메소드는 해당..

스타크래프트 봇 강의 튜토리얼

지난 번에는 준비 과정을 끝냈습니다. 이제 본격적으로 개발 강의를 시작하겠습니다. 먼저 튜토리얼을 살짝 하도록 하겠습니다. 모든 API들이 다 그러하겠지만, Jbwapi 같은 경우에는 더더욱 다루기 어려운 라이브러리 중 하나이기 때문에 어느정도 틀을 잡고 시작하기 위해 튜토리얼을 진행하도록 하겠습니다. 먼저 크게 3가지를 알고 있으시면 됩니다. 1) Jbwapi는 스타크래프트에서 발생하는 이벤트를 활용하여 전/후 처리가 작동하는 메커니즘을 가지고 있습니다. 한 마디로, 이벤트 없이는 작동하지 않는다라고 요약할 수 있고, 이 말은 즉슨 이벤트를 받아들이는 메소드 내에 코드를 작성해야한다고 말할 수 있습니다. 조금 말인 난해할 수 있기에 다시 조금 쉽게 설명하자면 아래 그림과 같습니다. 스타크래프트에서 이벤..

스타크래프트 봇 강의 준비편

시험이 끝났기에 예정대로 스타봇 개발을 약간 강의 방식으로 글을 쓰도록 하겠습니다. 기존에 있던 것들은 전부 보호 처리하였습니다. 혹시라도 읽고 싶은 분들이 계신다면 아래에 전부 있으니, 참고해주시길 바랍니다. 더보기 https://workshop-6349.tistory.com/entry/스타크래프트-봇-동아리-봇-모듈-만들기-0- 41MDA4MT https://workshop-6349.tistory.com/entry/스타크래프트-봇-동아리-봇-모듈-만들기-1- 4zMTQyND https://workshop-6349.tistory.com/entry/스타크래프트-봇-동아리-봇-모듈-만들기-2- 4zODY1Nj https://workshop-6349.tistory.com/entry/스타크래프트-봇-만들기-1..

마크 가챠 5편

이제 타이머 기능을 추가하여 플러그인을 마무리 짓도록 하겠습니다. 타이머는 보스바로 개발을 하였습니다. 클래스명은 BossBarManagement 로 생성자 호출시, 타이머 기능을 수행하도록 합니다, public class BossBarManagement { public Plugin plugin; public static int time = 60; public static final HashMap timer = new HashMap(); // 고유 아이디, addedTime public static final HashMap userBossBars = new HashMap(); // 고유 아이디, BossBar public BossBarManagement(Player player, Plugin plugin..