0. 프로젝트 완료 보고서
제출일 : 2025.10.19(일)
|
개발 완료 보고서
|
||||
|
프로젝트
|
명코파크
|
|||
|
개발인원
|
이명진
|
|||
|
활동일시
|
25.10.13 ~ 25.10.19
|
장소
|
공학 1관 드론융합실
|
|
|
주요주제
|
협동 물리 2D 게임 구현
|
|||
|
개발 환경
|
- OS : Windows 11
- Language : C#
- IDE : Microsoft Visual Studio
- Framework : .NET 9.0 (WinForms)
- VersionControl : GitHub
|
|||
|
구현기능
|
1. 닉네임 입력 후 로그인 기능
2. 수평으로 좌우 이동
3. 수직으로 점프
4. 추락
5. 별 획득
6. 문 열기
7. 멀티
|
|||
|
예상문제점
|
1. Winform은 업무용 데스크톱 UI용 프레임워크이기 때문에 멀티 기능 또는 실시간 그래픽 처리가 약함
2. 물리적 요소를 구현하여야 함(중력 및 충돌)
|
|||
|
해결방법
|
1. 멀티 기능은 비동기적으로 클라이언트의 접속을 지속적으로 처리할 수 있도록 함.
2. 실시간 그래픽 처리의 경우 더블 버퍼를 이용해 깜빡임을 최소화하려고 하였음.
3. 물리적 요소는 크게 수평과 수직의 충돌과 중력의 적용을 받아 공중에서는 떨어지는 효과를 구현해야하는데 물리 루프에서 중력과 바닥의 충돌을 담당하고, 충돌 루프에서 캐릭터 및 발판과의 수평 수직 충돌을 담당하였음.
|
|||
|
요구사항 분석서 체크리스트
|
1. 참조
|
|||
|
수정 문서
|
2. 참조
|
|||
|
구현 스크린샷 및 기능 설명
|
3. 참조
|
|||
|
실행 영상
|
4. 참조
|
|||
|
소스코드
|
5. 참조
|
|||
|
개인 개발 후기
|
6. 참조
|
|||
1. 요구사항 분석서 체크리스트
|
유형
|
요구분석 내용
|
|||
|
분류
|
세부내용
|
USE
CASE
|
수행
여부
|
|
|
시작
|
시작화면
|
시작화면 출력
|
UC01
|
⭕
|
|
기능
|
1. 닉네임 입력
2. 입장
|
|||
|
메인
|
메인화면
|
게임을 할 수 있는 메인화면 출력
|
-
|
⭕
|
|
이동
|
기능
|
좌우 이동(캐릭터 x좌표 이동)
|
UC02
|
⭕
|
|
점프
|
기능
|
1. 점프(캐릭터 y좌표를 위 방향으로 이동)
2. 중력(캐릭터 y좌표를 아래 방향으로 이동)
|
UC03
|
⭕
|
|
충돌
|
기능
|
별 획득 및 문에 대한 충돌시 해당하는 이벤트 발생
|
-
|
⭕
|
|
별
|
기능
|
별과 충돌 시 캐릭터에게 별 고정
|
UC04
|
❌
|
|
문
|
기능
|
문과 충돌 시 해당 캐릭터는 클리어 상태가 됨
|
UC05
|
⭕
|
|
클리어
|
기능
|
모든 캐릭터들이 클리어 상태가 되면 최종 클리어 됨
|
UC06
|
⭕
|
|
종료
|
종료화면
|
종료화면 출력
|
UC07
|
⭕
|
|
별
|
변경점
|
별 획득 시 문이 개방됨
|
||
2. 수정문서
없음
3. 구현 스크린샷 및 기능 설명
SERVER

▲ 서버에서는 클라이언트의 요청을 무엇을 받았는지, 그 요청에 대해 어떻게 처리를 했는지를 콘솔창으로 출력
CLIENT


▲ 첫 시작화면(닉네임 입력과 로그인)

▲ 첫 게임화면(0~200 사이에서 랜덤 스폰, 별 위치 고정, 문 고정)

▲ 별 획득 시 문 열림(문으로 입장 시 다음 맵 로드)

▲ 다음 맵으로 이동



▲ 협동을 통해 별 획득

▲ 게임종료 화면(재시작 및 종료 선택 가능)
4. 실행영상
https://www.youtube.com/watch?v=la0Oyxnner4&t=4s
5. 소스코드
ZIP : 최대 20MB 까지 업로드가 허용되어 업로드 불가
GIT : https://github.com/mmmmz986/MCO_PARK
GitHub - mmmmz986/MCO_PARK: [LMS7 23/28주차] 1013 C# 윈폼 기반 온란인 멀티 게임(C# 윈폼 명코파크)
[LMS7 23/28주차] 1013 C# 윈폼 기반 온란인 멀티 게임(C# 윈폼 명코파크) - mmmmz986/MCO_PARK
github.com
6. 개발후기
기존 로컬 게임에서는 키 입력 -> 로직 -> 출력 의 순서였지만 멀티 게임에서는 클라이언트 키 입력 -> 서버로 전송 -> 서버의 로직 -> 모든 클라이언트 브로드캐스트 -> 클라이언트 출력의 순서로 진행이 되었다.
처음 시작할 때 공통 프로토콜을 만들었는데 이유는 제일 처음 TCP IP 네트워크를 이용한 프로젝트를 할 때 서버에서 필요한 변수들이 클라이언트에서도 필요할 때가 많았고, 그 반대의 경우도 많았기 때문에 한번 정의 후 using해서 사용하면 매우 편리할 것이라 생각했기 때문이었다.
또한 게임이 타인의 머리 위로 올라가 점프를 하는 등 협동을 요하는 게임이였기 때문에 캐릭터-캐릭터 및 캐릭터-발판 간 물리적으로 겹쳐지는 상황이 나오면 안되었는데 이는 미리 사각형 박스를 만들어 겹쳤을 때는 캐릭터의 좌표를 최소한으로 보정하면서 브로드캐스트해서 해결하였다.
예전 2d 게임을 만들면서 느꼈지만 게임은 보기에는 단순한 것 같지만 내부에 보이지 않는 로직들이 많은 것을 수행하고 있는 것 같다.
다음은 게임 말고 UI를 극대화 할 수 있는 관리 프로그램을 만들어보고 싶다.
'C# > Project' 카테고리의 다른 글
| [LMS7 27/28주차] 1114 WPF 자유 프로젝트 "RCS (차량 원격 제어 시스템)" 완료 보고서 (0) | 2026.05.06 |
|---|---|
| [LMS7 27/28주차] 1114 WPF 자유 프로젝트 "차량 원격 제어 시스템" 개발계획서 (0) | 2026.05.06 |
| [LMS7 23/28주차] 1013 C# 윈폼 기반 온라인 멀티 게임(C# 윈폼 명코파크) 개발 계획서 (0) | 2025.11.11 |
