원숭이 서바이벌 제작 회고
뭐라도 만드는 오물개 입니다.
이 글은 Svelte 를 한 번 써봐야지 마음을 먹고 프로젝트 생성 했다 만들게 없어 아무거나 만든 이야기 입니다.
바로 시작
제작배경
처음엔 무니무니교수 유튜브 이 유튜브를 보고 유전 알고리즘 시뮬레이션을 만들려고 했었다.
만들다 보니 단순 시뮬레이션은 재미가 없고. 결과도 뻔하다.
접으려다 게임적 요소를 넣을 수 있겠다 싶어 만들어 봤다.
나는 남자라 칼을 뺏으면 무라도 썬다.
기획
최초 기획
1. 초기세팅
- 원수이 20마리 생성 : 각 원숭이는 랜덤한 속도, 힘, HP를 갖는다.
- 맵 크기 : 800 * 800
2. 스테이지 시작(바나나 뿌리기)
- 뿌려지는 바나나 수 : 현재 살아있는 원숭이수 - 1
- 바나나 위치 : 맵 내 랜덤한 위치
3. 스테이지 종료조건
- 시간 제한 : 스테이지는 5초동안 진행된다.
- 종료 시점 : 5초가 지났더나, 모든 바나나가 먹혔을 때 스테이지 종료.
4. 원숭이 기능
- 탐색 : 원숭이들은 가장 가까운 바나나를 향해 이동한다.
- 섭취 : 원숭이가 바나나를 먹으면 체력이 1 증가.
5. 스테이지 종료 후 변화
- 체력 감소 : 스테이지가 끝나면 모든 원숭이들의 체력이 1 감소.
- 탈락 조건 : 원숭이 체력이 0이되면 탈락.
정리하자면 매 스테이지마다 원숭이 20마리 뿌리고 바나나 쟁탈전. 바나나를 먹어 체력을 1 이상 유지한 원숭이만 생존, 0인 원숭이는 탈락.
별 거 없다.
그래서 재미도 없다.
그래서 조금씩 내용을 추가 했다.
개선내용
1. 의미 없던 지능 을 속도 계산 산식에 추가함.
let speed = Math.random() * 1.5 + 0.5; // 0.5~2
let effectiveSpeed = speed * (0.9 + intelligence / 10);
지능값을 생성해 뒀지만 어떻게 쓸까 하다가 똑똑한 원숭이가 더 효율적으로 움직이면 빨리지겠지? 라는 생각으로 effectiveSpeed 를 만들었다.
그랬더니 속도가 빠른 원숭이들이 너무 유리해졌다.
2. 충돌효과를 구현해서 힘이 강한 원숭이와 약한 원숭이가 부딫혔을때 약한 원숭이가 튕겨나가게 했다.
그럼에도 속도 빠른 원숭이가 압도적으로 유리했다.
3. 힘이 쎈 원숭이를 더 크게 만들었다.
조금 개선되었지만 큰 의미가 없었다. 또 크기가 너무 커지면 원숭이들이 뭉쳐서 움직이지 못하는 경우가 많았다.
4. 원숭이 스탯 분배를 제한했다.
스탯 차이가 너무 크지 않으니 좀 나아졌지만 아직도 빠른게 최고다.
5. 이동거리에 따라 HP를 감소 시켰다.
이렇게 되니 빠르지만 비효율적으로 움직이는 원숭이들의 탈락 비율이 올라갔다.
하지만 압도적으로 빠른 원숭이들은 여전히 우승 가능성이 높았다.
6. 스테이지 시작 시 꼴찌 원숭이에게 보너스 스탯을 준다.
마지막이 될 수록 꼴찌 원숭이가 역전할 가능성을 만들어 주었다. 약간 효과가 있었다.
7. 게임 시작 시 우승 예상 원숭이를 선택하게 했다.
벨런스적인 부분만 수정하다가 게임적 요소를 추가했다.
8. 기타 추가 내용
- 일정 확률로 스페셜 바나나를 뿌리게 했다.(먹으면 보너스 스탯 획득)
- 지능이 높으면 스페셜 바나나를 우선적으로 탐색하게 했다.
지능이 높은 원숭이는 일정 확률 체력을 회복하도록 했다.- 빠른 진행을 위해 배속 기능을 추가했다.
- 원숭이 목록에서 스탯이 실시간으로 변경되게 수정했다.
후기
처음엔 스벨트가 뭔지 확인하려다가 갑자기 원숭이 서바이벌이 됐다.
원숭이 바나나 쟁탈전이란 간단한 기획이었는데 재미와 벨런스를 생각하면서 추가할 내용이 많았다.
페이지 하단에 댓글 기능을 추가해 두었다.
의견이 있고 내 마음이 내킨다면 조금씩 수정해 보겠다.
링크를 남기면서 원숭이 서바이벌 제작기 끝