시뮬레이션 게임을 만들때 가장 난제가 인공지능이더라. 앞으로 작업은 이쪽을 주로 만들어야 하는데 경험상 인공지능을 쉽게 만들려면 인간의 의사 결정을 돕는 시스템을 먼저 만들어 보는게 도움이 많이 되더라. 참고로 여기서 말하는 인공지능은 요세 핫한 머신 러닝이나 빅데이터가 같은건 아니다. 

  https://github.com/oidoi/TurnBasedGame

 

oidoi/TurnBasedGame

Contribute to oidoi/TurnBasedGame development by creating an account on GitHub.

github.com

 이 일지에 등장하는 코드는 여기서 볼수 있다. 물론 코드 업데이트는 조금씩 써나가는 일지보다 살짝 좀 느릴수가 있다. 보통 일지가 새로 넘어갈때 업데이트를 하기 때문이다. 

 일단 인공지능을 만들기 전에 선결과제로 범위형 이동 영역를 표시해 주는 지원 시스템의 문제점을 해결 하고 가야 겠다. 위 사진에서 보듯이 이게 이동시에 노드가 두번째 에어리어에 들어가는것이 있는데 클릭영역은 첫번째인 경우에는 길찾기를 아에 하지 않아야 한다. 이걸 해결하는 방법은 길찾기 리스트를 검색해서 해결할 수가 있을 꺼다. 

 아에 차원이 다른 해결책이 하나 있는데 그건 시야 기반 이동이다. 만약 지금 위치에서 보이지 않는 영역의 경우에는 한번에 바로 갈수가 없고 한번쯤 멈춰서야 살펴 한다는 거다. 지금까지 턴제 게임 중에 이런 시야기반 이동을 적용한 게임이 한번도 없어서 해도 되는지 모르겠다. 일단은 한번 만들어 보고 결정을 하도록 하자. 

 이게 기존의 턴제 게임의 경우에 이동력이 있으면 자기 기준으로 시야가 확보가 되기 않은 곳도 바로 이동을 할수가 있다. 그러나 사람은 위험을 기피를 하는 성향을 가지고 있다. 또한 불확실성하에서 의사결정은 최소 극대화 원리가 합리적인 사고의 원리로 작용을 한다. 자칫하면 죽을 수 있는 전장에서 시야 확보 없이 바로 뛰어드는 전사는 아무도 없을 것이다. 그런 점을 고려할때 시야가 확보된 곳으로만 일단 행동력을 하나 소모해서 이동을 할수가 있고 거기서 잠깐 경계를 한다음에 다시 이동이나 공격 여부를 결정하게 하는 것도 좋은 아이디어 인듯 싶다. 

  시야기반 이동 시스템을 적용하면 이렇게 된다. 

 뒤로 가기위해서는 이런식으로 이동을 한다음에 시야를 확보해야 가능하다. 

 플레이어의 이동 원리를 바꾸었으니 인공지능을 만들때도 이를 고려할 필요가 있을듯 싶다. 

 일단 움직이는 노선을 손보기 전에 이동후 원거리 공격과 관련된 코드를 마무리를 지여야 겠다. 지금은 되는지만 확인하려고 공격이 장애물이 있어도 뚤린 상태로 이루어 지고 있기 때문이다. 

 이런식으로 중간에 한번 멈춰주면 시야가 닿지 않았던 곳도 수동으로 이동을 할수가 있다. 

 랜덤 추출을 하는게 아니라 리스트를 셔플을 하면 와일이 아니라 폴이치를 쓸수 있을듯 싶다. 아침에 자고 일어나니까 문득 아이디어가 떠오르더라. 

 셔플은 예전에 인터넷에서 복사해둔게 있어서 그걸 썼다. 아직 캔시리즈의 내부는 안만들었다. 

 큰틀에서 이름만 잡아높고 구체적으로 해당 함수를 만들어 가는 걸로 진행중이다.

 랜덤하게 이동하는 것도 그냥 랜덤하게 이동을 하는게 아니라 플레이어와 최단거리 타일을 기준으로 그 근방에서 랜덤하게 움직이게 하면 될듯 싶다. 

 아니다. 그보다는 가까운 아군 캐릭터 근처로 가서 대기를 타는게 좋을듯 싶다. 무브엔 공격에서 레인지 체크를 제외한 알고리즘을 쓰면 될듯 싶다. 이렇게 하면 마치 캐릭터들이 뭉치게 되지 않을까 싶다. 

 나쁘지 않다. 이제 플레이어로 돌아가서 아군이든 적군이든 있으면 직사화기 공격이 안되게 만들어야 할듯 싶다. 그리고 에너미에도 이를 동일하게 적용한다. 이렇게 해야 원거리 무기에 어느정도 패널티를 부여할수 있을듯 싶다. 먼가 만드는게 슬슬 재미있어지는 구간이 오는듯 싶다.

 뒤로 도망가면 쫒아 오지 않는다. 이걸 해결하려면 마크드라는 개념을 도입 해야 겠다. 아직 식별이 안된 경우에 시야밖에 있을때는 쫒아 와서 공격하지 않는다. 그러나 일단 마크가 된다면 끝까지 쫒아가서 타격을 한다. 마크를 푸는 방법은 턴이 지날때 마다 차차 감소를 하게 하면 될듯 싶다. 

 물리기라는 개념을 만들껀데 이걸 어떻게 해야 할지 모르겠다. 일단 근접 캐릭터가 하나의 원거리 캐릭터를 마크를 하는 방식이 있을수도 있고 아에 주변에 근거리 캐릭이 하나라도 있으면 공격을 못하는 것도 나쁘지 않을듯 싶다. 일단 상식적으로 생각해 봤을때는 주시하고 있어야 총을 뽑을때 바로 칼빵을 때릴수가 있을듯 싶다. 근데 밸런스를 고려하면 일단 근접 캐릭터가 두칸 영역에 대해 이동후 공격을 사실상 할수가 없는 상황이기 때문에 그냥 옆에 있기만 하면 칼빵을 갈겨대는 것도 나쁘지 않을 듯 싶다. 이렇게 해야 어느정도 보정이 되니 말이다. 아니면 뒤에는 안되고 9개 타일중 6개만 되게 하는 것도 나름 합리적일 수가 있다. 근데 이렇게 한다면 이동이 끝나고 나서 어디를 바라볼지를 선택을 하는걸 따로 만들어 줘야 하는 문제가 있다. 

 일단은 8방향으로 만든다. 좀더 현실성 있는 메카니즘에 나중에 수정하도록 하자. 일단은 시연버전을 만들어서 Bic에 제출하는게 목표니 말이다. 

 근거리 유닛에게 물려 있는 상태에서는 원거리 공격이 되지 않는다. 이제 물린 상태에서 원거리 유닛이 이동을 하려고 하면 싸다구를 때리는걸 만들면 될듯 싶다. 먼가 게임이 디비니티 오리지날씬이나 워해머 메카니쿠스와 가까워 지고 있는듯 싶다. 엑스컴과는 점점 멀어지고 있다. 

 아 그전에 에너미 원거리 유닛도 물리면 이동으로 빠져나가지 않는 한 공격을 못하도록 만드는걸 선행하고 가야 겠다. 이게 현실에서는 검보다 권총이 훠월씬 이점이 있지만 게임에서도 그렇게 만들면 밸런스에 문제가 생긴다. 어느정도 도검 제일주의가 필요하긴 하다.  

 아 붙었을 때도 원거리 공격이 안되게 해야 겠다. 이거 이거 만드는게 넘 복잡해 지는듯 싶다. 다음에는 이런 기능은 넣지 말아야 겠다. 

 이런식으로 차이가 난다. 이것도 에너미가 고려하게 만들어야 한다. 아 글고 근접 유닛은 옆으로 지나가려고 하면 칼빵을 먹여 줘야 한다. 근데 이것까지는 구지 알려 줄 필요는 없을듯 싶다. 가령 롤도 킬데스는 알려줘도 전체 골드 수급량 같은거는 안알려 주니 말이다. 아니면 그냥 뚫고 지나갈수는 있도록 만들수도 있다. 뚫고 지날갈수 있는지 없는지가 중요한게 나중에 인공지능을 만들때 주된 고려 사항이 될수 있기 때문이다. 

 일단 그건 천천히 만들도록 하고 직사화기의 경우에는 옵스타클 뿐만 아니라 플레이너나 에너미도 뚫고 저격을 할수 없도록 해야 겠다. 그 그런게 가능한 무기는 따로 만들 생각이다. 물론 빅에 출시하는 시연 버전에는 뺀다. 

 플레이어까진 문제가 없는데 에너미가 문제다. 에너미의 경우에는 첫번째 에너미까지 검출을 해버리니 말이다. 

 잠시 잠깐 콜라이더를 껏다가 다시 키면 될듯 싶다. 

 꺼버리면 안뜨는데 이동할수 있다고 떠버리는게 또 문제다. 이걸 생각을 못했다. 

 이런식으로 해결 했다. 

 

'턴제제작' 카테고리의 다른 글

원거리 AI [영상]  (0) 2020.03.28
그럴듯 하게 만들기  (0) 2020.03.25
다시 작업 시작  (4) 2020.03.18
원거리 공격 만들기  (2) 2020.03.04
버그 수정  (0) 2020.03.01

WRITTEN BY
아이고이아

,