📄 gbnclient.c
字号:
{ 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 + -