스타크래프트2 봇

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

오잎 클로버 2021. 8. 11. 12:00
728x90

이번에 구현하고자 하는 것은 게이트웨이(관문) 건설입니다.

공격 유닛을 생산하는 가장 기본적인 건물인 게이트웨이는 질럿(광전사), 파수기, 추적자, 사도 등 기본적인 유닛을 생산할 수 있는 건물입니다. 주변에 동력을 공급해주는 파일런(수정탑)이 있어야 합니다.

 

간단한 로직을 세워보자면

먼저 게이트웨이를 짓기 위해서는 넥서스(연결체)와 파일런(수정탑)이 각각 1개씩 있어야 건설할 수 있습니다.

또, 미네랄(광물)이 150이 요구되며, 해당 건물을 지을 프로브(탐사정)가 1기 요구됩니다.

건설 위치에는 반드시 동력이 공급되는 위치여야 합니다.

현재는 게이트웨이를 하나만 건설하도록 게이트웨이가 건설된 적이 없을 때에만 건설하도록 하였습니다.

 

위 로직대로 작성한 최종 코드는 이러합니다.

async def build_gateway(self):
    if (
      self.structures(UnitTypeId.PYLON).ready
      and self.can_afford(UnitTypeId.GATEWAY)
      and not self.structures(UnitTypeId.GATEWAY)
    ):
     	pylon = self.structures(UnitTypeId.PYLON).ready.random
        await self.build(UnitTypeId.GATEWAY, near=pylon)

structures 메소드에서 주의 경고가 뜨는 경우가 있습니다.

필자의 경우에는 인텔리제이를 사용하는 데, 경고 메시지가 존재하나, API상에서는 존재합니다. (문제없습니다)

structures 메소드는 모든 건물들을 중에 특정 건물이 있는 지를 확인하는 메소드로서

ready 메소드로 해당 건물이 완성되었는지 확인합니다.

 

can_afford 메소드는 해당 유닛을 생산 혹은 건설하는 데 있어 가능한지 불가능한지를 파악하는 메소드입니다.

 

위 코드를 on_step에 추가함으로써 마무리를 합니다.

※ async는 비동기 메소드이므로 반드시 await를 사용하여 작동시켜야 하므로 await를 사용하는 것입니다.

 

다음엔 가스(융화소/어시밀레이터)를 건설하도록 하겠습니다.