전체 글 200

안드로이드 공부 #1

안드로이드 스튜디오를 통하여 배운 내용들을 간단하게나마 작성하는 글입니다. 코드의 상태가 이상할 수 도 화면이 이상할 수 있습니다. 안드로이드 스튜디오에 대해 더 알아가고자 버튼를 추가해보는 것에 대해서 작성하고자합니다. 일단 액티비티 메인에서 사진과 같이 Button을 선택한 다음 드래그 앤 드랍을 합니다. 그런 후, 버튼을 선택하여 Attribute 탭에서 text에서 Button을 지우고 workshop이라고 작성하였습니다. 텍스트를 바꾸었으니 이제 기능을 넣겠습니다. 버튼을 누르면 제 티스토리로 이동하도록 구현하겠습니다. 위 버튼의 Attribute에는 onClick이라는 부분에서 클릭시 작동할 메소드명을 정합니다. 저는 onClick1로 하였습니다. 다시 MainActivity로 돌아와 코드를 ..

안드로이드 공부 #0

안드로이드 스튜디오를 통하여 배운 내용들을 간단하게나마 작성하는 글입니다. 코드의 상태가 이상할 수 도 화면이 이상할 수 있습니다. 막연히 안드로이드를 건드려보고 싶다는 충동으로 안드로이드 스튜디오를 설치하고보니 노트북의 메모리가 자신을 외쳐달라고 하고 있는 것 같다. 개인적으로 안드로이드에 엄청난 관심이 있어 한다기보다는 안드로이드에 대해 조금이나마 알아두고 앱을 만들어보는 것을 목표로 하여 안드로이드를 하게 되었습니다. 먼저 저는 안드로이드는 안드로이드 스튜디오 (이하 안스)를 통해 개발한다는 것만 알지 정확히 어떻게 해야하는 지를 모르는 아예 초보..아니 입문자입니다. 그러므로 아무거나 건드려보며 이거는 이런 기능을 한다 정도를 작성할 것 같습니다. 대충 가장 기본적인 틀을 만들고 앱을 돌려보니 H..

마크 플러그인 만들기 (#3)

오늘 구현할 기능은 버서커의 패시브 능력인 무모한 공격을 만들어보고자 합니다. 무모한 공격은 우클릭 시, 바라보는 방향으로 빠르게 이동하는 능력입니다. 이전에 마법사와 별다른 코드는 없으나, 다른 점이 있다면 특정 블럭을 선택 후, 이동이 아닌 말그대로 바라보는 방향이라는 점입니다. 그리고 테스트용으로 깃털을 들고있을 때 작동하도록 하였습니다. @EventHandler public void rush(PlayerInteractEvent e) { Player player = e.getPlayer(); Action action = e.getAction(); // 우 클릭시, 돌진함 if ((action == Action.RIGHT_CLICK_BLOCK || action == Action.RIGHT_CLICK_..

마크 플러그인 만들기 (#2)

RPG 직업들은 현재 기획한 것으로는 파이터, 머스킷티어, 버서커, 마법사, 암살자로 직업들은 각각 액티브형 능력 하나와 패시브형 능력 하나를 구현할 것입니다. 현재 버서커의 광전사 능력(패시브)과 암살자의 도주 능력(패시브)는 krapoi의 티스토리를 확인하여 코드와 더불어 어떤 형식으로 작동하는 지를 확인할 수 있습니다. 제가 구현한 기능들은 마법사의 라이트닝(액티브)능력과 머스킷티어의 헤드샷(패시브)를 구현하였습니다. 먼저 마법사의 라이트닝입니다. Wizard라는 클래스를 만들고 플러그인에 사용될 클래스들은 대부분은 Listener를 사용하여 이벤트를 받습니다. implements Listener를 하고, 받을 이벤트를 @EventHandler를 합니다. 마법사는 현재 개발해나가는 과정이기에 막대기..

마크 플러그인 만들기 (#1)

마크 버전은 작성일 기준 최신 버전은 1.17.1를 사용할 것이고, spigot 1.17.1를 사용할 것입니다. 외부라이브러리로 spigot 1.17.1 .jar를 설정합니다. 자바 버전은 16 버전의 자바로 하였습니다. (16.0.2) ※자바 버전을 16버전의 JDK를 설치하여야 서버가 열릴 겁니다. 먼저 src에 Main.java 를 추가하여 메인 클래스를 만듭니다. Main에 extends JavaPlugin과 implements Listener를 추가합니다. public class Main extends JavaPlugin implements Listener { } 플러그인을 실행하였을 때에 콘솔창에서 나올 텍스트를 추가하기위해 ConsoleCommandSender consol = Bukkit.g..

마크 플러그인 만들기 (#0)

※본 글은 마인크래프트 플러그인을 개발하고자 작성하는 글이다. 학교 친구인 krapoi와 함께 마인크래프트 플러그인을 함께 개발하고자합니다. 이전에 같이 만들어본 경험이 있긴하나, 완성을 다 못했을 뿐만 아니라 완성도가 많이 떨어저 다시 한 번 더 만들어보고자 합니다. krapoi의 깃허브, krapoi의 티스토리 마인크래프트 최신 버전인 1.17.1을 기준으로 개발할 예정이며, 에디터는 Intellij를 사용할 예정입니다. 만들고자하는 플러그인은 넣고싶은 기능들을 다 때려 박아 넣을 수 있는 RPG플러그인을 개발하고자 합니다. 안타깝지만 개발을 하며 commit하는 깃허브는 private으로 할 것이지만, 필자의 티스토리와 krapoi의 티스토리를 확인해주길 바랍니다. 티스토리에는 진행 상황 및 저희가..

압생트(Absinthe)봇 만들기 (#11)

방학이 끝나버려 더 이상 압생트 봇을 만들지 못하게 되었습니다. 그래도 나름대로 열심히 개발하고자 하였고, 지금 당장은 이번 글이 마지막이겠으나, 다음 방학인 겨울방학에 다시 개발을 하도록 하겠습니다. 이번이 마지막인 만큼 최대한 많은 것을 추가 및 구현하고자 하였습니다.먼저 시간 증폭입니다.현재 인공 제어소에서 차원관문을 업그레이드를 진행하고 있는 중이라면 시간 증폭을 인공 제어소에 사용하고그렇지 않지만, 수정탑이 건설 진행이거나 이미 완료된 적이 1번이라도 있다면 시간 증폭을 연결체에 사용하도록 하였습니다. async def chrono(self): if self.structures(UnitTypeId.PYLON): nexus = self.townhalls.ready.random if nexus.en..

압생트(Absinthe)봇 만들기 (#10)

이번에 구현하고자 하는 것은 영역 확장입니다. python_sc2에 이미 영역 확장하는 코드가 존재하기에 빠르게 마무리하고 이어서 공격에 관련하여 코드를 추가하도록 하겠습니다. python_sc2에 존재하는 파이썬 파일들 중 "bot_ai"라는 파일에서 expand_now라는 메소드에 이미 작성해야할 코드가 존재하기에 이를 메소드를 사용할 것입니다. 영역을 확장하는 데에 자원이 굉장히 많이 투자되고 그비용만큼 유닛을 생산하지 못하여 패배하는 경우가 있기에 적절한 영역확장이 필요합니다. 개인적으로 연결체는 3개 미만이고 자원이 충분할때에만 영역을 확장하도록 하였습니다. async def expand(self): if self.units(UnitTypeId.NEXUS).amount < 3 and self.c..

압생트(Absinthe)봇 만들기 (#9)

이번 글이 아마 스타크래프트 2 프로토스의 가장 기초적인 기능을 수행하도록 하는 데 있어 도움을 주는 글 중 마지막일 듯합니다. 여태까지 한 것을 요약하자면 1) 세팅 및 일꾼 생산 2) 수정탑 건설 3) 관문 건설 4) 융화소 건설 및 가스 채취 5) 인공 제어소 건설 6) 추적자 생산 7) 시간 증폭 사용 8) 차원관문 업그레이드 9) 공격 10) 차원관문 사용 11) 유닛 컨트롤 이번에 구현하고자 하는 기능은 10번과 11번입니다. 물론 아직도 남은 기능들은 굉장히 많으니 그건 나중에 진행하면서 천천히 설명드리겠습니다. 먼저 차원관문 사용입니다. 준비된 모든 차원관문들을 for-each를 하여, 해당 차원관문이 현재 당장 사용할 수 있는 능력을 확인합니다. (차원관문은 능력을 사용하여 유닛을 생산하..

압생트(Absinthe)봇 만들기 (#8)

드디어 공격을 구현하고자합니다. 공격은 단순하게 상대 진영을 공격하게 만드는 것으로 마무리할 것입니다. 먼저 저 같은 경우에는 추적자만을 사용하였기때문에 추적자만 관리하여 공격을 하면 됩니다. 추적자가 최소 4마리이상은 되야 공격을 가도록 하였습니다. async def attack(self): stalker_count = self.units(UnitTypeId.STALKER).amount stalkers = self.units(UnitTypeId.STALKER).ready.idle if stalker_count < 4: return for stalker in stalkers: stalker.attack(self.enemy_start_locations[0]) 이렇게만 구현 및 추가하더라도 정예까지는 매우 ..