스타크래프트2 봇

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

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

이번에 구현하고자 하는 것은 유닛 생산입니다.

사실 유닛 생산하는 것과 공격하는 것까지 구현했다면 스타크래프트에서는

반은 완성했다고 생각하면 됩니다. 개인적으로 광전사들을 뽑기를 생각하였으나, 난이도 어려움을 이기기에서 광전사들로 만 하여 이기는 것은 꽤 어려움이 있을 것이라고 판단하였습니다.(물론 광전사의 돌진과 컨트롤들을 만들면 안 될 거야 없긴 하지만 귀찮으니까요)

 

그래서 어떤 유닛을 생산할지를 고민하다가 가장 적절한 유닛이 떠올랐습니다. 추적자입니다. 원거리 유닛이고 중장갑한테도 나름 큰 피해를 줄 수 있기 때문에 추적자만을 뽑도록 하였습니다.(귀차니즘이 위험한 이유)

 

로직도 대충 생각하는 데로 적어도 작동하는 데에는 큰 문제가 없습니다. 게이트가 있고, 게이트가 아무것도 생산 중이 아니라면 추적자를 생산하도록 하는 것이 전부입니다.

async def train_stalkers(self):
    for gate in self.structures(UnitTypeId.GATEWAY).ready:
        if (
            self.can_afford(UnitTypeId.STALKER)
            and gate.is_idle
        ):
            gate.train(UnitTypeId.STALKER)

 

추가로 게이트가 하나밖에 없기 때문에

4개까지 늘려주도록 합니다.

async def build_four_gates(self):
    if (
        self.structures(UnitTypeId.PYLON).ready
        and self.can_afford(UnitTypeId.GATEWAY)
        and self.structures(UnitTypeId.GATEWAY).amount < 4
    ):
        pylon = self.structures(UnitTypeId.PYLON).ready.random
        await self.build(UnitTypeId.GATEWAY, near=pylon)

다음번에는 연결체에서 사용할 수 있는 능력인 시간 증폭을 구현할 것입니다.