728x90
이번에 구현하고자 하는 것은 파일런(수정탑) 건설입니다.
스타크래프트를 플레이했던 유저라면 파일런(수정탑)은 프로토스의 인구수를 늘려주는 동시에
넥서스를 비롯하여 에너지(정확히는 동력) 없이 지을 수 있는 유일한 건물로 주변에 에너지를 공급해주는 기능을 합니다.
그런 건물을 건설하도록 구현하겠습니다.
먼저 말하자면 PySC2와 달리 따로 일꾼을 선택하도록 구현할 필요 없이 건설한 요청 하면 알아서 API에서 처리하여, 실행하기 때문에 귀찮지 않다는 것을 참고해주길 바랍니다.
넥서스에서 가깝게 짓는 것이 낫기에
넥서스 중 하나를 선택하여 해당 위치 앞쪽으로
x값은 적군 쪽과 가까운 최적의 x값을 가져오되, y값은 10 정도만 이동한 위치에서 최적의 위치로 정합니다.
nexus = self.townhalls.ready.random # 완성된 넥서스 중 하나를 가져옴
pos = nexus.position.towards(self.enemy_start_locations[0], 10)
조건은 단순한 것이 최고이므로 별다른 조건 없이
남은 인구수가 3 미만이고 동시에 현재 건설하고 있는 파일런이 없는 동시에 파일런을 건설할 수 있다면
건설하도록 하는 단순한 로직을 수행하도록 하였습니다.
if (
self.supply_left < 3
and self.already_pending(UnitTypeId.PYLON) == 0
and self.can_afford(UnitTypeId.PYLON)
):
위 조건이 충족이 되었다면 파일런을 건설합니다.
await self.build(UnitTypeId.PYLON, near=pos)
아마 이전에 작성했던 프로브 코드에 의해 파일런이 2개밖에 지어지지 않을 것입니다.
코드를 작성하였다면
on_step에
await build_pylons()
를 추가해주세요.
최종 코드
async def build_pylons(self):
nexus = self.townhalls.ready.random # 완성된 넥서스 중 하나를 가져옴
pos = nexus.position.towards(self.enemy_start_locations[0], 10)
if (
self.supply_left < 3
and self.already_pending(UnitTypeId.PYLON) == 0
and self.can_afford(UnitTypeId.PYLON)
):
await self.build(UnitTypeId.PYLON, near=pos)
다음엔 가스와 게이트웨이를 건설하도록 하겠습니다.
'스타크래프트2 봇' 카테고리의 다른 글
압생트(Absinthe)봇 만들기 (#3) (0) | 2021.08.12 |
---|---|
압생트(Absinthe)봇 만들기 (#2) (0) | 2021.08.11 |
압생트(Absinthe)봇 만들기 (#0) (0) | 2021.08.09 |
스타크래프트2 인공지능 봇을 만들어보자 (#6) (0) | 2021.08.08 |
스타크래프트2 인공지능 봇을 만들어보자 (#5) (0) | 2021.08.07 |