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

📄 gbnclient.c

📁 网络战船游戏
💻 C
📖 第 1 页 / 共 4 页
字号:
	  {	     if( mitabla[x][y] >= BARCO ) 	       mitabla[x][y]=BARCO;	     else if( mitabla[x][y] <= NOBARCO ) 	       mitabla[x][y]=NOBARCO;	     	  }     }}/* * Pone en un temporal datos ( Usados ppalmente por Cli GTK ) */void putintemp( char *table ){   gint i;   for(i=0;i<100;i++)     usuario.tempclit[i]=table[i];}void showboard( GdkPixmap *pixmap ){   gint i;      i = gtk_notebook_current_page( GTK_NOTEBOOK( notebook_right ) );   i = usuario.pages[ i ] ;  /* puto bug resuelto */      gdk_draw_pixmap( drawing_right[i]->window,		   drawing_right[i]->style->fg_gc[GTK_WIDGET_STATE(drawing_right[i])],		   pixmap,		   0,0,		   0,0,		   200,200		   );}/* funcion que rellena los tableros * IN: char * - relleno * IN: int - 0 - miboard *         - 1 - tuboard */void fillboard( char *filltable, int a ){   gint i,j;   gint k;      i=0;j=0;      for(k=0;k<100;k++)     {		if(a==0)	  pmicell( i,j, filltable[k]);	if(a==1)	  ptucell( i,j, filltable[k]);		i++;	if (i==10)	  {	     j++;i=0;	  }     }}void inteliclient( char *table){   gint i,x,y;      x=0;   y=0;      for(i=0;i<100;i++)     {	switch(table[i])	  {	   case HUNDIDO:	   case TOCADO:	     ptucell(x-1,y-1,AGUA);	     ptucell(x-1,y+1,AGUA);	     ptucell(x+1,y-1,AGUA);								     ptucell(x+1,y+1,AGUA);	     break;	   case NOBARCO:	     if(x<9 && table[i+1]==HUNDIDO)	       ptucell(x,y,AGUA);	     	     if(x>0 && table[i-1]==HUNDIDO)	       ptucell(x,y,AGUA);	     	     if(y<9 && table[i+10]==HUNDIDO)	       ptucell(x,y,AGUA);	     	     if(y>0 && table[i-10]==HUNDIDO)	       ptucell(x,y,AGUA);	     break;	   default:	     break;	  }	x++;	if(x==10)	  {	     x=0;	     y++;	  }     }}/*************************************************************************** *                       FUNCIONES DE LOS BOTONES ***************************************************************************//* Dis/Connect esta en las funciones INIT con el nombre de init_cliente *//* quit */void destroy_window( GtkWidget *widget, GtkWidget **window ){   *window = NULL;}void do_exit(){   gtk_exit(0);}/* Boton SendBoard y Start */int play( void ){   gchar outbuf[MSGMAXLEN];   gchar temptable[100]; /* ver 0.50 */   usuario.gano=0;      /* Send Board */   if( usuario.play==1)       {	filtermiboard();	iwtable(temptable);	fillboard(temptable,0); /* v0.50 */		iwtable( outbuf );	bnwrite(sock,outbuf,BNWRI,usuario.numjug,0,usuario.numjug);	return( TRUE );     }      /* Start */   else if(usuario.play==2)      {	bnwrite(sock,outbuf,BNSTR,usuario.numjug,0,usuario.numjug);     }      return(TRUE);}/* Boton Status */void status( ){   gchar tempbuf[100];   bnwrite(sock,tempbuf,BNSTS,0,0,usuario.numjug);}/* Boton Config */static gint configure_apply( GtkWidget *widget, GtkWidget *window ){         if( strncmp( usuario.nombre, gtk_entry_get_text( GTK_ENTRY( entry_name)),	       MAXNAMELEN) != 0)     {	if( usuario.play>=1 )	  ttyfill("You must disconnect & then reconnect to public your new name\n");		strncpy( usuario.nombre,		gtk_entry_get_text( GTK_ENTRY( entry_name )),		MAXNAMELEN		);     }      strncpy( usuario.server_name,	   gtk_entry_get_text( GTK_ENTRY( entry_server )),	   50	   );   usuario.port = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinner_port));      return TRUE;}static gint configure_ok( GtkWidget *widget, GtkWidget *window ){   configure_apply( widget, window );   gtk_widget_destroy( window );   return TRUE;}void configure( void ){   static GtkWidget *win_configure=NULL;   GtkWidget *main_vbox;   GtkWidget *vbox;   GtkWidget *hbox1;   GtkWidget *hbox2;   GtkWidget *hbox3;   GtkWidget *hbox4;   GtkWidget *frame;   GtkWidget *label1;   GtkWidget *label2;   GtkWidget *label3;   GtkWidget *separator;   GtkWidget *button_ok;   GtkWidget *button_apply;   GtkWidget *button_cancel;   GtkAdjustment *adj;   if(!win_configure)     {	win_configure = gtk_widget_new (gtk_window_get_type (),					"GtkWindow::type", GTK_WINDOW_TOPLEVEL,					"GtkWindow::title", "Batalla Naval - Config",					"GtkContainer::border_width",0,					NULL);	gtk_signal_connect ( GTK_OBJECT( win_configure), "destroy",			    GTK_SIGNAL_FUNC( destroy_window ),			    &win_configure );	gtk_signal_connect ( GTK_OBJECT( win_configure), "delete_event",			    GTK_SIGNAL_FUNC( destroy_window),			    &win_configure );		main_vbox = gtk_vbox_new( FALSE, 0);	gtk_container_add ( GTK_CONTAINER(win_configure), main_vbox );		frame = gtk_frame_new ("Configuration");	gtk_box_pack_start( GTK_BOX( main_vbox ), frame, TRUE, TRUE, 0);		vbox = gtk_vbox_new( FALSE, 0);	gtk_container_add ( GTK_CONTAINER(frame), vbox );		hbox1 = gtk_hbox_new( FALSE, 0);	gtk_container_add( GTK_CONTAINER( vbox ), hbox1 );	label1 = gtk_label_new("Port:");	gtk_box_pack_start( GTK_BOX( hbox1), label1, TRUE, TRUE, 0);	adj = (GtkAdjustment * ) gtk_adjustment_new( usuario.port, 1.0, 65536.0, 1.0, 5.0, 1.0 );	spinner_port = gtk_spin_button_new( adj, 0, 0);	gtk_box_pack_start( GTK_BOX( hbox1), spinner_port, TRUE, TRUE, 0);		hbox2 = gtk_hbox_new( FALSE, 0);	gtk_container_add( GTK_CONTAINER( vbox ), hbox2 );	label2 = gtk_label_new("Server name:");	gtk_box_pack_start( GTK_BOX( hbox2), label2, TRUE, TRUE, 0);	entry_server = gtk_entry_new( );	gtk_entry_set_text( GTK_ENTRY( entry_server ), usuario.server_name);	gtk_box_pack_start( GTK_BOX( hbox2), entry_server, TRUE, TRUE, 0);		hbox3 = gtk_hbox_new( FALSE, 0);	gtk_container_add( GTK_CONTAINER( vbox ), hbox3 );	label3 = gtk_label_new("User name:");	gtk_box_pack_start( GTK_BOX( hbox3), label3, TRUE, TRUE, 0);	entry_name = gtk_entry_new( );	gtk_entry_set_text( GTK_ENTRY( entry_name ), usuario.nombre);	gtk_box_pack_start( GTK_BOX( hbox3), entry_name, TRUE, TRUE, 0);		separator = gtk_hseparator_new ();	gtk_box_pack_start (GTK_BOX( main_vbox), separator, FALSE, TRUE, 0);		hbox4 = gtk_hbox_new (FALSE, 10);	gtk_box_pack_start (GTK_BOX (main_vbox), hbox4, FALSE, TRUE, 0);		button_ok = gtk_button_new_with_label ("OK");	gtk_signal_connect_object (GTK_OBJECT (button_ok), "clicked",				   GTK_SIGNAL_FUNC(configure_ok),				   GTK_OBJECT(win_configure) );	gtk_box_pack_start (GTK_BOX (hbox4), button_ok, TRUE, TRUE, 0);		button_apply = gtk_button_new_with_label ("Apply");	gtk_signal_connect_object (GTK_OBJECT (button_apply), "clicked",				   GTK_SIGNAL_FUNC(configure_apply),				   GTK_OBJECT( win_configure ));	gtk_box_pack_start (GTK_BOX (hbox4), button_apply, TRUE, TRUE, 0);	button_cancel = gtk_button_new_with_label ("Cancel");	gtk_signal_connect_object (GTK_OBJECT (button_cancel), "clicked",				   GTK_SIGNAL_FUNC(gtk_widget_destroy),				   GTK_OBJECT(win_configure) );	gtk_box_pack_start (GTK_BOX (hbox4), button_cancel, TRUE, TRUE, 0);		GTK_WIDGET_SET_FLAGS (button_ok, GTK_CAN_DEFAULT);	gtk_widget_grab_default (button_ok);     }   if (!GTK_WIDGET_VISIBLE (win_configure))     gtk_widget_show_all (win_configure);   else     gtk_widget_destroy (win_configure);}/* Boton SendMsg */static gint sendmsg_ok( GtkWidget *widget, GtkWidget *window ){   strncpy( usuario.tomsg,	   gtk_entry_get_text( GTK_ENTRY( entry_message )),	   MSGMAXLEN	   );   usuario.towho = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinner_towho));   usuario.lecho = GTK_CHECK_BUTTON( toggle_button )->toggle_button.active ;   if(usuario.play>=1)     bnwrite(sock,usuario.tomsg,BNMSG,usuario.towho,usuario.lecho,usuario.numjug);      gtk_widget_destroy( window );   return TRUE;}void bnsendmsg( void ){   static GtkWidget *win_sendmsg=NULL;   GtkWidget *main_vbox;   GtkWidget *vbox;   GtkWidget *hbox1;   GtkWidget *hbox2;   GtkWidget *hbox4;   GtkWidget *frame;   GtkWidget *label1;   GtkWidget *label2;   GtkWidget *separator;   GtkWidget *button_ok;   GtkWidget *button_cancel;   GtkAdjustment *adj;      if(!win_sendmsg)     {	win_sendmsg = gtk_widget_new (gtk_window_get_type (),				      "GtkWindow::type", GTK_WINDOW_TOPLEVEL,				      "GtkWindow::title", "Batalla Naval - Send Message",				      "GtkContainer::border_width",0,				      NULL);	gtk_signal_connect ( GTK_OBJECT( win_sendmsg ), "destroy",			    GTK_SIGNAL_FUNC( destroy_window ),			    &win_sendmsg );	gtk_signal_connect ( GTK_OBJECT( win_sendmsg ), "delete_event",			    GTK_SIGNAL_FUNC( destroy_window),			    &win_sendmsg );		main_vbox = gtk_vbox_new( FALSE, 0);	gtk_container_add ( GTK_CONTAINER(win_sendmsg), main_vbox );		frame = gtk_frame_new ("Send Message");	gtk_box_pack_start( GTK_BOX( main_vbox ), frame, TRUE, TRUE, 0);		vbox = gtk_vbox_new( FALSE, 0);	gtk_container_add ( GTK_CONTAINER(frame), vbox );		hbox1 = gtk_hbox_new( FALSE, 0);	gtk_container_add( GTK_CONTAINER( vbox ), hbox1 );	label1 = gtk_label_new("To number of player (0=broadcast):");	gtk_box_pack_start( GTK_BOX( hbox1), label1, TRUE, TRUE, 0);	adj = (GtkAdjustment * ) gtk_adjustment_new( usuario.towho, 0.0, MAXPLAYER, 1.0, 1.0, 1.0 );	spinner_towho = gtk_spin_button_new( adj, 0, 0);	gtk_box_pack_start( GTK_BOX( hbox1), spinner_towho, TRUE, TRUE, 0);		hbox2 = gtk_hbox_new( FALSE, 0);	gtk_container_add( GTK_CONTAINER( vbox ), hbox2 );	label2 = gtk_label_new("Message:");	gtk_box_pack_start( GTK_BOX( hbox2), label2, TRUE, TRUE, 0);	entry_message = gtk_entry_new( );	gtk_entry_set_text( GTK_ENTRY( entry_message ), "");	gtk_box_pack_start( GTK_BOX( hbox2), entry_message, TRUE, TRUE, 0);			toggle_button  = gtk_check_button_new_with_label("Local echo");	gtk_box_pack_start( GTK_BOX( vbox ), toggle_button, TRUE, TRUE, 0);		separator = gtk_hseparator_new ();	gtk_box_pack_start (GTK_BOX( main_vbox), separator, FALSE, TRUE, 0);		hbox4 = gtk_hbox_new (FALSE, 10);	gtk_box_pack_start (GTK_BOX (main_vbox), hbox4, FALSE, TRUE, 0);		button_ok = gtk_button_new_with_label ("OK");	gtk_signal_connect_object (GTK_OBJECT (button_ok), "clicked",				   GTK_SIGNAL_FUNC(sendmsg_ok),				   GTK_OBJECT(win_sendmsg) );	gtk_box_pack_start (GTK_BOX (hbox4), button_ok, TRUE, TRUE, 0);	button_cancel = gtk_button_new_with_label ("Cancel");	gtk_signal_connect_object (GTK_OBJECT (button_cancel), "clicked",				   GTK_SIGNAL_FUNC(gtk_widget_destroy),				   GTK_OBJECT(win_sendmsg) );	gtk_box_pack_start (GTK_BOX (hbox4), button_cancel, TRUE, TRUE, 0);		GTK_WIDGET_SET_FLAGS (button_ok, GTK_CAN_DEFAULT);	gtk_widget_grab_default (button_ok);     }   if(!GTK_WIDGET_VISIBLE( win_sendmsg))     gtk_widget_show_all( win_sendmsg );   else     gtk_widget_destroy( win_sendmsg );}/**************************************************************************** *                        FUNCION QUE LEE EL SOCKET ****************************************************************************/static void proceso( gpointer data, gint sock, GdkInputCondition GDK_INPUT_READ ){   struct protocolo proto;   gchar outbuf[MSGMAXLEN];   gchar outbufi[MSGMAXLEN];   gchar temptable[100];     /* v0.50 */   gint i,j;         if( read(sock,&proto,MAXLEN) == MAXLEN)     {	switch(proto.bnptip0) 	  {	   case BNTST:	     break;	   case BNWRI:	     if(proto.bnpmsg[0]==1) 	       {		  ttyfill("The board's OK. Press 'Start' and enjoy the game.\n");		  usuario.play=2;		  		  gtk_widget_hide( button_sendboard );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -