diff options
Diffstat (limited to 'mbbsd/chc.c')
-rw-r--r-- | mbbsd/chc.c | 129 |
1 files changed, 53 insertions, 76 deletions
diff --git a/mbbsd/chc.c b/mbbsd/chc.c index 17cda17e..0788b96f 100644 --- a/mbbsd/chc.c +++ b/mbbsd/chc.c @@ -26,47 +26,12 @@ static chc_act_list *act_list = NULL; /* some constant variable definition */ -static const char *turn_str[2] = {"黑的", "紅的"}; - -static const char *num_str[10] = { - "", "一", "二", "三", "四", "五", "六", "七", "八", "九" -}; - -static const char *chess_str[2][8] = { - /* 0 1 2 3 4 5 6 7 */ - {" ", "將", "士", "象", "車", "馬", "包", "卒"}, - {" ", "帥", "仕", "相", "車", "傌", "炮", "兵"} -}; - -static const char *chess_brd[BRD_ROW * 2 - 1] = { - /* 0 1 2 3 4 5 6 7 8 */ - "┌─┬─┬─┬─┬─┬─┬─┬─┐", /* 0 */ - "│ │ │ │\│/│ │ │ │", - "├─┼─┼─┼─┼─┼─┼─┼─┤", /* 1 */ - "│ │ │ │/│\│ │ │ │", - "├─┼─┼─┼─┼─┼─┼─┼─┤", /* 2 */ - "│ │ │ │ │ │ │ │ │", - "├─┼─┼─┼─┼─┼─┼─┼─┤", /* 3 */ - "│ │ │ │ │ │ │ │ │", - "├─┴─┴─┴─┴─┴─┴─┴─┤", /* 4 */ - "│ 凱 達 格 藍 大 道 │", - "├─┬─┬─┬─┬─┬─┬─┬─┤", /* 5 */ - "│ │ │ │ │ │ │ │ │", - "├─┼─┼─┼─┼─┼─┼─┼─┤", /* 6 */ - "│ │ │ │ │ │ │ │ │", - "├─┼─┼─┼─┼─┼─┼─┼─┤", /* 7 */ - "│ │ │ │\│/│ │ │ │", - "├─┼─┼─┼─┼─┼─┼─┼─┤", /* 8 */ - "│ │ │ │/│\│ │ │ │", - "└─┴─┴─┴─┴─┴─┴─┴─┘" /* 9 */ -}; - -static char *hint_str[] = { - " q 認輸離開", - " p 要求和棋", - "方向鍵 移動遊標", - "Enter 選擇/移動" -}; +static char *num_str[10]; +static char *chess_str[2][8]; + +static char *chess_brd[BRD_ROW * 2 - 1]; + +static char *hint_str[4]; /* * Start of the network communication function. @@ -146,7 +111,7 @@ getstep(board_t board, rc_t *from, rc_t *to) fc = (turn == (chc_my ^ 1) ? from->c + 1 : 9 - from->c); tc = (turn == (chc_my ^ 1) ? to->c + 1 : 9 - to->c); if (from->r == to->r) - dir = "平"; + dir = SHM->i18nstr[cuser.language][758]; else { if (from->c == to->c) tc = from->r - to->r; @@ -155,9 +120,9 @@ getstep(board_t board, rc_t *from, rc_t *to) if ((turn == (chc_my ^ 1) && to->r > from->r) || (turn == chc_my && to->r < from->r)) - dir = "進"; + dir = SHM->i18nstr[cuser.language][759]; else - dir = "退"; + dir = SHM->i18nstr[cuser.language][760]; } sprintf(buf, "%s%s%s%s", chess_str[turn][CHE_P(board[from->r][from->c])], @@ -174,7 +139,7 @@ showstep(board_t board) eatten = board[chc_to.r][chc_to.c]; if (eatten) - prints(": %s%s", + prints(SHM->i18nstr[cuser.language][761], CHE_O(eatten) == 0 ? BLACK_COLOR : RED_COLOR, chess_str[CHE_O(eatten)][CHE_P(eatten)]); prints("\033[m"); @@ -188,8 +153,8 @@ chc_drawline(board_t board, chcusr_t *user1, chcusr_t *user2, int line) move(line, 0); clrtoeol(); if (line == 0) { - prints("\033[1;46m 象棋對戰 \033[45m%30s VS %-20s%10s\033[m", - user1->userid, user2->userid, chc_mode & CHC_WATCH ? "[觀棋模式]" : ""); + prints(SHM->i18nstr[cuser.language][762], + user1->userid, user2->userid, chc_mode & CHC_WATCH ? SHM->i18nstr[cuser.language][763] : ""); } else if (line >= 3 && line <= 21) { outs(" "); for (i = 0; i < 9; i++) { @@ -216,31 +181,25 @@ chc_drawline(board_t board, chcusr_t *user1, chcusr_t *user2, int line) if (line >= 3 && line < 3 + (int)dim(hint_str)) { outs(hint_str[line - 3]); } else if (line == SIDE_ROW) { - prints("\033[1m你是%s%s\033[m", + prints(SHM->i18nstr[cuser.language][764], chc_my == 0 ? BLACK_COLOR : RED_COLOR, - turn_str[chc_my]); + SHM->i18nstr[cuser.language][710 + chc_my]); } else if (line == TURN_ROW) { prints("%s%s\033[m", TURN_COLOR, - chc_my == chc_turn ? "輪到你下棋了" : "等待對方下棋"); + chc_my == chc_turn ? SHM->i18nstr[cuser.language][765] : SHM->i18nstr[cuser.language][766]); } else if (line == STEP_ROW && !chc_firststep) { showstep(board); } else if (line == TIME_ROW) { - prints("剩餘時間 %d:%02d", chc_lefttime / 60, chc_lefttime % 60); + prints(SHM->i18nstr[cuser.language][767], chc_lefttime / 60, chc_lefttime % 60); } else if (line == WARN_ROW) { outs(chc_warnmsg); } else if (line == MYWIN_ROW) { - prints("\033[1;33m%12.12s " - "\033[1;31m%2d\033[37m勝 " - "\033[34m%2d\033[37m敗 " - "\033[36m%2d\033[37m和\033[m", + prints(SHM->i18nstr[cuser.language][768], user1->userid, user1->win, user1->lose - 1, user1->tie); } else if (line == HISWIN_ROW) { - prints("\033[1;33m%12.12s " - "\033[1;31m%2d\033[37m勝 " - "\033[34m%2d\033[37m敗 " - "\033[36m%2d\033[37m和\033[m", + prints(SHM->i18nstr[cuser.language][769], user2->userid, user2->win, user2->lose - 1, user2->tie); } @@ -354,6 +313,7 @@ chc_log_poem(void) static void chc_init_board(board_t board) { + int i, j; memset(board, 0, sizeof(board_t)); board[0][4] = CHE(1, chc_my ^ 1); /* 將 */ board[0][3] = board[0][5] = CHE(2, chc_my ^ 1); /* 士 */ @@ -372,6 +332,23 @@ chc_init_board(board_t board) board[7][1] = board[7][7] = CHE(6, chc_my); /* 炮 */ board[6][0] = board[6][2] = board[6][4] = board[6][6] = board[6][8] = CHE(7, chc_my); /* 兵 */ + + for (i = 1; i < 10; i++) { + num_str[i] = SHM->i18nstr[cuser.language][711 + i]; + } + num_str[0] = ""; + + for (i = 0; i < 2; i++) + for (j = 1; j < 8; j++) { + chess_str[i][j] = SHM->i18nstr[cuser.language][720 + i * 7 + j]; + } + chess_str[0][0] = chess_str[1][0] = " "; + + for (i = 0; i < BRD_ROW * 2 - 1; i++) + chess_brd[i] = SHM->i18nstr[cuser.language][735 + i]; + + for (i = 0; i < 4; i++) + hint_str[i] = SHM->i18nstr[cuser.language][754 + i]; } static void @@ -602,7 +579,7 @@ hisplay(int s, chcusr_t *user1, chcusr_t *user2, board_t board, board_t tmpbrd) } else { if (chc_from.r == -1) { chc_hepass = 1; - strlcpy(chc_warnmsg, "\033[1;33m要求和局!\033[m", sizeof(chc_warnmsg)); + strlcpy(chc_warnmsg, SHM->i18nstr[cuser.language][770], sizeof(chc_warnmsg)); chc_drawline(board, user1, user2, WARN_ROW); } else { /* 座標變換 @@ -695,7 +672,7 @@ myplay(int s, chcusr_t *user1, chcusr_t *user2, board_t board, board_t tmpbrd) chc_ipass = 1; chc_from.r = -1; chc_broadcast_send(act_list, board); - strlcpy(chc_warnmsg, "\033[1;33m要求和棋!\033[m", sizeof(chc_warnmsg)); + strlcpy(chc_warnmsg, SHM->i18nstr[cuser.language][771], sizeof(chc_warnmsg)); chc_drawline(board, user1, user2, WARN_ROW); bell(); break; @@ -726,7 +703,7 @@ myplay(int s, chcusr_t *user1, chcusr_t *user2, board_t board, board_t tmpbrd) chc_drawline(board, user1, user2, LTR(chc_to.r)); endturn = 1; } else { - strlcpy(chc_warnmsg, "\033[1;33m不可以王見王\033[m", sizeof(chc_warnmsg)); + strlcpy(chc_warnmsg, SHM->i18nstr[cuser.language][772], sizeof(chc_warnmsg)); bell(); chc_drawline(board, user1, user2, WARN_ROW); } @@ -756,7 +733,7 @@ mainloop(int s, chcusr_t *user1, chcusr_t *user2, board_t board, play_func_t pla chc_firststep = 0; chc_drawline(board, user1, user2, TURN_ROW); if (chc_ischeck(board, chc_turn)) { - strlcpy(chc_warnmsg, "\033[1;31m將軍!\033[m", sizeof(chc_warnmsg)); + strlcpy(chc_warnmsg, SHM->i18nstr[cuser.language][773], sizeof(chc_warnmsg)); bell(); } else chc_warnmsg[0] = 0; @@ -766,15 +743,15 @@ mainloop(int s, chcusr_t *user1, chcusr_t *user2, board_t board, play_func_t pla if (chc_mode & CHC_VERSUS) { if (endgame == 1) { - strlcpy(chc_warnmsg, "對方認輸了!", sizeof(chc_warnmsg)); + strlcpy(chc_warnmsg, SHM->i18nstr[cuser.language][774], sizeof(chc_warnmsg)); user1->win++; currutmp->chc_win++; } else if (endgame == 2) { - strlcpy(chc_warnmsg, "你認輸了!", sizeof(chc_warnmsg)); + strlcpy(chc_warnmsg, SHM->i18nstr[cuser.language][775], sizeof(chc_warnmsg)); user1->lose++; currutmp->chc_lose++; } else { - strlcpy(chc_warnmsg, "和棋", sizeof(chc_warnmsg)); + strlcpy(chc_warnmsg, SHM->i18nstr[cuser.language][776], sizeof(chc_warnmsg)); user1->tie++; currutmp->chc_tie++; } @@ -783,17 +760,17 @@ mainloop(int s, chcusr_t *user1, chcusr_t *user2, board_t board, play_func_t pla passwd_update(usernum, &cuser); } else if (chc_mode & CHC_WATCH) { - strlcpy(chc_warnmsg, "結束觀棋", sizeof(chc_warnmsg)); + strlcpy(chc_warnmsg, SHM->i18nstr[cuser.language][777], sizeof(chc_warnmsg)); } else { - strlcpy(chc_warnmsg, "結束打譜", sizeof(chc_warnmsg)); + strlcpy(chc_warnmsg, SHM->i18nstr[cuser.language][778], sizeof(chc_warnmsg)); } chc_log("=> "); if (endgame == 3) - chc_log("和局"); + chc_log(SHM->i18nstr[cuser.language][779]); else{ - sprintf(buf, "%s勝\n", chc_my && endgame == 1 ? "紅" : "黑"); + sprintf(buf, SHM->i18nstr[cuser.language][780], chc_my && endgame == 1 ? SHM->i18nstr[cuser.language][781] : SHM->i18nstr[cuser.language][782]); chc_log(buf); } @@ -934,7 +911,7 @@ chc(int s, int mode) setuserfile(file, CHC_LOG); if (chc_log_open(&user1, &user2, file) < 0) - vmsg("無法紀錄棋局"); + vmsg(SHM->i18nstr[cuser.language][783]); mainloop(s, &user1, &user2, board, play_func); @@ -952,13 +929,13 @@ chc(int s, int mode) currutmp->mode = mode0; - if (getans("是否將棋譜寄回信箱?[N/y]") == 'y') { + if (getans(SHM->i18nstr[cuser.language][784]) == 'y') { char title[80]; sprintf(title, "%s V.S. %s", user1.userid, user2.userid); chc_log("\n--\n\n"); chc_log_poem(); chc_log_close(); - mail_id(cuser.userid, title, file, "[楚河漢界]"); + mail_id(cuser.userid, title, file, SHM->i18nstr[cuser.language][785]); } else chc_log_close(); @@ -971,7 +948,7 @@ chc_init_utmp(void) char uident[16]; userinfo_t *uin; - stand_title("楚河漢界之爭"); + stand_title(SHM->i18nstr[cuser.language][786]); generalnamecomplete(msg_uid, uident, sizeof(uident), SHM->UTMPnumber, completeutmp_compar, @@ -1022,11 +999,11 @@ chc_watch(void) if (uin->uid == currutmp->uid || uin->mode != CHC) return -1; - if (getans("是否進行觀棋? [N/y]") != 'y') + if (getans(SHM->i18nstr[cuser.language][787]) != 'y') return 0; if ((sock = make_connection_to_somebody(uin, 10)) < 0) { - vmsg("無法建立連線"); + vmsg(SHM->i18nstr[cuser.language][788]); return -1; } msgsock = accept(sock, (struct sockaddr *) 0, (socklen_t *) 0); |