📄 gbnclient.c
字号:
return TRUE;}/* Right panel */static gint expose_event_right (GtkWidget *widget, GdkEventExpose *event){ gint i; /* Dibuja las lineas */ switch( usuario.gano ) { case 0: /* Sigue jugando */ for(i=0;i<10;i++) { gdk_draw_line (widget->window, widget->style->black_gc, 0,LARGO*i, ANCHO*10,LARGO*i); gdk_draw_line (widget->window, widget->style->black_gc, ANCHO*i,0, ANCHO*i,LARGO*10); } fillboard(usuario.tempclit,1); /* v0.50 */ inteliclient(usuario.tempclit); break; case 1: /* gano el guacho */ showboard(winner); break; case -1: /* perdio el forro */ showboard(gameover); break; default: break; } return FALSE;}static gint button_press_event_right (GtkWidget *widget, GdkEventButton *event){ gint x,y; gchar outbuf[MSGMAXLEN]; x=event->x / ANCHO; y=event->y / LARGO; if(usuario.play<3) { ttyfill("Uh? Wait man. First, try to start the game\n"); return TRUE; } if(usuario.play==3) { ttyfill("Be patient bro. Wait for your turn\n"); return TRUE; } if ( event->button == 1 ) { gdk_draw_pixmap( widget->window, widget->style->fg_gc[GTK_WIDGET_STATE(widget)], azul, 0,0, x*ANCHO+1,y*LARGO+1, ANCHO-1,LARGO-1); usuario.play=3; outbuf[0]=x; outbuf[1]=y; bnwrite(sock,outbuf,BNHIT,0,0,usuario.numjug); bnwrite(sock,outbuf,BNREA,usuario.usrfrom,bnsup,usuario.numjug); } return TRUE;}static void remove_page( gint page_num ){// printf("Removing page number %i\n",page_num); gtk_notebook_remove_page( GTK_NOTEBOOK( notebook_right ), page_num );}/* Dibuja la pantalla */static void init_X(){ GtkTooltips *tooltips; GdkColor yellow={ 4, 8, 8, 0 }; GdkColor black={ 4, 0, 0, 0 }; window = gtk_widget_new (gtk_window_get_type (), "GtkObject::user_data", NULL, "GtkWindow::type", GTK_WINDOW_TOPLEVEL, "GtkWindow::title", "Batalla Naval "GBNVER, "GtkWindow::allow_grow",FALSE, "GtkWindow::allow_shrink",FALSE, "GtkContainer::border_width",0, NULL); gtk_signal_connect ( GTK_OBJECT( window), "destroy", GTK_SIGNAL_FUNC( do_exit ), GTK_OBJECT(window) ); gtk_signal_connect ( GTK_OBJECT( window), "delete_event", GTK_SIGNAL_FUNC( do_exit ), GTK_OBJECT(window) ); tooltips=gtk_tooltips_new(); gtk_object_set_data (GTK_OBJECT (window), "tooltips", tooltips); gtk_tooltips_set_colors( tooltips, &black, &yellow); /* Box que contiene a box_left, box_button, box_right */ vbox = gtk_vbox_new ( FALSE, 0); gtk_container_add ( GTK_CONTAINER(window), vbox ); gtk_container_border_width ( GTK_CONTAINER(vbox), 0); gtk_widget_show ( vbox ); /* box horizontal */ hbox = gtk_hbox_new ( FALSE, 0); gtk_container_add ( GTK_CONTAINER(vbox), hbox ); gtk_container_border_width ( GTK_CONTAINER(hbox), 0); gtk_widget_show( hbox ); /******************** LEFT *******************/ notebook_left = gtk_notebook_new(); gtk_notebook_set_tab_pos( GTK_NOTEBOOK(notebook_left),GTK_POS_TOP ); gtk_box_pack_start( GTK_BOX(hbox),notebook_left,TRUE,TRUE,0); gtk_widget_show (notebook_left); // respecto al drawing_left drawing_left = gtk_drawing_area_new(); gtk_drawing_area_size(GTK_DRAWING_AREA(drawing_left),200,200); gtk_widget_show( drawing_left ); // se馻les de la drawing area gtk_signal_connect (GTK_OBJECT (drawing_left), "expose_event", (GtkSignalFunc) expose_event, NULL); gtk_signal_connect (GTK_OBJECT (drawing_left), "button_press_event", (GtkSignalFunc) button_press_event, NULL); gtk_widget_set_events (drawing_left, GDK_EXPOSURE_MASK |GDK_BUTTON_PRESS_MASK); // gtk_widget_set_extension_events (drawing_left, GDK_EXTENSION_EVENTS_ALL); // respecto al drawing_about hbox_text_help = gtk_hbox_new ( FALSE, 0); gtk_widget_show( hbox_text_help ); text_help = gtk_text_new(NULL,NULL); gtk_box_pack_start( GTK_BOX(hbox_text_help), text_help, TRUE,TRUE,0); gtk_widget_show(text_help); vscrollbar_help = gtk_vscrollbar_new (GTK_TEXT (text_help)->vadj); gtk_box_pack_start( GTK_BOX(hbox_text_help), vscrollbar_help, FALSE,TRUE,0); gtk_widget_show (vscrollbar_help); label_left = gtk_label_new("My board"); gtk_notebook_append_page ( GTK_NOTEBOOK(notebook_left),drawing_left,label_left); label_left = gtk_label_new("Hide / Help / Credits"); gtk_notebook_append_page ( GTK_NOTEBOOK(notebook_left),hbox_text_help,label_left); bn_help(); /* center */ vbox_buttons = gtk_vbox_new ( FALSE, 10); gtk_container_add ( GTK_CONTAINER (hbox), vbox_buttons ); gtk_container_border_width( GTK_CONTAINER(vbox_buttons),10); gtk_widget_show( vbox_buttons ); button_connect = gtk_button_new_with_label("Connect"); gtk_box_pack_start( GTK_BOX(vbox_buttons), button_connect, TRUE,TRUE,0); gtk_signal_connect_object( GTK_OBJECT (button_connect), "clicked", GTK_SIGNAL_FUNC(init_cliente), GTK_OBJECT (window) ); gtk_widget_show(button_connect); gtk_tooltips_set_tip (tooltips,button_connect, "Connect to the bnserver", "Connect to the bnserver"); button_disconnect = gtk_button_new_with_label("Disconnect"); gtk_box_pack_start( GTK_BOX(vbox_buttons), button_disconnect, TRUE,TRUE,0); gtk_signal_connect_object( GTK_OBJECT (button_disconnect), "clicked", GTK_SIGNAL_FUNC(init_cliente), GTK_OBJECT (window) ); gtk_widget_hide(button_disconnect); gtk_tooltips_set_tip (tooltips,button_disconnect, "Disconnect from the bnserver", "Disconnect from the bnserver"); button_sendboard = gtk_button_new_with_label ("Send Board"); gtk_box_pack_start( GTK_BOX(vbox_buttons), button_sendboard,TRUE,TRUE,0); gtk_signal_connect_object( GTK_OBJECT (button_sendboard), "clicked", GTK_SIGNAL_FUNC(play), GTK_OBJECT (window) ); gtk_widget_set_sensitive(button_sendboard,FALSE); gtk_widget_show(button_sendboard); gtk_tooltips_set_tip (tooltips,button_sendboard, "Send your board (ships) to the bnserver", "Send your board (ships) to the bnserver"); button_start = gtk_button_new_with_label("Start"); gtk_box_pack_start( GTK_BOX(vbox_buttons), button_start, TRUE,TRUE,0); gtk_signal_connect_object( GTK_OBJECT (button_start), "clicked", GTK_SIGNAL_FUNC(play), GTK_OBJECT (window) ); gtk_widget_hide(button_start); gtk_tooltips_set_tip (tooltips,button_start, "Start the game", "Start the game"); button_sendmsg = gtk_button_new_with_label ("Send Message"); gtk_box_pack_start( GTK_BOX(vbox_buttons), button_sendmsg,TRUE,TRUE,0); gtk_signal_connect_object( GTK_OBJECT (button_sendmsg), "clicked", GTK_SIGNAL_FUNC(bnsendmsg), GTK_OBJECT (window) ); gtk_widget_set_sensitive(button_sendmsg,FALSE); gtk_widget_show(button_sendmsg); gtk_tooltips_set_tip (tooltips,button_sendmsg, "Send a message to your enemies", "Send a message to your enemies"); button_status = gtk_button_new_with_label ("Status"); gtk_box_pack_start( GTK_BOX(vbox_buttons), button_status,TRUE,TRUE,0); gtk_signal_connect_object( GTK_OBJECT (button_status), "clicked", GTK_SIGNAL_FUNC(status), GTK_OBJECT (window) ); gtk_widget_set_sensitive(button_status,FALSE); gtk_widget_show(button_status); gtk_tooltips_set_tip (tooltips,button_status, "The status of the bnserver & your enemies", "The status of the bnserver & your enemies"); button_config = gtk_button_new_with_label ("Config"); gtk_box_pack_start( GTK_BOX(vbox_buttons), button_config,TRUE,TRUE,0); gtk_signal_connect_object( GTK_OBJECT (button_config), "clicked", GTK_SIGNAL_FUNC(configure), GTK_OBJECT (window) ); gtk_widget_show(button_config); gtk_tooltips_set_tip (tooltips,button_config, "Config the client", "Config the client"); button_quit = gtk_button_new_with_label ("Quit"); gtk_box_pack_start( GTK_BOX(vbox_buttons), button_quit,TRUE,TRUE,0); gtk_signal_connect_object( GTK_OBJECT (button_quit), "clicked", GTK_SIGNAL_FUNC(do_exit), GTK_OBJECT (window) ); gtk_widget_show(button_quit); gtk_tooltips_set_tip (tooltips,button_quit, "Quit the game", "Quit the game"); /* right */ notebook_right = gtk_notebook_new(); gtk_signal_connect ( GTK_OBJECT ( notebook_right ), "switch_page", GTK_SIGNAL_FUNC ( page_switch ), NULL ); gtk_notebook_set_tab_pos( GTK_NOTEBOOK(notebook_right),GTK_POS_TOP ); gtk_box_pack_start( GTK_BOX(hbox),notebook_right,TRUE,TRUE,0); gtk_container_border_width( GTK_CONTAINER( notebook_right), 0 ); gtk_notebook_set_scrollable( GTK_NOTEBOOK(notebook_right) , TRUE ); gtk_notebook_set_show_tabs( GTK_NOTEBOOK(notebook_right) , TRUE ); gtk_notebook_popup_enable( GTK_NOTEBOOK(notebook_right) ); gtk_widget_realize( notebook_right ); gtk_widget_show (notebook_right); drawing_right_about = gtk_drawing_area_new(); gtk_drawing_area_size(GTK_DRAWING_AREA(drawing_right_about),200,200); gtk_signal_connect (GTK_OBJECT (drawing_right_about), "expose_event", (GtkSignalFunc) expose_event_about, NULL ); gtk_widget_set_events (drawing_right_about, GDK_EXPOSURE_MASK ); gtk_widget_show( drawing_right_about); label_right_about = gtk_label_new("Batalla Naval" ); gtk_widget_show( drawing_right_about); gtk_notebook_append_page( GTK_NOTEBOOK( notebook_right), drawing_right_about, label_right_about ); /* Ventana de texto de abajo */ separator = gtk_hseparator_new (); gtk_box_pack_start ( GTK_BOX(vbox), separator, FALSE,TRUE, 0); gtk_widget_show(separator); hbox_text = gtk_hbox_new ( FALSE, 0); gtk_container_add ( GTK_CONTAINER(vbox), hbox_text ); gtk_widget_show( hbox_text ); text = gtk_text_new(NULL,NULL); gtk_box_pack_start( GTK_BOX(hbox_text), text, TRUE,TRUE,0); gtk_widget_show(text); vscrollbar = gtk_vscrollbar_new (GTK_TEXT (text)->vadj); gtk_range_set_update_policy( GTK_RANGE( vscrollbar ), GTK_UPDATE_CONTINUOUS ); gtk_box_pack_start( GTK_BOX(hbox_text), vscrollbar, FALSE,TRUE,0); gtk_widget_show (vscrollbar); gtk_text_freeze(GTK_TEXT(text)); gtk_widget_realize(text); gtk_text_insert( GTK_TEXT(text),NULL,NULL,NULL,"Batalla Naval - "GBNVER" by Ricardo Quesada (c) 1995,96,97,98\n",-1); gtk_text_thaw(GTK_TEXT(text)); /* StatusBar */ hbox_status = gtk_hbox_new ( FALSE, 0); gtk_container_add ( GTK_CONTAINER(vbox), hbox_status ); gtk_container_border_width ( GTK_CONTAINER(hbox_status), 0); gtk_widget_show ( hbox_status ); statusbar_right = gtk_statusbar_new(); gtk_box_pack_end( GTK_BOX( hbox_status ), statusbar_right, TRUE,TRUE, 0); gtk_widget_show( statusbar_right ); statusbar_left = gtk_statusbar_new(); gtk_box_pack_end( GTK_BOX( hbox_status ), statusbar_left, TRUE,TRUE, 0); gtk_widget_show( statusbar_left ); gtk_statusbar_push( GTK_STATUSBAR( statusbar_right ), 1, "Cliente GTK"); gtk_statusbar_push( GTK_STATUSBAR( statusbar_left ), 1, "Batalla Naval"); /* Pixmaps */ fondo = gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL], fondo_xpm ); rojo = gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL], rojo_xpm ); verde = gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL], verde_xpm ); azul = gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL], azul_xpm ); negro = gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL], negro_xpm ); about = gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL], about_xpm ); gameover = gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL], gameover_xpm ); winner = gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL], winner_xpm ); icono = gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL], icono_xpm ); gdk_window_set_icon (window->window, NULL, icono , mask ); /* Principal */ gtk_widget_show( window);}/************************************************************************* * * * CODIGO GENERICO * ( mentira !!!!! ) * *************************************************************************/static size_t bnwrite(int fd,char *buf,char tip0,char tip1,char tip2,char jugyo ){ gint i; struct protocolo proto; proto.bnptip0=tip0; proto.bnptip1=tip1; proto.bnptip2=tip2; proto.jugador=jugyo; for(i=0;i<MSGMAXLEN;i++) proto.bnpmsg[i]=buf[i]; strcpy(proto.bnphead,BNPHEAD); proto.bnpver=BNPVER; return( write(fd,&proto,MAXLEN) ) ;}/* convierte un char[10][10] a un char[100] */void iwtable( char *dest){ gint i,x,y; x=0;y=0; for(i=0;i<100;i++) { dest[i]=mitabla[x][y]; x++; if(x>=10) { x=0;y++; } }}/* pone por default la misma tabla que jugue antes */void filtermiboard() { gint x,y; for(x=0;x<10;x++) { for(y=0;y<10;y++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -