https://drive.google.com/file/d/1b9vKhuzZ4pjE4UMbTWPidGl43IPbh7zM/view?usp=sharing
— lcd에 남은 시간 출력에 그림 첨부
본 프로젝트는 TCP 네트워크 기반 마피아 게임을 구현한 것으로, 멀티 클라이언트 지원, 게임 페이즈 제어, I2C LCD 디바이스 드라이버 연동, 그리고 멀티스레드 동기화(Thread & Mutex) 기법을 사용함
Client 1 Client 2 ... Client N
│ │ │
▼ ▼ ▼
┌──────────────────────────────────────────┐
│ 🧠 Game Server (C) │
│ - TCP 접속 관리 (socket) │
│ - Thread별 클라이언트 처리 │
│ - Mutex로 게임 상태 보호 │
│ - LCD 드라이버를 통한 상태 출력 │
└──────────────────────────────────────────┘
│
▼
/dev/lcd_i2c (I2C LCD 디바이스)
구성 요소 | 설명 |
---|---|
client.c |
사용자가 접속하여 게임을 플레이할 수 있는 클라이언트 프로그램 |
server.c |
서버에서 플레이어 연결, 게임 로직 관리, LCD 출력 포함 |
game.c |
마피아 게임의 역할 분배, 투표 처리, 승리 조건 등 핵심 게임 로직 |
network.c |
TCP 소켓 기반 서버/클라이언트 소켓 생성 유틸리티 |
utils.c |
문자열 처리 도우미 함수 (예: 개행 문자 제거 등) |
pthread_create
)에서 처리game_loop
)과 클라이언트 입력 처리(handle_client
) 사이에 pthread_mutex_t game_mutex
사용게임은 다음과 같은 페이즈(phase) 기반으로 동작
PHASE_WAIT
MIN_PLAYERS
(기본 5명) 모이면 역할을 무작위로 배정game.c::assign_roles()
사용, 5명 기준 마피아: 1, 경찰:1, 의사:1, 시민:2