📄 nbnclient.c
字号:
wprintw(msgboard,"\nPlayer %i is ready to play",proto.bnptip1); wrefresh(msgboard); break; case BNWHO: sprintf(outbuf,"It's %s turn.",usuario.names[proto.bnptip1-1]); foot_right(outbuf); break; case BNTRN: usuario.play=4; /* oh, it is my turn */ foot_right("It's my turn."); break; case BNEXT: i=proto.bnptip1-1; usuario.names[i][0]=0; strcpy(outbuf,proto.bnpmsg); wprintw(msgboard,"\n%s",outbuf); wrefresh(msgboard); for(i=0;i<MAXPLAYER;i++) { if(usuario.numjug-1!=i) { if(strcmp(usuario.names[i],"")!=0) { usuario.usrfrom=i+1; strcpy(ncur.tunombre,usuario.names[i]); /* new on v0.41 */ yname(); } } } if(usuario.play>=3) { bnwrite(sock,outbuf,BNREA,usuario.usrfrom,bnsup,usuario.numjug); } break; case BNLOS: usuario.play=1; /* oh, i lost the game */ for(i=0;i<MAXPLAYER;i++) usuario.names[i][0]=0; wprintw(msgboard,"\nYou were killed. To start again wait until the game is over."); wrefresh(msgboard); fillenemyt(looseboard,1); rstart(); usuario.firsthit=0; break; case BNWIN: usuario.play=1; /* oh, i lost the game */ for(i=0;i<MAXPLAYER;i++) usuario.names[i][0]=0; wprintw(msgboard,"\nCONGRATULATIONS: You are the winner."); wrefresh(msgboard); fillenemyt(winboard,1); rstart(); usuario.firsthit=0; break; case BNSOL: wprintw(msgboard,"\nYou are the only one who sent the board.Wait another player."); wrefresh(msgboard); break; default: wprintw(msgboard,"\nbnserver sending code %X. Not available in this nbnclient.",proto.bnptip0); break; } } }}void init_datos( void ) { int i,j; usuario.play = 0; usuario.usrfrom=1; usuario.lecho=1; for(i=0;i<10;i++) { /* clean tabla */ for(j=0;j<10;j++) mitabla[i][j]=0; } usuario.firsthit=0; for(i=0;i<MAXPLAYER;i++) usuario.names[i][0]=0; /* clear all names */ ncur.lugarg=MITABLA; ncur.lugarc=1; ncur.quit=0; ncur.x=0;ncur.y=0; ncur.sendx=0; ncur.sendmsg[0]=0; ncur.sendto=0; ncur.sendle=0; ncur.conf[0]=strlen(usuario.server_name); ncur.conf[1]=4; ncur.conf[2]=strlen(usuario.nombre); ncur.confpos=0; ncur.flag1=0; strcpy(usuario.status[DISCON],"not connected"); strcpy(usuario.status[CONNEC]," connected "); strcpy(usuario.status[BOARD], "ready to play"); strcpy(usuario.status[PLAY], " playing "); strcpy(usuario.status[TURN], " playing * "); usuario.hide=FALSE;}int init_cliente( void ) { /* Create socket */ sock=socket(AF_INET,SOCK_STREAM,0); if(sock <0) { wprintw(msgboard,"\nERROR: creating stream socket"); wrefresh(msgboard); return(1); } host_info = gethostbyname(usuario.server_name); if(host_info==NULL) { close(sock); wprintw(msgboard,"\nERROR: Unknown host.Please check CONFIG."); wrefresh(msgboard); return(2); } server.sin_family=host_info->h_addrtype; memcpy( (char*) &server.sin_addr, host_info->h_addr,host_info->h_length); server.sin_port=htons(usuario.port); if(connect(sock,(struct sockaddr *)&server,sizeof(server))< 0) { close(sock); wprintw(msgboard,"\nERROR: Perhaps incorrect port number or bnserver not running.Check CONFIG"); wrefresh(msgboard); return 3; } strcpy(outbuftemp,usuario.nombre); bnwrite(sock,outbuftemp,BNJUG,NCLI,BN_NVERH,BN_NVERL); /* WHO AM I */ return 0;}/* * main_loop */void hideH() { switch(usuario.hide) { case TRUE: usuario.hide=FALSE; repaintmi(); break; case FALSE: usuario.hide=TRUE; fillenemyt(Hboard,0); break; }}void globalconfig(int i) { if(ncur.conf[ncur.confpos]>58) ncur.conf[ncur.confpos]=58; else { mvwaddch(config,ncur.confpos+1,ncur.conf[ncur.confpos]+10,(chtype)i); ncur.confc[ncur.confpos][ncur.conf[ncur.confpos]]=(char)i; ncur.confc[ncur.confpos][ncur.conf[ncur.confpos]+1]=0; ncur.conf[ncur.confpos]++; } wmove(config,ncur.confpos+1,ncur.conf[ncur.confpos]+10); wrefresh(config);}void globalsendmsg(int i) { if(ncur.sendx>70) ncur.sendx=70; else { mvwaddch(sendmesg,1,8+ncur.sendx,(chtype)i); ncur.sendmsg[ncur.sendx]=(char)i; ncur.sendmsg[ncur.sendx+1]=0; ncur.sendx++; } wmove(sendmesg,1,8+ncur.sendx); wrefresh(sendmesg);}void globalpageup(void) { int i,n; n=usuario.usrfrom-2; if(usuario.play>=3) { for(i=n;i>=0;i--) { if(strcmp(usuario.names[i],"")!=0) { usuario.usrfrom=i+1; strcpy(ncur.tunombre,usuario.names[i]); /* new on v0.41 */ yname(); break; } } if(i<0) { for(i=MAXPLAYER-1;i>=0;i--) { if(strcmp(usuario.names[i],"")!=0) { usuario.usrfrom=i+1; strcpy(ncur.tunombre,usuario.names[i]); /* new on v0.41 */ yname(); break; } } } bnwrite(sock,outbuftemp,BNREA,usuario.usrfrom,bnsup,usuario.numjug); } /* if(usuario.play) */}void globalpagedown(void) { int i,n; n=usuario.usrfrom; if(usuario.play>=3) { for(i=n;i<MAXPLAYER;i++) { if(strcmp(usuario.names[i],"")!=0) { usuario.usrfrom=i+1; strcpy(ncur.tunombre,usuario.names[i]); /* new on v0.41 */ yname(); break; } } if(i>=MAXPLAYER) { for(i=0;i<MAXPLAYER;i++) { if(strcmp(usuario.names[i],"")!=0) { usuario.usrfrom=i+1; strcpy(ncur.tunombre,usuario.names[i]); /* new on v0.41 */ yname(); break; } } } bnwrite(sock,outbuftemp,BNREA,usuario.usrfrom,bnsup,usuario.numjug); } /* if(usuario.play) */}void globaltab(void) { /* llamada desde main_loop */ switch(ncur.lugarc) { case 0: wmove(bconnect,0,0); wrefresh(bconnect); break; case 1: wmove(bstart,0,0); wrefresh(bstart); break; case 2: wmove(bstatus,0,0); wrefresh(bstatus); break; case 3: wmove(bmsg,0,0); wrefresh(bmsg); break; case 4: wmove(bconfig,0,0); wrefresh(bconfig); break; case 5: wmove(babout,0,0); wrefresh(babout); break; case 6: wmove(bquit,0,0); wrefresh(bquit); break; default: break; }}void globalbotones(void) { /* llamada desde main_loop */ rconnect(); rstart(); rstatus(); rmsg(); rconfig(); rabout(); rquit(); globaltab(); /* posciciona el cursor */}void globalbotones2(int i) { /* llamada desde main_loop */ switch(i) { case 'e':case 'E': /* connEct o disconnEct */ ncur.lugarc=0; globalbotones(); break; case 's':case 'S': /* Send board o Start */ ncur.lugarc=1; globalbotones(); break; case 'u':case 'U': /* statUs */ ncur.lugarc=2; globalbotones(); break; case 'm':case 'M': /* send Msg */ ncur.lugarc=3; globalbotones(); break; case 'c':case 'C': /* Config */ ncur.lugarc=4; globalbotones(); break; case 'o':case 'O': /* abOut */ ncur.lugarc=5; globalbotones(); break; case 'q':case 'Q': /* Quit */ ncur.lugarc=6; globalbotones(); break; }}void globalenter(void) { /* llamada desde main_loop */ int i; switch(ncur.lugarc) { case 0: /* disconnect */ if(usuario.play==0) { init_cliente(); globaltab(); } else { if(usuario.play!=0) { usuario.firsthit=0; /* new on v0.41 */ usuario.play=0; foot_right("(c) Ricardo Quesada"); foot_left("Batalla Naval"); rstart(); rconnect(); for(i=0;i<MAXPLAYER;i++) usuario.names[i][0]=0; bnwrite(sock,outbuftemp,BNEXT,0,0,usuario.numjug); close(sock); } } break; case 1: /* send board or start */ switch(usuario.play) { case 0: filtermiboard(); repaintmi(); if(algoritmo()==TRUE) { wprintw(msgboard,"\nFirst establish a connection with CONNECT"); } wrefresh(msgboard); break; case 1: filtermiboard(); repaintmi(); if( algoritmo()==TRUE) { iwtable( outbuftemp ); bnwrite(sock,outbuftemp,BNWRI,usuario.numjug,0,usuario.numjug); } wrefresh(msgboard); break; case 2: bnwrite(sock,outbuftemp,BNSTR,usuario.numjug,0,usuario.numjug); break; case 4: case 3: default: wprintw(msgboard,"\nQue muchacho?.This mean that you are playing!"); wrefresh(msgboard); break; } break; case 2: /* status */ if(usuario.play>=1) { bnwrite(sock,outbuftemp,BNSTS,0,0,usuario.numjug); } else { wprintw(msgboard,"\nYou need to be connected"); wrefresh(msgboard); } break; case 3: /* send message */ if(usuario.play>=1) { ncur.lugarg=SENDMSG; sendmsgw(); } else { wprintw(msgboard,"\nFirst establish a connection with CONNECT"); wrefresh(msgboard); } break; case 4: /* config */ ncur.lugarg=THECONF; configw(); break; case 5: /* about */ aboutw(); break; case 6: /* quit */ if(usuario.play!=0) { /* if connected then kill child */ bnwrite(sock,outbuftemp,BNEXT,0,0,usuario.numjug); close(sock); } ncur.quit=1; break; default: break; }}/* * Funcion main_loop */void main_loop(void){ int i,j; switch(ncur.lugarg) { case MITABLA: /* main switch */ wmove(miboard,ncur.y+1,ncur.x*2+1); wrefresh(miboard); switch(i=getch()) { case ERR: break; case 'h': case 'H': /* new on v0.44 */ hideH(); break; case KEY_LEFT: case 'j': /* new on v0.41 */ ncur.x--; if(ncur.x<0) ncur.x=9; break; case KEY_RIGHT: case 'l': /* new on v0.41 */ ncur.x++; if(ncur.x>9)ncur.x=0; break; case KEY_UP: case 'i': /* new on v0.41 */ ncur.y--; if(ncur.y<0)ncur.y=9; break; case KEY_DOWN: case 'k': /* new on v0.41 */ ncur.y++; if(ncur.y>9)ncur.y=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; wmove(miboard,ncur.y+1,ncur.x*2+1); wrefresh(miboard); } switch(usuario.play) { case 0: case 1: if(mitabla[ncur.x][ncur.y]==NOBARCO) { mitabla[ncur.x][ncur.y]=BARCO; wattroncm(miboard,COLOR_PAIR(GREEN)); waddchcm(miboard,ACS_BOARD,COLOR_PAIR(GREEN)); } else { mitabla[ncur.x][ncur.y]=NOBARCO; wattroncm(miboard,COLOR_PAIR(GOOD)); waddch(miboard,' '); waddch(miboard,ACS_VLINE); } break; case 2:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -