레이어7 팀프로젝트 - 멀티 테트리스

1. 프로젝트 제목

멀티 테트리스

2. 프로젝트 깃허브링크

github.com/kim-yeon-gyu-exlock/multi-tetris

3. 프로젝트 주제

개인프로젝트때 진행했던 테트리스가 재미있어서, "C언어 테트리스를 두명이서 즐기게 해주자!" 라는 생각을 팀원들끼리 공유하게 되어 "두명이서 즐기는 테트리스" 로 정했다.

4. 프로젝트를 같이 한 사람

김연규: 팀장, 컬러 표시기능 추가, 멀티유저 출력, 코드 검수(함수명 통일, 다른 사람들의 코드를 main소스에 합치기 등)
전민기: p2p에서 서버를 맡고, 테스트를 위한 에코서버를 제작함
진예서: 소켓 프로그래밍에서 유저로부터 입력이 들어올때마다 이를 상대방쪽으로 보내는 코드를 짰음
정우진: 회전 알고리즘 개선하려고 했으나, 능력의 한계로 인트로부분 제작

5. 프로젝트 제작 기간

6/20 부터 전체적인 구상과 소켓프로그래밍 공부를 시작하여, 7/15일 새벽까지 프로젝트를 제작하였다!

6. 자신이 맡은 역할

팀장으로서 팀원들이 짰던 코드를 개선하여 버그를 수정한다거나 main소스에 코드를 합치는 역할을 했다.
또한 컬러 표시기능, 멀티플레이어 유저의 화면을 출력하는 부분을 쓰레드를 활용하여 작성하였다.

7. 프로젝트 일정

6/20: 전체적인 역할 분담을 했고, 각자 소켓프로그래밍을 공부하며 개인적으로 보고서를 작성을 시작하며 프로젝트를 시작하였다.
6/22: 소켓 프로그래밍을 공부하며 해당 내용을 블로그에 보고서로 작성하여 올렸고, 실제로 작동하는 예제 또한 만들며 이번 팀플의 필수 조건인 소켓프로그래밍 기능을 넣었다.
7/10: 베이스코드를 작성한 뒤, 회의를 통해 소켓프로그래밍에 사용할 메시지의 규약(?)을 정했다.
7/13: 소켓 기본 틀 및 송신, 수신부분을 제작하였다. 또 컬러 추가 및 블럭 예측기능을 추가하였다.
7/14: 송신부분에서 발생한 에러를 수정하였고 약속한 규약에 따라 메시지를 보내는 기능을 만들었다. 이후 인트로를 제작하였다.
7/15: 멀티플레이어쪽 기능을 완성하였다.

8. 프로젝트 제작 동기

팀프로젝트라는 과제를 받고나서 팀원들과 많은 아이디어를 내려고 생각해보았지만, 레이어7 부원들이 테트리스를 너무 즐겨하는탓에 기존 테트리스에 멀티기능을 추가하는것만큼 좋은 아이디어가 없을것이라 생각하여 본 프로젝트를 제작하게 되었다.

8. 프로젝트 작품 소개

일단은 기본적으로 저번에 만들었던 개인프로젝트 테트리스 소스를 기반으로 작성하였고, 그래서 핵심 로직부분은 저번과 같다.
헤더로는 소켓 통신을 위한 WinSock2.h, 쓰레드를 위한 process.h가 기존 소스에 추가 되었고, 

소켓 통신에 사용되는 다음과 같은 함수들이 추가 되었다. 이들은 send()를 wrapping 하는 함수로써 각각 약속된 규약에 맞추어 상대방을 향헤 메시지를 보내는 역할을 한다. 또한 다음과 같은 함수들도 추가되었다.
소켓의 메시지를 바탕으로 멀티플레이 유저의 화면을 그려주는 handleSocket, 그리고 그 작업의 내부적인 처리를 위해 필요한 함수 makeOpponentBlock, 상대방의 점수를 표시하는 printScoreOfOpponent, 맵을 재 출력하는 rePrintOpponentMapTo등도 뺴놓을수 없겠다.
그리고 소켓 도중 에러를 핸들링 하기 위한 에러라는 함수도 넣었따.

이외에도 짜잘하게, 예측기능이나 반쪽짜리 컬러기능도 넣어 기존보다 편의성을 높이고자 하였다.

10. 프로젝트 실행화면




11. 느낀점

'프로젝트의 관리자' 라는 역할과 프로그래머는 사실 꽤나 다르다는것을 느꼈다. 프로젝트가 끝에 다가갈수록 우리 팀원들이 아마 부족한 팀장덕에 고생을 많이 했을것이라는 생각을 하며 코딩을했다.
얼마나 코드를 빨리짜고, 얼마나 복잡한 기능을 구현할 수 있는지와 마찬가지로, 언제까지 어떤 기능을 구현할지와 같은 구체적인 계획의 확실한 수립과 추진력있는 이행이 성공적인 프로젝트를 만들지 않나 하는점을 배웠다.

Comments

Popular Posts