📄 xbnclient.c
字号:
{ if( (barquitos[3]==1) && (barquitos[2]==2) && (barquitos[1]==3) && (barquitos[0]==4) ) { return TRUE; /* tabla bien puesta */ } else { sprintf(temporal,"Check board: All numbers must be equal to 0. [4]=%i,[3]=%i,[2]=%i,[1]=%i\n\r",1-barquitos[3],2-barquitos[2],3-barquitos[1],4-barquitos[0]); ttyfill(temporal); return FALSE; } } } else { if( haybarco(x,y)==TRUE ) { if( (haybarco(x,y-1)==FALSE) && (haybarco(x-1,y)==FALSE) ) { /* this is the first time i check this */ subarco=1; barcos++; xx=x;yy=y; for(;;) { if( (haybarco(x-1,y+1)==TRUE) || (haybarco(x+1,y+1)==TRUE) ) { sprintf(temporal,"Check board: Collision in (x,y)=%i,%i\n\r",x+1,y+1); ttyfill(temporal); pmicell(x,y,RED); return FALSE; } if( (haybarco(x+1,y)==FALSE) && (haybarco(x,y+1)==FALSE) ) { x=xx;y=yy; /* restauro pos */ barquitos[subarco-1]++; /* update cantidad de tama;os de barcos */ break; } else if( haybarco(x+1,y) == TRUE ) { subarco++; barcos++; x++; } else if( haybarco(x,y+1) == TRUE ) { y++; barcos++; subarco++; } if( subarco > 4) { sprintf(temporal,"Check board: Ship longer than 4 units in (x,y)=%i,%i\n\r",x+1,y+1); ttyfill(temporal); pmicell(x,y,RED); return FALSE; } } /* for(;;) */ } /* if(haybarco(x,y-1)==FALSE) */ } /* if(haybarco(x,y)==TRUE) */ if(nextbarco()==FALSE) { if( (barquitos[3]==1) && (barquitos[2]==2) && (barquitos[1]==3) && (barquitos[0]==4) ) { return TRUE; /* tabla bien puesta */ } else { sprintf(temporal,"Check board: All numbers must be equal to 0. [4]=%i,[3]=%i,[2]=%i,[1]=%i\n\r",1-barquitos[3],2-barquitos[2],3-barquitos[1],4-barquitos[0]); ttyfill(temporal); return FALSE; } } /* if nextbarco()==FALSE) */ } /* else */ } /* for(;;) */} /* void algoritomo() *//* * EMPEZAR LA PARTIDA */int play( void ) { char outbuf[MSGMAXLEN]; char temptable[100]; /* ver 0.50 */ if(usuario.play==0) { /* estado del boton SEND BOARD */ filtermiboard(); iwtable(temptable); fillboard(temptable,0); /* v0.50 */ if(algoritmo()==TRUE) { ttyfill("First establish a connection.Press 'Connect'\n\r"); } return(FALSE); } else if( usuario.play==1) { filtermiboard(); iwtable(temptable); fillboard(temptable,0); /* v0.50 */ if( algoritmo()==FALSE) { return(FALSE); } else if( algoritmo()==TRUE) { iwtable( outbuf ); bnwrite(sock,outbuf,BNWRI,usuario.numjug,0,usuario.numjug); return( TRUE ); } /* close algorito==ok */ } else if(usuario.play==2) { bnwrite(sock,outbuf,BNSTR,usuario.numjug,0,usuario.numjug); } else if(usuario.play>=3) { ttyfill("Que muchacho?.This mean that you are playing!\n\r"); } return(TRUE);}/* * QUIT */void quit( ) { char outbuf[MSGMAXLEN]; if(usuario.play!=0) { /* if connected then kill child */ bnwrite(sock,outbuf,BNEXT,0,0,usuario.numjug); close(sock); } xv_destroy_safe( frame );}/* int mitabla_fn( ) - eliminada en v0.50 *//* Funcion que pone la H para que no vean mi tabla */void mitabla_fn2( ){ char temptable[100]; switch(usuario.hide) { case TRUE: usuario.hide=FALSE; iwtable(temptable); fillboard(temptable,0); break; case FALSE: usuario.hide=TRUE; fillboard(Hboard,0); break; }}/* int tutabla_fn( ) - eliminada en v0.50 *//* * INICIALIZAR VARIABLES */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 */ strncpy(usuario.status[DISCON],"not connected",16); strncpy(usuario.status[CONNEC]," connected ",16); strncpy(usuario.status[BOARD], "ready to play",16); strncpy(usuario.status[PLAY], " playing ",16); strncpy(usuario.status[TURN], " playing * ",16); usuario.hide=FALSE;}/* * INICIALIZAR X */void init_X( void ) { int i; /* crea los colores */ cms = (Cms) xv_create( XV_NULL,CMS, CMS_SIZE,8, CMS_TYPE, XV_STATIC_CMS, CMS_COLORS,cms_colors, NULL ); /* ventana principal */ frame = (Frame) xv_create(XV_NULL, FRAME, XV_HEIGHT,240, XV_WIDTH,500, FRAME_LABEL,"Batalla Naval X Client v"BN_XVER, FRAME_SHOW_FOOTER,TRUE, FRAME_LEFT_FOOTER,"Batalla Naval", FRAME_RIGHT_FOOTER,"(c) Ricardo Quesada", FRAME_SHOW_RESIZE_CORNER,FALSE, NULL); /* * Todo lo referente a mi board */ /* nombre de mi board */ canvas_min = (Canvas) xv_create( frame,CANVAS, XV_Y,0, XV_X,0, XV_HEIGHT,LARGO * 2 , XV_WIDTH,10 * ANCHO, WIN_CMS,cms, CANVAS_X_PAINT_WINDOW,TRUE, CANVAS_REPAINT_PROC, dibujar_mi_nombre, NULL ); canvas_mib = (Canvas) xv_create( frame,CANVAS, WIN_BELOW,canvas_min, XV_X,0, XV_HEIGHT,10 * LARGO , XV_WIDTH,10 * ANCHO, WIN_CMS,cms, CANVAS_X_PAINT_WINDOW,TRUE, CANVAS_REPAINT_PROC, dibujar_mi_tabla, NULL ); xv_set(canvas_paint_window(canvas_mib), WIN_EVENT_PROC, event_mib, WIN_CONSUME_EVENTS,WIN_MOUSE_BUTTONS,NULL, NULL); /* * Todo lo referente a los botones principales: connect,about,config,etc. */ panel = (Panel) xv_create( frame,PANEL, XV_Y,0, PANEL_LAYOUT,PANEL_VERTICAL, XV_WIDTH, 100, NULL ); panelcito = (Panel) xv_create(panel,PANEL_BUTTON, PANEL_LABEL_STRING," Connect ", PANEL_NOTIFY_PROC,init_cliente, NULL); panelcit2 = (Panel) xv_create(panel,PANEL_BUTTON, PANEL_BUSY,TRUE, PANEL_LABEL_STRING,"Send Board", PANEL_NOTIFY_PROC,play, NULL); panelcit5 = (Panel) xv_create(panel,PANEL_BUTTON, PANEL_LABEL_STRING," Status ", PANEL_NOTIFY_PROC,status, PANEL_BUSY,TRUE, NULL); for(i=0;i<MAXPLAYER;i++) { mi[i] = (Menu_item) xv_create(XV_NULL,MENUITEM, MENU_STRING,usuario.names[i], MENU_NOTIFY_PROC,menuses, NULL); } menu = (Menu) xv_create (XV_NULL, MENU, MENU_GEN_PIN_WINDOW, frame, "Players", NULL); for(i=0;i<MAXPLAYER;i++) xv_set(menu,MENU_APPEND_ITEM,mi[i],NULL); panelcit3 = (Panel) xv_create(panel, PANEL_BUTTON, PANEL_BUSY,TRUE, PANEL_LABEL_STRING," Players ", PANEL_NOTIFY_PROC,NULL, PANEL_ITEM_MENU,menu, NULL); panelcit4 = (Panel) xv_create(panel,PANEL_BUTTON, /* new on v0.34 */ PANEL_BUSY,TRUE, PANEL_LABEL_STRING," Send Msg ", PANEL_NOTIFY_PROC,send_msg, NULL); xv_create(panel,PANEL_BUTTON, PANEL_LABEL_STRING," Config ", PANEL_NOTIFY_PROC,info, NULL); xv_create(panel,PANEL_BUTTON, PANEL_LABEL_STRING," About ", PANEL_NOTIFY_PROC,about, NULL); xv_create(panel,PANEL_BUTTON, PANEL_LABEL_STRING," Quit ", PANEL_NOTIFY_PROC,quit, NULL); /* * Todo lo referente al board del enemigo */ /* donde va el nombre del board del enemigo */ canvas_tun = (Canvas) xv_create( frame,CANVAS, XV_Y,0, XV_HEIGHT,LARGO * 2 , XV_WIDTH,10 * ANCHO, WIN_CMS,cms, CANVAS_X_PAINT_WINDOW,TRUE, CANVAS_REPAINT_PROC, dibujar_tu_nombre, NULL ); canvas_tub = (Canvas) xv_create( frame,CANVAS, WIN_BELOW,canvas_tun, XV_X,ANCHO*10+100, XV_HEIGHT,10 * LARGO, XV_WIDTH,10 * ANCHO, CANVAS_X_PAINT_WINDOW,TRUE, CANVAS_REPAINT_PROC, dibujar_tu_tabla, NULL ); xv_set(canvas_paint_window(canvas_tub), WIN_EVENT_PROC, event_tub, WIN_CONSUME_EVENTS,WIN_MOUSE_BUTTONS,NULL, NULL); /* * todo lo referente a about */ subframe1=(Frame) xv_create(frame,FRAME, XV_HEIGHT,300, XV_WIDTH,300, FRAME_SHOW_FOOTER,TRUE, FRAME_LEFT_FOOTER,"Batalla Naval", FRAME_RIGHT_FOOTER,"(c) Ricardo Quesada", FRAME_LABEL, "About", FRAME_SHOW_RESIZE_CORNER,FALSE, NULL); canvas = (Canvas) xv_create( subframe1,CANVAS, CANVAS_X_PAINT_WINDOW,TRUE, XV_VISUAL_CLASS, PseudoColor, WIN_CMS,cms, CANVAS_REPAINT_PROC,about_proc, NULL ); display = (Display *) xv_get( subframe1, XV_DISPLAY); xid = (XID) xv_get( canvas_paint_window( canvas ) ,XV_XID ); gc = (GC) XCreateGC( display, xid, XV_NULL , &gc_val ); colors = (unsigned long*) xv_get( canvas,WIN_X_COLOR_INDICES); /* * todo lo referente a Config */ subframe2=(Frame) xv_create(frame,FRAME_CMD, XV_HEIGHT,200, XV_WIDTH,400, FRAME_SHOW_FOOTER,TRUE, FRAME_LEFT_FOOTER,"How to: After entering the name press ENTER, then press OK", FRAME_LABEL, "Configuration", NULL); panelinfo = (Panel) xv_get( subframe2,FRAME_CMD_PANEL); xv_create( panelinfo, PANEL_BUTTON, XV_X,190, XV_Y,150, PANEL_LABEL_STRING,"OK", PANEL_NOTIFY_PROC,NULL, NULL); xv_create( panelinfo, PANEL_TEXT, XV_X,70, XV_Y,45, PANEL_VALUE,usuario.server_name, PANEL_LABEL_STRING,"Host name:", PANEL_LAYOUT,PANEL_HORIZONTAL, PANEL_NOTIFY_PROC, server_name, PANEL_CLIENT_DATA, frame, PANEL_VALUE_DISPLAY_LENGTH,20, NULL); xv_create( panelinfo, PANEL_NUMERIC_TEXT, XV_X,70, XV_Y,70, PANEL_LABEL_STRING,"Server port:", PANEL_VALUE,usuario.port, PANEL_MAX_VALUE,65535, PANEL_MIN_VALUE,0, PANEL_NOTIFY_PROC, server_port, PANEL_CLIENT_DATA, frame, PANEL_LAYOUT,PANEL_HORIZONTAL, NULL); xv_create( panelinfo, PANEL_TEXT, XV_X,70, XV_Y,95, PANEL_VALUE,usuario.nombre, PANEL_LABEL_STRING,"Your name:", PANEL_LAYOUT,PANEL_HORIZONTAL, PANEL_VALUE_DISPLAY_LENGTH,20, PANEL_NOTIFY_PROC, your_name, PANEL_CLIENT_DATA, frame, NULL); xv_create(panelinfo, PANEL_CHOICE, XV_X,160, XV_Y,120, PANEL_FEEDBACK,PANEL_MARKED, PANEL_CHOOSE_ONE,FALSE, PANEL_LABEL_STRING,"Hide board:", PANEL_VALUE, usuario.hide, PANEL_CHOICE_STRINGS,"ON", NULL, PANEL_NOTIFY_PROC,mitabla_fn2, PANEL_CLIENT_DATA,frame, NULL); /* * todo lo referente a SEND MESSAGE */ subframe3 = (Frame) xv_create(frame,FRAME_CMD, XV_HEIGHT,135, XV_WIDTH,420, FRAME_SHOW_FOOTER,TRUE, FRAME_LEFT_FOOTER,"How to: After entering the message press ENTER, then press OK", FRAME_LABEL, "Send Message", FRAME_CMD_PIN_STATE,TRUE, NULL); panel3 = (Panel) xv_get( subframe3,FRAME_CMD_PANEL); xv_create( panel3, PANEL_TEXT, XV_X,20, XV_Y,20, PANEL_VALUE,"", PANEL_LABEL_STRING,"Message:", PANEL_LAYOUT,PANEL_HORIZONTAL, PANEL_NOTIFY_PROC, to_message, PANEL_CLIENT_DATA, frame, PANEL_VALUE_DISPLAY_LENGTH,60, NULL); xv_create( panel3, PANEL_NUMERIC_TEXT, XV_X,20, XV_Y,45, PANEL_LABEL_STRING,"To Player (0=broadcast):", PANEL_MAX_VALUE,MAXPLAYER, PANEL_MIN_VALUE,0, PANEL_NOTIFY_PROC, to_player, PANEL_CLIENT_DATA, frame, PANEL_LAYOUT,PANEL_HORIZONTAL, NULL); xv_create(panel3, PANEL_CHOICE, XV_X,160, XV_Y,70, PANEL_FEEDBACK,PANEL_MARKED, PANEL_CHOOSE_ONE,FALSE, PANEL_LABEL_STRING,"Local Echo:", PANEL_VALUE, usuario.lecho, PANEL_CHOICE_STRINGS,"ON", NULL, PANEL_NOTIFY_PROC,localecho, PANEL_CLIENT_DATA,frame, NULL); xv_create( panel3, PANEL_BUTTON, XV_X,200, XV_Y,100, PANEL_LABEL_STRING,"OK", PANEL_NOTIFY_PROC,real_message, NULL); /* * Todo lo referente al icono */ icon = (Icon) xv_create(XV_NULL, ICON, ICON_IMAGE, xv_create(XV_NULL, SERVER_IMAGE, XV_WIDTH, baticono_width, XV_HEIGHT, baticono_height, SERVER_IMAGE_X_BITS, baticono_bits, NULL), NULL); xv_set(frame, FRAME_ICON, icon, NULL); /* * Crea el panel donde van a ir a parar todos los mensajes. */ tty = (Tty) xv_create( frame,TTY, XV_X,0, WIN_BELOW,panel, XV_HEIGHT,80, XV_WIDTH,500, TTY_ARGV,TTY_ARGV_DO_NOT_FORK, NULL); /* * startup x, and run */ window_fit( frame ); }/* * main() */void help() { printf("\n\nBatalla Naval XView client v"BN_XVER" (c) 1995,96,97,98 Ricardo Quesada\n"); printf("\nsyntax:"); printf("\nxbnclient [-s host_name] [-p server_port] [-u username]"); 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\nSend bugs,doubts,fixes to rquesada@dc.uba.ar\n"); exit(-1);}void main( int argc, char *argv[] ){ int i; xv_init( XV_INIT_ARGC_PTR_ARGV, &argc, argv, NULL); strcpy( usuario.server_name,"localhost"); usuario.port=1995; strncpy( usuario.nombre,getenv("LOGNAME"),MAXNAMELEN); for(i=1;i<argc;i++) { if(argv[i][0]=='-') { switch(argv[i][1]) { case 'x': bnsup=argv[i][2]; break; case 's': case 'S': if(argc>i+1) strncpy( usuario.server_name,argv[i+1],50); else help(); break; case 'u': case 'U': if(argc>i+1) strncpy( usuario.nombre,argv[i+1],MAXNAMELEN); else help(); break; case 'p': case 'P': if(argc>i+1) usuario.port=atoi(argv[i+1]); else help(); break; case 'h': case 'H': case '?': case '-': default: help(); break; } } else { if(argv[i-1][0]!='-') help(); } } init_datos(); /* inicializa variables */ init_X(); /* inicializa entorno y juego */ ttyfill("Batalla Naval XView Client v"BN_XVER" (c) 1995,98 Ricardo Quesada.\n\r"); ttyfill("rquesada@dc.uba.ar - 8 Mar 98 - Buenos Aires, Argentina.\n\r"); ttyfill("To start fill your board with the ships then press 'Send Board'.\n\r"); init_cliente(); fillboard(Bboard,0); fillboard(Nboard,1); xv_main_loop(frame);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -