⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xbnclient.c

📁 网络战船游戏
💻 C
📖 第 1 页 / 共 3 页
字号:
	       {		  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 + -