|
1 | 1 | # 체스 클라이언트 기능명세 |
2 | 2 |
|
3 | 3 | - 여러 화면과 다이얼로그가 존재. 추후 확장성을 고려해야함. |
4 | | -- 모든 화면은 가장자리에 테두리가 존재함. |
5 | 4 | - 서버와의 연동을 고려하여 확장성 고려해서 제작 (서버와의 통신은 common/PROTOCOL.md 참조) |
6 | 5 | - 유니코드 문자를 사용한다는 점을 고려 |
7 | | -- 프로덕션 레벨에 준하는 수준으로 제작 (단, 너무 많은 기능을 구현하지는 말것 (점진적으로 개발 예정이므로)) |
8 | 6 |
|
9 | 7 | ## 구현된 기능 |
10 | 8 |
|
11 | 9 | ### 🎮 메인 화면 |
12 | 10 | - 게임 시작, 옵션, 종료 메뉴가 존재하고 게임 시작 메뉴에서 다이얼로그로 유저이름을 입력받음 |
13 | | -- 키보드 (1, 2, 3) 또는 마우스로 메뉴 선택 가능 |
14 | | -- SIGINT(Ctrl+C) 신호 무시로 의도치 않은 종료 방지 |
15 | 11 |
|
16 | 12 | ### 🔍 매칭 화면 |
17 | 13 | - 매칭이 시작되면 매칭 대기 중 메시지가 표시되고 업타임을 보여줌 |
18 | 14 | - 취소 버튼(ESC)을 누르면 취소됨 |
19 | | -- 매칭이 완료되면 게임 화면으로 이동 (현재는 5초 후 자동 이동) |
| 15 | +- 매칭이 완료되면 게임 화면으로 이동 |
20 | 16 |
|
21 | 17 | ### ♟️ 게임 화면 |
22 | 18 | - 체스 보드가 왼쪽에 표시되고, 오른쪽에 채팅과 게임 메뉴가 표시됨 |
|
26 | 22 | - 선택된 기물은 하이라이트로 표시 |
27 | 23 |
|
28 | 24 | #### 📢 채팅 시스템 |
29 | | -- 채팅 메시지가 표시되고, 시스템 메시지 지원 |
30 | | -- 최대 50개 메시지 저장, 12개까지 화면에 표시 |
31 | | -- 오래된 메시지는 자동으로 제거 |
32 | | - |
33 | | -#### 🎯 게임 메뉴 |
34 | | -- 기권, 무승부 제안, 게임 저장, 메인으로 돌아가기 기능 |
35 | | -- 현재 턴 표시 |
36 | | -- 키보드 단축키 지원 (1-4번) |
| 25 | +- 채팅 메시지가 표시되고, 시스템 메시지 또한 표시 |
37 | 26 |
|
38 | 27 | ### 🎨 UI/UX 특징 |
39 | | -- 유니코드 체스 기물 사용 (♔♕♖♗♘♙♚♛♜♝♞♟) |
40 | 28 | - 체스판 흑백 칸 색상 구분 |
| 29 | +- 현재 턴 표시 |
41 | 30 | - 선택된 기물과 칸 하이라이트 |
42 | | -- 테두리가 있는 윈도우 기반 UI |
43 | 31 | - 반응형 레이아웃 |
44 | 32 |
|
45 | 33 | ## 빌드 및 실행 |
46 | 34 |
|
47 | | -### 요구사항 |
48 | | -- Linux 환경 |
49 | | -- 최소 터미널 크기: 90x25 |
50 | | -- ncurses 라이브러리 (ncursesw) |
51 | | -- pthread 라이브러리 |
52 | | - |
53 | 35 | ### 빌드 방법 |
54 | 36 | ```bash |
55 | 37 | # 루트 디렉터리에서 |
56 | | -./build.sh client |
57 | | - |
58 | | -# 또는 클라이언트만 빌드 |
59 | | -cd build |
60 | 38 | make client |
| 39 | + |
| 40 | +# 또는 |
| 41 | +./build.sh client |
61 | 42 | ``` |
62 | 43 |
|
63 | 44 | ### 실행 방법 |
64 | 45 | ```bash |
65 | 46 | # 빌드 완료 후 |
66 | | -./build/client/client |
67 | | - |
68 | | -# 또는 build 디렉터리에서 |
69 | | -cd build/client |
70 | | -./client |
71 | | -``` |
72 | | - |
73 | | -## 사용법 |
74 | | - |
75 | | -### 메인 화면 |
76 | | -1. `1` 키 또는 마우스 클릭으로 게임 시작 |
77 | | -2. 사용자명 입력 다이얼로그에서 닉네임 입력 |
78 | | -3. `3` 키 또는 `q`로 프로그램 종료 |
79 | | - |
80 | | -### 매칭 화면 |
81 | | -- 자동으로 상대방을 찾습니다 (현재는 5초 후 시연용 게임 시작) |
82 | | -- `ESC` 키로 매칭 취소 가능 |
83 | | - |
84 | | -### 게임 화면 |
85 | | -- **기물 선택**: 체스판의 기물을 마우스로 클릭 |
86 | | -- **기물 이동**: 선택된 기물을 다른 위치로 클릭하여 이동 |
87 | | -- **선택 해제**: 같은 기물을 다시 클릭 |
88 | | -- **게임 메뉴**: |
89 | | - - `1`: 기권 |
90 | | - - `2`: 무승부 제안 |
91 | | - - `3`: 게임 저장 (미구현) |
92 | | - - `4` 또는 `ESC`: 메인 화면으로 돌아가기 |
93 | | -- **채팅**: `Enter` 키로 간단한 인사말 전송 |
94 | | - |
95 | | -## 향후 구현 예정 기능 |
96 | | -- [ ] 실제 서버 연동 |
97 | | -- [ ] 완전한 체스 규칙 구현 (캐슬링, 앙파상, 프로모션 등) |
98 | | -- [ ] 실시간 채팅 입력 |
99 | | -- [ ] PGN 형식 게임 저장/불러오기 |
100 | | -- [ ] 타이머 기능 |
101 | | -- [ ] 게임 리플레이 |
102 | | -- [ ] 옵션 설정 화면 |
103 | | - |
104 | | -## 파일 구조 |
105 | | -``` |
106 | | -client/ |
107 | | -├── main.c # 메인 프로그램 파일 |
108 | | -├── game_state.h # 게임 상태 관리 헤더 |
109 | | -├── game_state.c # 게임 상태 관리 구현 |
110 | | -├── CMakeLists.txt # 빌드 설정 |
111 | | -└── README.md # 이 파일 |
112 | | -``` |
113 | | - |
114 | | -# ♟️ Multiplayer Chess Game (멀티플레이 체스 게임) |
115 | | - |
116 | | -2025-1 시스템프로그래밍 001분반 1팀 팀프로젝트 |
117 | | - |
118 | | -Linux에서 C로 구현된 터미널 기반 멀티플레이어 체스 게임입니다. 컴파일하는 동안 가벼운 체스 게임을 즐기고 싶은 개발자를 위해 설계되었습니다 — GUI 오버헤드 없이 순수한 CLI의 매력을 경험하세요. |
119 | | - |
120 | | -## 🔍 로그 시스템 |
121 | | - |
122 | | -ncurses를 사용하는 환경에서는 표준 출력이 보이지 않기 때문에, 파일 기반 로그 시스템을 구현했습니다. |
123 | | - |
124 | | -### 로그 파일 위치 |
125 | | -- **클라이언트 로그**: `logs/chess_client_[PID].log` (프로젝트 루트의 logs 폴더) |
126 | | - |
127 | | -### 로그 레벨 |
128 | | -- `DEBUG`: 상세한 디버그 정보 |
129 | | -- `INFO`: 일반 정보 메시지 |
130 | | -- `WARN`: 경고 메시지 |
131 | | -- `ERROR`: 오류 메시지 |
132 | | -- `FATAL`: 심각한 오류 메시지 |
133 | | - |
134 | | -### 실시간 로그 모니터링 |
135 | | - |
136 | | -1. **별도 터미널에서 로그 확인**: |
137 | | - ```bash |
138 | | - # 실시간 로그 모니터링 (권장) |
139 | | - ./watch_logs.sh |
140 | | - |
141 | | - # 또는 직접 tail 사용 |
142 | | - tail -f logs/chess_client_[PID].log |
143 | | - ``` |
144 | | - |
145 | | -2. **특정 레벨만 필터링**: |
146 | | - ```bash |
147 | | - # 에러만 보기 |
148 | | - tail -f logs/chess_client_[PID].log | grep ERROR |
149 | | - |
150 | | - # 워닝 이상만 보기 |
151 | | - tail -f logs/chess_client_[PID].log | grep -E "(WARN|ERROR|FATAL)" |
152 | | - ``` |
153 | | - |
154 | | -3. **로그 파일 검색**: |
155 | | - ```bash |
156 | | - # 특정 함수의 로그만 보기 |
157 | | - grep "connect_to_server" logs/chess_client_[PID].log |
158 | | - |
159 | | - # 네트워크 관련 로그만 보기 |
160 | | - grep -i "network\|connect\|socket" logs/chess_client_[PID].log |
161 | | - ``` |
162 | | - |
163 | | -### 개발자를 위한 팁 |
| 47 | +./run.sh client |
164 | 48 |
|
165 | | -- 클라이언트를 실행하기 전에 다른 터미널에서 `./watch_logs.sh`를 실행하세요 |
166 | | -- 문제가 발생하면 로그 파일에서 `ERROR`나 `FATAL` 메시지를 확인하세요 |
167 | | -- 네트워크 연결 문제는 `connect_to_server` 함수 로그를 확인하세요 |
| 49 | +# 또는 |
| 50 | +./run.sh client -h 192.168.1.100 -p 8080 |
| 51 | +``` |
0 commit comments