Skip to content

Commit dc5b9cf

Browse files
committed
fix(client): 화면 전환 시 검은화면 오류 수정
1 parent bea3a77 commit dc5b9cf

3 files changed

Lines changed: 30 additions & 34 deletions

File tree

client/main.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -324,12 +324,10 @@ int main(int argc, char *argv[]) {
324324
LOG_INFO("User acknowledged dialog, returned to main screen");
325325
}
326326

327-
// 화면을 초기화하고 즉시 메인 화면 그리기
328-
clear();
329327
draw_current_screen();
330328
pthread_mutex_unlock(&screen_mutex);
331-
refresh(); // 화면 즉시 갱신
332-
need_screen_update = false; // 이미 화면을 업데이트했으므로 플래그 끄기
329+
330+
refresh(); // 화면 즉시 갱신
333331
}
334332
} else if (ch != ERR && !dialog_active) {
335333
// LOG_DEBUG("Input received: %d", ch);

client/ui/core.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,11 @@ void draw_current_screen() {
109109
// 이전 화면 상태와 비교를 위한 정적 변수
110110
static screen_state_t last_drawn_screen = SCREEN_MAIN;
111111

112+
// 화면 상태가 변경되었는지 확인
113+
bool screen_changed = (current_screen != last_drawn_screen);
114+
112115
// 화면 상태가 변경되었을 때만 전체 화면 지우기
113-
if (current_screen != last_drawn_screen) {
116+
if (screen_changed) {
114117
clear(); // 화면 전환 시에만 전체 화면 지우기
115118
last_drawn_screen = current_screen;
116119
LOG_DEBUG("Screen transition detected, clearing display");

client/ui/main_screen.c

Lines changed: 24 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,49 +8,44 @@ void draw_main_screen() {
88
int rows, cols;
99
getmaxyx(stdscr, rows, cols);
1010

11-
// 더 큰 메인 윈도우 크기
11+
// 화면 중앙 계산
1212
int main_height = 25;
1313
int main_width = 80;
1414
int start_y = (rows - main_height) / 2;
1515
int start_x = (cols - main_width) / 2;
1616

17-
WINDOW *main_win = newwin(main_height, main_width, start_y, start_x);
18-
werase(main_win); // 윈도우만 지우기
19-
17+
// stdscr에 직접 그리기
2018
// ASCII 아트 제목
21-
wattron(main_win, A_BOLD);
22-
mvwprintw(main_win, 2, (main_width - 51) / 2, " ██████╗██╗ ██╗███████╗███████╗███████╗ ██████╗");
23-
mvwprintw(main_win, 3, (main_width - 51) / 2, "██╔════╝██║ ██║██╔════╝██╔════╝██╔════╝ ██╔═══╝");
24-
mvwprintw(main_win, 4, (main_width - 51) / 2, "██║ ███████║█████╗ ███████╗███████╗ ██║ ");
25-
mvwprintw(main_win, 5, (main_width - 51) / 2, "██║ ██╔══██║██╔══╝ ╚════██║╚════██║ ██║ ");
26-
mvwprintw(main_win, 6, (main_width - 51) / 2, "╚██████╗██║ ██║███████╗███████║███████║██╗╚██████╗");
27-
mvwprintw(main_win, 7, (main_width - 51) / 2, " ╚═════╝╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝╚═╝ ╚═════╝");
28-
wattroff(main_win, A_BOLD);
19+
attron(A_BOLD);
20+
mvprintw(start_y + 2, start_x + (main_width - 51) / 2, " ██████╗██╗ ██╗███████╗███████╗███████╗ ██████╗");
21+
mvprintw(start_y + 3, start_x + (main_width - 51) / 2, "██╔════╝██║ ██║██╔════╝██╔════╝██╔════╝ ██╔═══╝");
22+
mvprintw(start_y + 4, start_x + (main_width - 51) / 2, "██║ ███████║█████╗ ███████╗███████╗ ██║ ");
23+
mvprintw(start_y + 5, start_x + (main_width - 51) / 2, "██║ ██╔══██║██╔══╝ ╚════██║╚════██║ ██║ ");
24+
mvprintw(start_y + 6, start_x + (main_width - 51) / 2, "╚██████╗██║ ██║███████╗███████║███████║██╗╚██████╗");
25+
mvprintw(start_y + 7, start_x + (main_width - 51) / 2, " ╚═════╝╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝╚═╝ ╚═════╝");
26+
attroff(A_BOLD);
2927

3028
// 부제목
31-
wattron(main_win, A_ITALIC);
32-
mvwprintw(main_win, 9, (main_width - 16) / 2, "MULTIPLAYER GAME");
33-
wattroff(main_win, A_ITALIC);
29+
attron(A_ITALIC);
30+
mvprintw(start_y + 9, start_x + (main_width - 16) / 2, "MULTIPLAYER GAME");
31+
attroff(A_ITALIC);
3432

3533
// 장식선
36-
wattron(main_win, COLOR_PAIR(COLOR_PAIR_BORDER));
37-
mvwprintw(main_win, 11, (main_width - 60) / 2, "═══════════════════════════════════════════════════════════");
38-
wattroff(main_win, COLOR_PAIR(COLOR_PAIR_BORDER));
34+
attron(COLOR_PAIR(COLOR_PAIR_BORDER));
35+
mvprintw(start_y + 11, start_x + (main_width - 60) / 2, "═══════════════════════════════════════════════════════════");
36+
attroff(COLOR_PAIR(COLOR_PAIR_BORDER));
3937

4038
// 메뉴 항목들
41-
wattron(main_win, A_BOLD);
42-
mvwprintw(main_win, 14, (main_width - 18) / 2, "1. Start New Game");
43-
mvwprintw(main_win, 16, (main_width - 18) / 2, "2. Replay ");
44-
mvwprintw(main_win, 18, (main_width - 18) / 2, "3. Exit ");
45-
wattroff(main_win, A_BOLD);
39+
attron(A_BOLD);
40+
mvprintw(start_y + 14, start_x + (main_width - 18) / 2, "1. Start New Game");
41+
mvprintw(start_y + 16, start_x + (main_width - 18) / 2, "2. Replay ");
42+
mvprintw(start_y + 18, start_x + (main_width - 18) / 2, "3. Exit ");
43+
attroff(A_BOLD);
4644

4745
// 하단 장식
48-
wattron(main_win, COLOR_PAIR(COLOR_PAIR_BORDER));
49-
mvwprintw(main_win, 21, (main_width - 60) / 2, "═══════════════════════════════════════════════════════════");
50-
wattroff(main_win, COLOR_PAIR(COLOR_PAIR_BORDER));
51-
52-
wrefresh(main_win);
53-
delwin(main_win); // 윈도우 메모리 해제
46+
attron(COLOR_PAIR(COLOR_PAIR_BORDER));
47+
mvprintw(start_y + 21, start_x + (main_width - 60) / 2, "═══════════════════════════════════════════════════════════");
48+
attroff(COLOR_PAIR(COLOR_PAIR_BORDER));
5449

5550
// 연결 상태 표시
5651
draw_connection_status();

0 commit comments

Comments
 (0)