📄 screen.c
字号:
#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include "curses.h"#include <stdlib.h>#include <string.h>#include <signal.h>#include <sys/time.h>#include "mjdef.h"#include "qkmj.h" set_color(fore,back)int fore;int back;{ char msg_buf[80]; wrefresh(stdscr); if(color) { fprintf(stdout,"[%d;%dm",fore,back); fflush(stdout);/* sprintf(msg_buf,"[%d;%dm",fore,back); waddstr(stdscr,msg_buf);*/ }}set_mode(mode)int mode;{ char msg_buf[80]; wrefresh(stdscr); if(color) { printf("[%dm",mode); fflush(stdout);/* sprintf(msg_buf,"\033%dm",mode); waddstr(stdscr,msg_buf);*/ }}mvprintstr(win,y,x,msg)WINDOW *win;int y;int x;char *msg;{ wmove(win,y,x); printstr(win,msg); }printstr(win,str)WINDOW *win;char *str;{ int i,len; len=strlen(str); for(i=0;i<len;i++) printch(win,str[i]);}printch(win,ch)WINDOW *win;char ch;{ char msg[3]; msg[0]=ch; msg[1]='\0'; waddstr(win,msg);} mvprintch(win,y,x,ch)WINDOW *win;int y,x;char ch;{ wmove(win,y,x); printch(win,ch);}clear_screen_area (ymin, xmin, height, width)int ymin, xmin, height, width;{ int i; char line_buf[255]; for (i = 0; i < width; i++) line_buf[i] = ' '; line_buf[width] = '\0'; for (i = 0; i < height; i++) wmvaddstr (stdscr,ymin+i, xmin, line_buf); wrefresh(stdscr);}clear_input_line(){ werase(inputwin); talk_x=0; wmove(inputwin,0,talk_x); talk_buf_count=0; talk_buf[0]='\0'; wrefresh(inputwin);}wait_a_key(msg)char *msg;{ int ch; werase(inputwin); wmvaddstr(inputwin,0,0,msg); wrefresh(inputwin); beep1(); do(ch=my_getch()); while(ch!=KEY_ENTER && ch!=ENTER); werase(inputwin); mvwaddstr(inputwin,0,0,talk_buf); wrefresh(inputwin);}ask_question(question,answer,ans_len,type)char *question;char *answer;int ans_len;int type;{ werase(inputwin); wmvaddstr(inputwin,0,0,question); wrefresh(inputwin); mvwgetstring(inputwin,0,strlen(question),ans_len,answer,type); werase(inputwin); wmvaddstr(inputwin,0,0,talk_buf); wrefresh(inputwin);}draw_index(max_item)int max_item;{ int i; /* normal(); */ for(i=1; i<max_item; i++) { wmvaddstr(stdscr,INDEX_Y,INDEX_X+(17-max_item+i)*2-2,menu_item[i]); } wmvaddstr(stdscr,INDEX_Y,INDEX_X+16*2+1,menu_item[max_item]); return_cursor();}current_index(current)int current;{ wmove(stdscr,INDEX_Y, INDEX_X+current*2); wrefresh(stdscr);}show_cardback(sit)char sit;{ int i; switch((sit-my_sit+4)%4) { case 0: break; case 1: for(i=0;i<pool[sit].num;i++) { show_card(40,INDEX_X1,INDEX_Y1-i,0); } break; case 2: for(i=0;i<pool[sit].num;i++) { show_card(30,INDEX_X2-i*2,INDEX_Y2,1); } break; case 3: for(i=0;i<pool[sit].num;i++) { show_card(40,INDEX_X3,INDEX_Y3+i,0); } break; } return_cursor();}show_allcard(sit)char sit;{ int i; switch((sit-my_sit+4)%4) { case 0: break; case 1: for(i=0;i<pool[sit].num;i++) { show_card(pool[sit].card[i],INDEX_X1,INDEX_Y1-(16-pool[sit].num+i),0); } break; case 2: for(i=0;i<pool[sit].num;i++) { show_card(pool[sit].card[i],INDEX_X2-(16-pool[sit].num+i)*2,INDEX_Y2,1); } break; case 3: for(i=0;i<pool[sit].num;i++) { show_card(pool[sit].card[i],INDEX_X3,INDEX_Y3+(16-pool[sit].num+i),0); } break; } return_cursor();}show_kang(sit)char sit;{ int i; switch((sit-my_sit+4)%4) { case 0: break; case 1: for(i=0;i<pool[sit].out_card_index;i++) if(pool[sit].out_card[i][0]==11) /* 暗杠 */ { show_card(pool[sit].out_card[i][2],INDEX_X1,INDEX_Y1-i*3-1,0); } break; case 2: for(i=0;i<pool[sit].out_card_index;i++) if(pool[sit].out_card[i][0]==11) { show_card(pool[sit].out_card[i][2],INDEX_X2-i*6-2,INDEX_Y2,1); } break; case 3: for(i=0;i<pool[sit].out_card_index;i++) if(pool[sit].out_card[i][0]==11) { show_card(pool[sit].out_card[i][2],INDEX_X3,INDEX_Y3+i*3+1,0); } break; }} show_newcard(sit,type)char sit;char type;/* type 1 : 摸牌 *//* type 2 : 摸入 *//* type 3 : 丢出 *//* type 4 : 显示 */{ int i; switch((sit-my_sit+4)%4) { case 0: switch(type) { case 2: show_card(current_card,INDEX_X,INDEX_Y+1,1); case 4: show_card(current_card,INDEX_X+16*2+1,INDEX_Y+1,1); break; } break; case 1: switch(type) { case 1:/* attron(A_BOLD); show_card(10,INDEX_X1,INDEX_Y1-17,0); attroff(A_BOLD);*/ break; case 2: show_card(40,INDEX_X1,INDEX_Y1-17,0); break; case 3: show_card(20,INDEX_X1,INDEX_Y1-17,0); break; case 4: show_card(current_card,INDEX_X1,INDEX_Y1-17,0); break; } break; case 2: switch(type) { case 1:/* attron(A_BOLD); show_card(10,INDEX_X2-16*2-1,INDEX_Y2,1); attroff(A_BOLD);*/ break; case 2: show_card(30,INDEX_X2-16*2-1,INDEX_Y2,1); show_card(20,INDEX_X2-16*2-1,INDEX_Y2,1); show_card(30,INDEX_X2-16*2-1,INDEX_Y2,1); break; case 3: show_card(20,INDEX_X2-16*2-1,INDEX_Y2,1); break; case 4: show_card(current_card,INDEX_X2-16*2-1,INDEX_Y2,1); break; } break; case 3: switch(type) { case 1:/* attron(A_BOLD); show_card(10,INDEX_X3,INDEX_Y3+17,0); attroff(A_BOLD);*/ break; case 2:/* 为处理 color 的问题 */ show_card(40,INDEX_X3,INDEX_Y3+17,0); /* show_card(20,INDEX_X3,INDEX_Y3+17,0); */ show_card(40,INDEX_X3,INDEX_Y3+17,0); break; case 3: show_card(20,INDEX_X3,INDEX_Y3+17,0); break; case 4: show_card(current_card,INDEX_X3,INDEX_Y3+17,0); break; } break; }} /* Show cards on the screen. *//* type 0: row *//* type 1: column */show_card(card,x,y,type) char card; int x; int y; int type;{ char card1[3]; char card2[3]; reset_cursor(); mvwaddstr(stdscr,y,x," "); wrefresh(stdscr); wmove(stdscr,y,x);if(card==30 || card==40) set_color(32,40);if(card>=1 && card<=9){ set_mode(1); set_color(31,40);}else if(card>=11 && card<=19){ set_mode(1); set_color(32,40);}else if(card>=21 && card<=29){ set_mode(1); set_color(36,40);}else if(card>=31 && card<=34){ set_mode(1); set_color(33,40);}else if(card>=41 && card<=43){ set_mode(1); set_color(35,40);} if(type==1) { card1[0]=mj_item[card][0]; card1[1]=mj_item[card][1]; card1[2]=0; card2[0]=mj_item[card][2]; card2[1]=mj_item[card][3]; card2[2]=0; mvwaddstr(stdscr,y,x,card1); mvwaddstr(stdscr,y+1,x,card2); } else mvwaddstr(stdscr,y,x,mj_item[card]);wrefresh(stdscr);set_color(37,40);set_mode(0);}draw_title(){ int x,y; for(y=0;y<24;y++) { mvprintstr(stdscr,y,0,"│"); mvprintstr(stdscr,y,76,"│"); } mvprintstr(stdscr,22,0,"├"); for(x=2;x<=75;x+=2) { printstr(stdscr,"─"); } mvprintstr(stdscr,22,76,"┤"); wmvaddstr(stdscr,23,2,"【对话】"); wrefresh(stdscr);}init_playing_screen(){ info.wind=1; info.dealer=1; info.cont_dealer=0; talk_right=55; inputwin=playing_win; talk_x=0; talk_y=0; talk_buf_count=0; talk_buf[0]='\0'; comment_right=55; comment_up=19; comment_bottom=22; comment_y=19; commentwin=newwin(comment_bottom-comment_up+1,comment_right-comment_left+1, comment_up,comment_left); scrollok(commentwin,TRUE); screen_mode=PLAYING_SCREEN_MODE; draw_playing_screen(); wmove(inputwin,talk_y,talk_x); wrefresh(inputwin);}init_global_screen(){ char msg_buf[255]; char ans_buf[255]; comment_left=comment_x=org_comment_x; comment_right=72; comment_up=0; comment_bottom=21; comment_y=org_comment_y; talk_left=11; talk_right=74; talk_x=0; talk_buf_count=0; talk_buf[0]='\0'; screen_mode=GLOBAL_SCREEN_MODE; commentwin=newwin(22,74,0,2); scrollok(commentwin,TRUE); inputwin=newwin(1,talk_right-talk_left,org_talk_y,talk_left); draw_global_screen(); input_mode=TALK_MODE; talk_left=11; inputwin=global_win; wmvaddstr(stdscr,23,2,"【对话】"); return_cursor();} int wmvaddstr(win,y,x,str)WINDOW *win;int y;int x;char *str;{ wmove(win,y,x); waddstr(win,str);}draw_table(){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -