"어둠 속에 숨어든 살인마를 찾아라!"
플레이어가 접속하는 순간, 운명은 정해집니다. 당신의 신분은 오직 당신만 알 수 있습니다.
모두가 잠든 밤, 마피아는 은밀한 대화 끝에 타겟을 제거하고, 의사는 동료를 치료하며, 경찰은 범인의 정체를 조사합니다.
날이 밝으면 처참한 결과가 공개되고, 살아남은 자들의 숨 막히는 토론이 시작됩니다. 단 한 번의 투표, 단 한 번의 기회!
시민과 마피아, 최후에 웃는 진영은 과연 누구일까요?
- Language: Java 21
- GUI: Java Swing (JFrame, JPanel)
- Network: Java Socket (TCP/IP), Multi-threading
- IDE: IntelliJ IDEA / Eclipse
실제 게임 플레이 영상입니다. 이미지 클릭 시 유튜브로 이동됩니다.
| 로그인(로비) | 게임 진행(낮) | 마피아 밀담(밤) |
|---|---|---|
![]() |
![]() |
![]() |
- 멀티플레이어 채팅: TCP 소켓을 활용하여 실시간 다중 접속 및 채팅 구현.
- 직업 배정 시스템: 게임 시작 시 시민, 마피아, 경찰, 의사 직업 랜덤 부여.
- 페이즈 전환: [밤] -> [토론] -> [투표] 순서로 게임 상태 자동 전환.
- 특수 능력 구현:
- 🔫 마피아: 전용 비밀 채팅방 제공, 밤마다 타겟 처형.
- 💊 의사: 타겟 치료 (마피아 지목 대상과 일치 시 생존).
- 👮♂️ 경찰: 타겟 조사 (마피아 여부 판별).
- 투표 시스템: 과반수 투표 시 플레이어 처형 및 생존자 판별 로직.
이 프로젝트는 유지보수와 확장성을 위해 다양한 디자인 패턴을 적용했습니다.
- MVC Pattern:
Model,View,Client구조 설계. - Singleton Pattern: 게임의 전체 흐름을 관리하는
사회자(Controller)객체를 유일하게 유지. - State Pattern: 게임의 상태(
밤,토론,투표)를 객체화하여, 복잡한if-else없이 상태별 행동(execute)을 관리. - Command Pattern: 클라이언트의 요청(
Join,Start,Message,Mafia_message,Target,System)을 캡슐화하여CommandManager가 처리하도록 구조화. - Observer Pattern: Swing UI 이벤트 리스너 처리에 활용.
- Factory Method Pattern:
Playr model생성을RoleFactory에 위임. - Strategy Pattern:
Playr Role에 따른skill구현.
src
├── client # 클라이언트 통신 (ClientManager, Thread)
├── server # 서버 통신 및 명령 처리 (ServerManager, CommandManager)
├── controller # 게임 로직 (사회자, IState, 밤/낮/투표 구현체)
├── model # 데이터 모델 (Player)
└── view # UI (Lobby, View2, MafiaChatView)
프로젝트 진행 과정과 팀원들의 소감을 담은 기술 블로그입니다.
- 🔗 박남규: https://seeoddstory.tistory.com/38
- 🔗 신윤하: https://shinyunha.tistory.com/27
- 🔗 이현경: https://velog.io/@eluda/Java-마피아-게임-프로젝트-후기
- 🔗 장은서






