[멀티 뱀꼬리잡기 게임]
1) 진행 기간 : 2015.06(3주)
2) 주요 내용
2-1. 뱀이 먹이를 먹으면 꼬리가 길어지는 게임을 모티브로 아이템을 먹으면 속도 증가, 방향키 반전, 자동 이동 등의 공격이 가능합니다.
2-2. 여러명의 유저가 서버에 접속하면 2명씩 짝이 이루어질 때 매칭을 시켜서 게임이 시작됩니다.
3) 본인이 공헌한 점
3-1. 멀티 프로세스 서버 - 멀티 쓰레드 클라이언트 메시지 처리 설계/구현
3-2. 싱크 처리
3-3. 게임로직 구현
4) 사용한 Skill 또는 지식
- 멀티프로세스 기반 서버로 shared nothing desing, crtitical section에 대한 잠재적 버그 제거, 접속한 클라이언트의 소켓디스크립터가 짝수개일 때 자식 프로세스 생성해 게임 매칭
- 멀티 쓰레드 기반 클라이언트로, 총 3개의 쓰레드를 통해 각각 메시지를 보내는 역할, 메시지를 받아 처리하는 역할, 본인 화면 처리하는 역할
- 싱크처리는 클라이언트 단에서 정해놓은 메시지 프로토콜에 따라 보정할 수 있는 정보를 넣어서 보정하도록 처리
5) 결과/성과
- 소켓 프로그래밍을 경험
- 멀티 프로세스와 멀티쓰레드에 대한 이론적 이해를 기반으로 프로젝트에 적절하도록 구조 설계, 개발 경험
- 싱크 처리에 대한 고민
- A* 알고리즘에 대한 공부 : 프로젝트 마감 기간까지 시간이 남으면 구현하려 했던 기능으로, 맵에 장애물이 있을 때 알아서 피하며 먹이를 먹을 수 있도록 최적의 경로로 이동하도록 구현하려 하였고, DFS나 BFS로 완전 탐색하여 최적의 경로를 찾을 수도 있었으나 비효율적이라 생각하였고 장애물이 있을 때 최적의 경로를 구하는 방법은 없을까 고민하다 A* 알고리즘을 찾게 되어 공부할 수 있었음.