오늘은 심화 팀 프로젝트를 시작하는 날이었다. 팀원분들과 기획을 하고, 역할 분담을 한 후에 각자 작업을 진행했다.
그와 별개로 최종 프로젝트에서 뱀서 라이크 게임을 제작하기 위해 리더 신청을 했다.
https://velog.io/@amberjack/C으로-풀기-수박수박수박수박수박수
나는 이 문제를 해결하기 위해 StringBuilder를 사용했는데, 위의 링크에도 정리를 해놓았지만 메모리의 단편화를 해결하기 위해 StringBuilder를 선택했다.
String형은 수정을 할 때 수정이 되지 않고 새로운 String을 할당하여 수정된 내용을 집어넣는다고 한다. 이 경우 이전에 선언한 String은 더 이상 참조를 하지 않지만 메모리를 사용하고 있는 문제가 발생하게 된다. 이를 메모리의 단편화라고 하는데 이를 해결하기 위한 방법 중 하나가 바로 StringBuilder라고 한다.
StringBuilder의 Append()를 사용하여 문자열의 끝에 새로 추가해줄 수 있기 때문에 이를 활용하여 문제를 해결했다.
using System.Text;
public class Solution
{
public string solution(int n)
{
StringBuilder sb = new StringBuilder(10001);
bool flag = true;
for (int i = 0; i < n; i++)
{
if (flag) sb.Append("수");
else sb.Append("박");
flag = !flag;
}
return sb.ToString();
}
}
내가 맡은 역할은 Enemy를 만드는 것이다. 다행히도 이전에 강의에서 들은 내용을 적용할 수 있을 것 같아 상태 머신을 만들고 애니메이션을 적용하는 것까지는 수월할 것 같다.
다만 우리 팀의 목표는 턴제 로그라이크 게임을 만드는 것인데, 우리가 레퍼런스로 삼은 게임인 Shattered Pixel Dungeon을 내가 해본 적이 없어 해당 게임의 턴이 어떤 방식으로 진행되는 지를 몰랐다. 그래서 Player를 작업하시는 분과 얘기를 하여 턴을 어떻게 진행할 것인지 상의를 했는데, 플레이어가 턴을 사용하면 TurnManager에서 플레이어가 사용한 turn 값을 Enemy에게 넘겨주고, 각각의 Enemy에서 지역 변수로 turn을 가지고 해당 턴의 크기를 넘지 않는 선에서 행동을 반복할 수 있는 방식으로 하기로 했다.
예를 들어, 현재 팀원분과 상의한 내용은 turn을 int형 변수로 선언하고 default 값으로 10을 넣기로 했다.
이 때, Player의 행동 속도가 5라고 가정해보자. 그러면 플레이어는 한 턴에 2회 행동할 수 있을 것이다.
마찬가지로 Enemy에게도 TurnManager에서 MonsterTurn이라는 이벤트를 구독하고 있다가, 해당 이벤트가 발생하면 매개 변수로 넘겨 받은 turn의 크기만큼 Enemy의 행동 속도를 비교하여 행동 횟수를 설정해주는 방식이다.
오늘은 이전에 팀을 했던 분과 함께 최종 프로젝트 리더, 부리더를 신청했다. 일단 얘기 된 내용은 뱀서 라이크 게임을 개발하자는 것인데, 팀원분과 상의하여 팀원 공고를 내야하기 때문에 일과 시간 이후에 상의를 하자고 약속을 했다. 벌써 최종 프로젝트라니... 생각만 해도 긴장이 되는 느낌이다. 과연 다른 분들이 팀원으로 합류해주실지도 의문이고... 여러모로 걱정이 깊어지는 밤이다.