

"개발자가 된 이유가 제목인데 웬 게임?" 이라고 생각할 수도 있다.
1. 유즈맵
정확히 말해서는 게임 자체가 개발이라는 것은 아니다.
다들 스타크래프트라는 게임을 많이 알고있을거다.
그럼 혹시 유즈맵이라는 말은 들어본적이 있는가?
풀어서 말해보면 게임사가 아닌 유저가 직접 맵을 만들고 배포하여
다른 유저들과 게임을 할 수있는 시스템이다.
나는 게임을 하는 것을 떠나서 제작/창작에 흥미를 가졌고 이것이 나의 첫 개발이었다.
2. why? 게임 만들기 = 개발?
"그래서? 게임속에서 게임 만드는게 왜 개발인데"
아직 이렇게 생각하는 사람이 많을 것이다.
이번 블로그에서 직접 맵을 하나 만들어 보며 이것을 설명하려고한다.
3. 사업 아이템 = 아이디어
처음 서비스를 시작하기 위해 가장 먼저 해야할 일은 사업 아이템을 구상하는 것이라고 생각한다.
맵을 만드는 일도 똑같다.
아무것도 없는 백지 속에서 나만의 무언가를 만들어가야했다.
맵을 만드는 것을 하나의 프로젝트라고 부르겠다.
프로젝트를 시작하기전 많은 고민 필요했다.
우선 당연하지만 테마가 있어야 했다. ex) rpg, aos, fps, 성지키기, 성부수기
기존에 있는 것에 영감을 받아 진행할 것인지 아예 없던 새로운 것을 만들 것인지 결정해야했다.
또한 아무리 좋은 아이템이어도 사람들이 흥미 자체를 가지고 있지 않으면 그것은 망한 아이템이었다.
여러 방을 탐색하면서 많은 사람들이 어떤 형식의 게임을 좋아하는지 시장조사가 필요하였다.
마찬가지로 아이디어는 멋지지만 그것을 직접 실현할 능력을 가지고 있지 않으면 안됐다.
4. 맵 제작 시작
나는 이 게임을 모르는 사람들한테는 생소할 수도 있지만
비교적 만들기 쉬운 "폭탄피하기"라는 주제로 맵을 만들어 볼 것이다.
폭탄피하기에 대한 자세한 설명은 아래에서 보고 우선은 큰 틀이 필요하였다.
.png)
지금은 프로젝트가 작아서 내용이 적지만, 프로젝트가 클수록 복잡도와 내용은 배가 된다.
이렇게 전체적인 틀을 작성하였으면 이제 코드를 치는 시간이다.(실제 코드를 치지는 않는다.)

자 맵을 만들려고 프로그램을 시작하면 처음에 나오는 화면이다.
말 그대로 허허벌판이다.
이것을 보면 무엇이 연상되지 않는가?

그렇다 vscode를 처음 눌렀을 때 나오는 화면과 유사하다.
내가 처음 이 프로그램을 켰을 때 무언가 익숙함을 느낀 이유였다.
5. 지형 만들기
나는 이것을 하나의 사이트라고 보면 지형 만들기는
기초 프론트 적인 틀을 만드는 것과 유사한 작업이라고 생각한다.
.png)
이런 식으로 css를 사용하듯 내가 원하는 위치에 원하는 지형들을 적재적소 직접 다 만들어 줘야했다.
6. 기능 구현
지형을 다 만들었으면 이제 실제 기능 구현 차례이다.
우선 여기서는 트리거라는 개념이 있는데 간단히 설명하면
이렇게 세 가지로 나눠진다.
간단하게 예시를 들면
1플레이어가 / 특정 위치에 도착하면 / 승리한다.
이렇게 세 개의 조건이 합쳐진 것이 하나의 트리거로 작용한다.
지금 생각하면 코드를 치는 것과 거의 유사하였다.
물론 여기서는 툴자체가 자동으로 코드를 입력해주었지만,
그 코드 한줄 한줄을 이어 주는 것은 온전히 나의 몫이었다.
조건

행동

이런 식으로 조건+행동이 조합된 수 많은 트리거들로 하나의 맵을 만드는 것이다.
Conditions:
Always();
Actions:
Create Unit("Player 8", "Zerg Overlord", 1, "1-1");
Create Unit("Player 8", "Zerg Overlord", 1, "1-2");
Create Unit("Player 8", "Zerg Overlord", 1, "1-3");
Kill Unit At Location("All players", "Any unit", All, "1-1");
Kill Unit At Location("All players", "Any unit", All, "1-2");
Kill Unit At Location("All players", "Any unit", All, "1-3");
Wait(500);
Create Unit("Player 8", "Zerg Overlord", 1, "2-1");
Create Unit("Player 8", "Zerg Overlord", 1, "2-2");
Create Unit("Player 8", "Zerg Overlord", 1, "2-3");
Kill Unit At Location("All players", "Any unit", All, "2-1");
Kill Unit At Location("All players", "Any unit", All, "2-2");
Kill Unit At Location("All players", "Any unit", All, "2-3");
Wait(500);
Preserve Trigger();
}
그리고 예전에는 알지 못하였는데 지금 개발적인 지식을 쌓고 다시 보니
모든 트리거들이 이렇게 코드의 형식으로 돼있다는 것을 깨달았다.
7. 완성 영상

내용이 지금도 길지만 더 길어질 거 같아서 만드는 세세한 과정은 생략하였다.
가지고 있는 유닛으로 터지는 타이밍을 맞춰서 마지막까지 가면 승리하는 간단한 맵이다.
하지만 실제로 만들면 꽤 세세한 것까지 다 신경쓰면서(디자인적 요소까지...) 만들어야했다.
8. 맵 제작과 개발의 공통점
9. 마무리
쓸데없는 맵에 대한 내용이 너무 많이 들어간 것 같지만,
내가 어떤식으로 개발이라는 것에 처음 빠지게 됐는지 세세하게 쓰고 싶었다.
내가 처음으로 좋아했고 앞으로도 좋아할 취미이자 친구같은 개발이다.
나는 개발하는 것이 재밌고 늘 새로운 것과 효율적인 것을 추구하며 끊임없이 공부하고
취미가 개발인 개발자를 하고싶다!!!!!
전에 스타 폭피같은 유즈맵들을 하면서 이런것들은 어떻게 만드는거지... 생각만하고 넘어갔던 적이 많았는데 개발과 비슷한 부분들이 많네요. 재미있게 잘 읽었습니다.
재밌는 이야기네요! 게임의 룰을 만들어본다는 것은 개발을 배우기 제일 좋은 방법이라고 생각합니다 :)
유즈맵은 구조가 잘 만들어져있어서 나중에 코드를 설계하는 경험에도 큰 도움을 줄거에요~
멋진 개발자가 되기를 바랍니다!!