📄 nbnclient.c
字号:
wprintw(msgboard,"\nThe board is OK and you cant modify it now."); wrefresh(msgboard); break; default: wprintw(msgboard,"\nYou cant modify board while playing!"); wrefresh(msgboard); break; } break; case 9: case 't': ncur.lugarg=BOTONES; yname(); mname(); globaltab(); break; case 10: case 13: case KEY_ENTER: globalenter(); break; case KEY_NPAGE: case 'n': globalpagedown(); break; case KEY_PPAGE: case 'p': globalpageup(); break; default: /* * wmove(miboard,ncur.y+1,ncur.x*2+1); * wrefresh(miboard); */ globalbotones2(i); break; } /* switch(getch()) */ break; /* se acabo el case MITABLA */ case BOTONES: /* main switch */ switch(i=getch()) { case ERR: break; case KEY_UP: case 'i': /* new on v0.41 */ ncur.lugarc--; if(ncur.lugarc<0) ncur.lugarc=MAXLUGARC; globalbotones(); break; case KEY_DOWN: case 'k': /* new on v0.41 */ ncur.lugarc++; if(ncur.lugarc>MAXLUGARC)ncur.lugarc=0; globalbotones(); break; case 9: case 't': if(usuario.play>=3) ncur.lugarg=TUTABLA; else ncur.lugarg=MITABLA; yname(); mname(); break; case KEY_LEFT: case 'j': /* new on v0.41 */ ncur.lugarg=MITABLA; yname(); mname(); break; case KEY_RIGHT: case 'l': /* new on v0.41 */ ncur.lugarg=TUTABLA; yname(); mname(); break; case 10: case 13: case KEY_ENTER: globalenter(); break; case KEY_NPAGE: case 'n': globalpagedown(); break; case KEY_PPAGE: case 'p': globalpageup(); break; case 'h': case 'H': /* new on v0.46 */ hideH(); break; default: globalbotones2(i); /* que sera entonces ? new on v0.46 */ break; } break; case TUTABLA: /* main switch */ wmove(tuboard,ncur.yt+1,ncur.xt*2+1); wrefresh(tuboard); switch(i=getch()) { case ERR: break; case KEY_LEFT: case 'j': /* new on v0.41 */ ncur.xt--; if(ncur.xt<0) ncur.xt=9; break; case KEY_RIGHT: case 'l': /* new on v0.41 */ ncur.xt++; if(ncur.xt>9)ncur.xt=0; break; case KEY_UP: case 'i': /* new on v0.41 */ ncur.yt--; if(ncur.yt<0)ncur.yt=9; break; case KEY_DOWN: case 'k': /* new on v0.41 */ ncur.yt++; if(ncur.yt>9)ncur.yt=0; break; /* case KEY_SPACE: */ case ' ': case 'x': /* new on v0.41 */ if((usuario.firsthit==0) && (usuario.play<2)) { fill0(WHITE,1); for(i=0;i<10;i++) { /* clean tabla */ for(j=0;j<10;j++) mitabla[i][j]=NOBARCO; } repaintmi(); usuario.firsthit=1; } switch(usuario.play) { case 0: case 1: case 2: wprintw(msgboard,"\nYou cant HIT now. First start a game."); wrefresh(msgboard); break; case 3: wprintw(msgboard,"\nIt is not your turn!"); wrefresh(msgboard); break; default: usuario.play=3; /* it is no more your turn */ outbuftemp[0]=ncur.xt; outbuftemp[1]=ncur.yt; bnwrite(sock,outbuftemp,BNHIT,0,0,usuario.numjug); bnwrite(sock,outbuftemp,BNREA,usuario.usrfrom,bnsup,usuario.numjug); break; } break; case 9: case 't': ncur.lugarg=BOTONES; yname(); mname(); globaltab(); break; case 10: case 13: case KEY_ENTER: globalenter(); break; case KEY_NPAGE: case 'n': globalpagedown(); break; case KEY_PPAGE: case 'p': globalpageup(); break; case 'h': case 'H': /* new on v0.46 */ hideH(); break; default: globalbotones2(i); break; wmove(tuboard,ncur.yt+1,ncur.xt*2+1); wrefresh(tuboard); } /* switch(getch()) */ break; /* se acabo el case MITABLA */ case SENDMSG: if(ncur.flag1!=0) { touchwin(sendmesg); wrefresh(sendmesg); ncur.flag1=0; } switch(i=getch()) { case '0': case '1': case '2': case '3': case '4': case '5': switch(ncur.sendpos) { case 0: globalsendmsg(i); break; case 1: ncur.sendto=atoi((char*)&i); mvwaddch(sendmesg,2,31,i); wmove(sendmesg,2,31); wrefresh(sendmesg); break; } break; case KEY_DOWN: case KEY_UP: case 9: ncur.sendpos++; if(ncur.sendpos>2) ncur.sendpos=0; switch(ncur.sendpos) { case 0: wmove(sendmesg,1,8+ncur.sendx); wrefresh(sendmesg); break; case 1: wmove(sendmesg,2,31); wrefresh(sendmesg); break; case 2: wmove(sendmesg,2,62); wrefresh(sendmesg); break; } break; case 'x': case 'X': case ' ': switch(ncur.sendpos) { case 0: globalsendmsg(i); break; case 1: break; case 2: if(ncur.sendle==0) { ncur.sendle=1; mvwaddch(sendmesg,2,62,'X'); } else { ncur.sendle=0; mvwaddch(sendmesg,2,62,' '); } wmove(sendmesg,2,62); wrefresh(sendmesg); break; } break; case 10: case 13: case KEY_ENTER: bnwrite(sock,ncur.sendmsg,BNMSG,ncur.sendto,ncur.sendle,usuario.numjug); touchwin(msgboard); wrefresh(msgboard); ncur.lugarg=BOTONES; mname(); yname(); globaltab(); break; case KEY_LEFT: case KEY_RIGHT: case ERR: break; case KEY_BACKSPACE: case '/': if(ncur.sendpos==0) { ncur.sendx--; if(ncur.sendx<0) ncur.sendx=0; ncur.sendmsg[ncur.sendx]=' '; ncur.sendmsg[ncur.sendx+1]=0; mvwaddch(sendmesg,1,8+ncur.sendx,' '); wmove(sendmesg,1,8+ncur.sendx); wrefresh(sendmesg); } break; default: if(ncur.sendpos==0) globalsendmsg(i); else if(ncur.sendpos==1) { wmove(sendmesg,2,31); wrefresh(sendmesg); } else if(ncur.sendpos==2) { wmove(sendmesg,2,62); wrefresh(sendmesg); } break; } /* switch getch */ break; case THECONF: if(ncur.flag1!=0) { touchwin(config); wrefresh(config); ncur.flag1=0; } switch(i=getch()) { case KEY_UP: case KEY_DOWN: case 9: ncur.confpos++; if(ncur.confpos>2) ncur.confpos=0; wmove(config,ncur.confpos+1,ncur.conf[ncur.confpos]+10); wrefresh(config); break; case KEY_ENTER: case 10: case 13: strcpy(usuario.server_name,ncur.confc[0]); strcpy(usuario.nombre,ncur.confc[2]); usuario.port=atoi(ncur.confc[1]); ncur.lugarg=BOTONES; yname(); mname(); globaltab(); touchwin(msgboard); wrefresh(msgboard); break; case KEY_BACKSPACE: case '/': ncur.conf[ncur.confpos]--; if(ncur.conf[ncur.confpos]<0) ncur.conf[ncur.confpos]=0; mvwaddch(config,ncur.confpos+1,ncur.conf[ncur.confpos]+10,' '); ncur.confc[ncur.confpos][ncur.conf[ncur.confpos]]=' '; ncur.confc[ncur.confpos][ncur.conf[ncur.confpos]+1]=0; wmove(config,ncur.confpos+1,ncur.conf[ncur.confpos]+10); wrefresh(config); break; case KEY_LEFT: case KEY_RIGHT: case ERR: break; default: globalconfig(i); wmove(config,ncur.confpos+1,ncur.conf[ncur.confpos]+10); wrefresh(config); break; } break; default: /* main switch */ break; } /* switch(ncur.lugarg) */}/* * MAIN */void help() { printf("\n\nBatalla Naval ncurses client v"BN_NVER" (c) 1996,97 Ricardo Quesada\n"); printf("\nsyntax:"); printf("\nnbnclient [-s hostname] [-p server_port] [-u username]"); printf("\n"); printf("\n\t-s host_name: The name of the host where bnserver is running"); printf("\n\t default is: localhost"); printf("\n\t-p server_port: The number of the port that bnserver is listening to"); printf("\n\t default is: 1995"); printf("\n\t-u username: Your name or alias"); printf("\n\t default is your login name"); printf("\n\t-c force color mode"); printf("\n\t-m force black & white mode"); printf("\n\t VT100 terminal emulation recomended."); printf("\n"); printf("\nKeys: Page up or 'p' shows previous players board"); printf("\n Page down or 'n' shows next players board"); printf("\n Use TAB,cursor left,cursor right to move between windows"); printf("\n"); printf("\nThe program automatically detects if you have a color terminal. "); printf("\nSend bugs,doubts,fixes to rquesada@dc.uba.ar\n"); exit(-1);}void main(int argc, char ** argv){ int i; ncur.color=0; strcpy( usuario.server_name,"localhost"); usuario.port=1995; /* * New on v0.50 - modificado ya que la glibc tiene un comportamiento * extra駉 con getlogin (me devuelve null ) * Dicen que es por compatibilidad con ipv6 */ /* * Usar en System-V */ strncpy( usuario.nombre,getenv("LOGNAME"), MAXNAMELEN ); /* * Usar en BSD */ /* strncpy( usuario.nombre,getenv("USER"), MAXNAMELEN ); */ for(i=1;i<argc;i++) { if(argv[i][0]=='-') { switch(argv[i][1]) { case 'M': case 'm': ncur.color=FALSE+128; printf("\nForcing black & white mode..."); break; case 'C': case 'c': ncur.color=TRUE+128; printf("\nForcing color mode..."); break; case 'x': bnsup=argv[i][2]; break; case 's': case 'S': if(argc>i+1) strcpy( usuario.server_name,argv[i+1]); else help(); i++; break; case 'u': case 'U': if(argc>i+1) strcpy( usuario.nombre,argv[i+1]); else help(); i++; break; case 'p': case 'P': if(argc>i+1) usuario.port=atoi(argv[i+1]); else help(); i++; break; case 'h': case 'H': case '?': case '-': default: help(); break; } } else { if(argv[i-1][0]!='-') help(); } } /* use_env(TRUE); */ /* new on v0.41*/ initscr(); keypad(stdscr, TRUE); raw(); noecho(); /* scrollok(stdscr, TRUE); */ timeout(RAPID); if(ncur.color>120) ncur.color-=128; else { if(!has_colors()) { printf("Warning: Color not detected.Black & white mode activated\n\r" " Remember, you need at least 80x24 terminal\n\r" " You can force COLOR mode with the -c switch\r\n" ); ncur.color=FALSE; sleep(2); } else ncur.color=TRUE; } if(ncur.color==TRUE) start_color(); init_datos(); /* inicializar datos y variables */ /* * Tuve que poner este `getch' aca para que no me borre la pantalla * Bug en libcurses-3.4 ? */ getch(); init_screen(); /* create and draw screen */ init_cliente(); /* inicializa el cliente */ for(;;) { if(ncur.quit!=0) break; main_loop(); /* main loop */ proceso(); } endwin();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -