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

📄 gui-dial.c

📁 支持网络和单机的麻将游戏
💻 C
📖 第 1 页 / 共 5 页
字号:
#ifndef WIN32  gtk_widget_show(openfile);#endif  gtk_box_pack_start(GTK_BOX(box),openfile,0,0,0);  w1 = gtk_label_new("Socket file: ");  gtk_widget_show(w1);  gtk_box_pack_start(GTK_BOX(openfile),w1,0,0,0);  openfiletext = gtk_entry_new();  gtk_widget_show(openfiletext);  gtk_box_pack_start(GTK_BOX(openfile),openfiletext,0,0,0);  opengamefile = gtk_hbox_new(0,0);  gtk_widget_show(opengamefile);  gtk_box_pack_start(GTK_BOX(box),opengamefile,0,0,0);  w1 = gtk_label_new("Saved game file: ");  gtk_widget_show(w1);  gtk_box_pack_start(GTK_BOX(opengamefile),w1,0,0,0);  opengamefiletext = gtk_entry_new();  gtk_widget_show(opengamefiletext);  gtk_box_pack_start(GTK_BOX(opengamefile),opengamefiletext,0,0,0);  w2 = gtk_hbox_new(0,0);  gtk_widget_show(w2);  gtk_box_pack_start(GTK_BOX(box),w2,0,0,0);  w1 = gtk_label_new("Player ID: ");  gtk_widget_show(w1);  gtk_box_pack_start(GTK_BOX(w2),w1,0,0,0);  openidtext = gtk_entry_new();  gtk_widget_show(openidtext);  gtk_entry_set_text(GTK_ENTRY(openidtext),idt);  gtk_box_pack_start(GTK_BOX(w2),openidtext,0,0,0);  w2 = gtk_hbox_new(0,0);  gtk_widget_show(w2);  gtk_box_pack_start(GTK_BOX(box),w2,0,0,0);  w1 = gtk_label_new("Name: ");  gtk_widget_show(w1);  gtk_box_pack_start(GTK_BOX(w2),w1,0,0,0);  opennametext = gtk_entry_new();  gtk_widget_show(opennametext);  if ( ! nt || !nt[0] ) nt = getenv("LOGNAME");  if ( ! nt ) nt = getlogin(); /* may need to be in sysdep.c */  gtk_entry_set_text(GTK_ENTRY(opennametext),nt);  gtk_box_pack_start(GTK_BOX(w2),opennametext,0,0,0);  /* Now some stuff for when this panel is in its personality as     a start game panel */  opengamepanel = bbox = gtk_vbox_new(0,dialog_vert_spacing);  /* gtk_widget_show(bbox); */  gtk_box_pack_start(GTK_BOX(box),bbox,0,0,0);  for ( i = 0 ; i < 3 ; i++ ) {    static const char *playerlabs[] = { "Second player:" , "Third player:",					"Fourth player:" };    w2 = gtk_hbox_new(0,dialog_button_spacing);    gtk_widget_show(w2);    gtk_box_pack_start(GTK_BOX(bbox),w2,0,0,0);    w1 = gtk_label_new(playerlabs[i]);    gtk_widget_show(w1);    gtk_box_pack_start(GTK_BOX(w2),w1,0,0,0);    openplayercheckboxes[i] = w1 =       gtk_check_button_new_with_label("Start computer player   ");    gtk_widget_show(w1);    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w1),1);    gtk_box_pack_end(GTK_BOX(w2),w1,0,0,0);    gtk_signal_connect(GTK_OBJECT(w1),"toggled",openbut_callback,(gpointer)(10+i));    openplayeroptionboxes[i] = w2 = gtk_hbox_new(0,dialog_button_spacing);    gtk_widget_show(w2);    gtk_box_pack_start(GTK_BOX(bbox),w2,0,0,0);    w1 = gtk_label_new(" Name:");    gtk_widget_show(w1);    gtk_box_pack_start(GTK_BOX(w2),w1,0,0,0);    openplayernames[i] = w1 = gtk_entry_new();    gtk_entry_set_text(GTK_ENTRY(w1),robot_names[i]);    gtk_widget_show(w1);    gtk_box_pack_start(GTK_BOX(w2),w1,0,0,0);    w1 = gtk_label_new("  Options:");    gtk_widget_show(w1);    gtk_box_pack_start(GTK_BOX(w2),w1,0,0,0);    openplayeroptions[i] = w1 = gtk_entry_new();    gtk_widget_show(w1);    gtk_box_pack_start(GTK_BOX(w2),w1,0,0,0);  }  openallowdisconnectbutton = w1 =    gtk_check_button_new_with_label("Allow disconnection from game");  gtk_widget_show(w1);  gtk_box_pack_start(GTK_BOX(bbox),w1,0,0,0);  opensaveonexitbutton = w1 =    gtk_check_button_new_with_label("Save game state on exit");  gtk_widget_show(w1);  gtk_box_pack_start(GTK_BOX(bbox),w1,0,0,0);  openrandomseatsbutton = w1 =    gtk_check_button_new_with_label("Seat players randomly");  gtk_widget_show(w1);  gtk_box_pack_start(GTK_BOX(bbox),w1,0,0,0);  opentimeoutspinbutton = w1 =     gtk_spin_button_new(GTK_ADJUSTMENT(gtk_adjustment_new(1.0*game_get_option_entry_from_table(&prefs_table,GOTimeout,NULL)->value.optnat,0.0,300.0,1.0,10.0,0.0)),			0.0,0);  gtk_widget_show(w1);  opentimeout = w2 = gtk_hbox_new(0,dialog_button_spacing);  gtk_widget_show(w2);  gtk_box_pack_start(GTK_BOX(w2),w1,0,0,0);  w1 = gtk_label_new("seconds allowed for claims");  gtk_widget_show(w1);  gtk_box_pack_start(GTK_BOX(w2),w1,0,0,0);  gtk_box_pack_start(GTK_BOX(bbox),w2,0,0,0);  w1 = gtk_hbox_new(0,dialog_button_spacing);  gtk_widget_show(w1);  gtk_box_pack_start(GTK_BOX(box),w1,0,0,0);  openconnectbutton = w2 = gtk_button_new_with_label("Connect");  gtk_widget_show(w2);  gtk_box_pack_start(GTK_BOX(w1),w2,0,0,0);  gtk_signal_connect(GTK_OBJECT(w2),"clicked",open_connection,0);  openstartbutton = w2 = gtk_button_new_with_label("Start Game");  /* gtk_widget_show(w2); */  gtk_box_pack_start(GTK_BOX(w1),w2,0,0,0);  gtk_signal_connect(GTK_OBJECT(w2),"clicked",open_connection,(gpointer)1);  openresumebutton = w2 = gtk_button_new_with_label("Resume Game");  /* gtk_widget_show(w2); */  gtk_box_pack_start(GTK_BOX(w1),w2,0,0,0);  gtk_signal_connect(GTK_OBJECT(w2),"clicked",open_connection,(gpointer)2);  w2 = gtk_button_new_with_label("Cancel");  gtk_widget_show(w2);  gtk_box_pack_end(GTK_BOX(w1),w2,0,0,0);  gtk_signal_connect_object(GTK_OBJECT(w2),"clicked",			    close_saving_posn,GTK_OBJECT(open_dialog));  /* initialize dialog values */  open_dialog_popup(NULL,(gpointer)-1);}/* if data is -1, just set the values of the open dialog fields,   to be picked up by do_connect */void open_dialog_popup(GtkWidget *w UNUSED, gpointer data) {  int new = 0, join = 0, resume = 0;  char buf[256];  char ht[256], pt[10], ft[256], idt[10];  int usehost = 1;  ht[0] = pt[0] = idt[0] = ft[0] = 0;  if ( strchr(address,':') ) {    /* grrr */    if ( address[0] == ':' ) {      strcpy(ht,"localhost");      strcpy(pt,address+1);    } else {      sscanf(address,"%[^:]:%s",ht,pt);    }  } else {    strcpy(ft,address);    usehost = 0;  }  /* set the default id to be our current id */  sprintf(buf,"%d",our_id);  if ( (int)data == 1 ) new = 1;  if ( (int)data == 0 ) join = 1;  if ( (int)data == 2 ) resume = 1;  gtk_entry_set_text(GTK_ENTRY(openidtext),buf);  /* set the host and port etc from the address */  gtk_widget_set_sensitive(openhost,usehost);  gtk_entry_set_text(GTK_ENTRY(openhosttext),ht);  gtk_widget_set_sensitive(openport,usehost);  gtk_entry_set_text(GTK_ENTRY(openporttext),pt);  gtk_widget_set_sensitive(openfile,!usehost);  gtk_entry_set_text(GTK_ENTRY(openfiletext),ft);  if ( (int)data == -1 ) return;  if ( join ) {    gtk_widget_show(openhost);  } else {    gtk_widget_hide(openhost);    gtk_entry_set_text(GTK_ENTRY(openhosttext),"localhost");  }  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(usehost ? openhosttoggle : openunixtoggle),1);  if ( resume ) gtk_widget_show(opengamefile);  else gtk_widget_hide(opengamefile);  if ( new || resume ) gtk_widget_show(opengamepanel);  else gtk_widget_hide(opengamepanel);  if ( new ) gtk_widget_show(opentimeout);  else gtk_widget_hide(opentimeout);  if ( new ) gtk_widget_show(openrandomseatsbutton);  else gtk_widget_hide(openrandomseatsbutton);  if ( new ) gtk_widget_show(openstartbutton);  else gtk_widget_hide(openstartbutton);  if ( join ) gtk_widget_show(openconnectbutton);  else gtk_widget_hide(openconnectbutton);  if ( resume ) gtk_widget_show(openresumebutton);  else gtk_widget_hide(openresumebutton);  dialog_popup(open_dialog,DPCentredOnce);  if ( new ) gtk_widget_grab_focus(openstartbutton);  if ( join ) gtk_widget_grab_focus(openconnectbutton);  if ( resume ) gtk_widget_grab_focus(openresumebutton);}/* an accelerator group  for the turn dialog */static GtkAccelGroup *turn_accel;/* this little function is used to install or remove the   turn accelerators */static void add_or_remove_turn_accels(GtkWidget *w UNUSED, gpointer data){  if ( turn_accel == NULL ) return;  if ( data ) {    gtk_window_add_accel_group(GTK_WINDOW(topwindow),turn_accel);  } else {    gtk_window_remove_accel_group(GTK_WINDOW(topwindow),turn_accel);  }}/* the turn dialog: buttons for Discard (also declares specs),   Kong (concealed, of course), Add to Pung, Mah Jong */void turn_dialog_init(void) {  GtkWidget *box, *butbox, *w;  if ( turn_dialog ) {    gtk_widget_destroy(turn_dialog);    turn_dialog = NULL;  }  switch ( dialogs_position ) {  case DialogsCentral:  case DialogsUnspecified:    turn_dialog = gtk_event_box_new();    gtk_fixed_put(GTK_FIXED(discard_area),turn_dialog,0,0);    break;  case DialogsBelow:    turn_dialog = gtk_event_box_new();    gtk_box_pack_start(GTK_BOX(dialoglowerbox),turn_dialog,1,0,0);    break;  case DialogsPopup:    turn_dialog = gtk_window_new(GTK_WINDOW_DIALOG);    gtk_signal_connect (GTK_OBJECT (turn_dialog), "delete_event",                               GTK_SIGNAL_FUNC (gtk_widget_hide), NULL);  }  box = gtk_vbox_new(0,dialog_vert_spacing);  gtk_container_set_border_width(GTK_CONTAINER(box),				 dialog_border_width);  gtk_widget_show(box);  gtk_container_add(GTK_CONTAINER(turn_dialog),box);  butbox = gtk_hbox_new(1,dialog_button_spacing);  gtk_widget_show(butbox);  gtk_box_pack_end(GTK_BOX(box),butbox,0,0,0);      turn_dialog_label = w = gtk_label_new("Select tile and:");  gtk_widget_show(w);  gtk_box_pack_end(GTK_BOX(box),w,0,0,0);  turn_accel = gtk_accel_group_new();  w = gtk_button_new_with_label("Discard");  gtk_widget_show(w);  gtk_box_pack_start(GTK_BOX(butbox),w,1,1,0);  /* so other function can set it */  turn_dialog_discard_button = w;  gtk_signal_connect(GTK_OBJECT(w),"clicked",		     turn_callback,(gpointer)PMsgDiscard);  gtk_accel_group_add(turn_accel,GDK_d,0,0,GTK_OBJECT(w),"clicked");  gtk_label_set_pattern(GTK_LABEL(GTK_BIN(w)->child),"_");      w = gtk_button_new_with_label("& Calling");  gtk_widget_show(w);  gtk_box_pack_start(GTK_BOX(butbox),w,1,1,0);  /* so other function can set it */  turn_dialog_calling_button = w;  /* this assumes knowledge that protocol enums don't go above     1000000 */  gtk_signal_connect(GTK_OBJECT(w),"clicked",		     turn_callback,(gpointer)(PMsgDiscard+1000000));  gtk_accel_group_add(turn_accel,GDK_c,0,0,GTK_OBJECT(w),"clicked");  gtk_label_set_pattern(GTK_LABEL(GTK_BIN(w)->child),"  _");      w = gtk_button_new_with_label("Kong");  GTK_WIDGET_UNSET_FLAGS(w,GTK_CAN_FOCUS);  gtk_widget_show(w);  gtk_box_pack_start(GTK_BOX(butbox),w,1,1,0);  gtk_signal_connect(GTK_OBJECT(w),"clicked",		     turn_callback,(gpointer)PMsgDeclareClosedKong);  gtk_accel_group_add(turn_accel,GDK_k,0,0,GTK_OBJECT(w),"clicked");  gtk_label_set_pattern(GTK_LABEL(GTK_BIN(w)->child),"_");      w = gtk_button_new_with_label("Add to Pung");  GTK_WIDGET_UNSET_FLAGS(w,GTK_CAN_FOCUS);  gtk_widget_show(w);  gtk_box_pack_start(GTK_BOX(butbox),w,1,1,0);  gtk_signal_connect(GTK_OBJECT(w),"clicked",		     turn_callback,(gpointer)PMsgAddToPung);  gtk_accel_group_add(turn_accel,GDK_p,0,0,GTK_OBJECT(w),"clicked");  gtk_label_set_pattern(GTK_LABEL(GTK_BIN(w)->child),"       _");      w = gtk_button_new_with_label("Mah Jong!");  GTK_WIDGET_UNSET_FLAGS(w,GTK_CAN_FOCUS);  gtk_widget_show(w);  gtk_box_pack_start(GTK_BOX(butbox),w,1,1,0);  gtk_signal_connect(GTK_OBJECT(w),"clicked",		     turn_callback,(gpointer)PMsgMahJong);  gtk_accel_group_add(turn_accel,GDK_m,0,0,GTK_OBJECT(w),"clicked");  gtk_label_set_pattern(GTK_LABEL(GTK_BIN(w)->child),"_");  gtk_signal_connect(GTK_OBJECT(turn_dialog),"hide",    add_or_remove_turn_accels,(gpointer)0);  gtk_signal_connect(GTK_OBJECT(turn_dialog),"show",    add_or_remove_turn_accels,(gpointer)1);}      /* dialog for scoring phase: forming closed sets */static GtkWidget *scoring_done, *scoring_special;static GtkAccelGroup *scoring_accel;static void add_or_remove_scoring_accels(GtkWidget *w UNUSED, gpointer data){  if ( scoring_accel == NULL ) return;  if ( data ) {    gtk_window_add_accel_group(GTK_WINDOW(topwindow),scoring_accel);  } else {    gtk_window_remove_accel_group(GTK_WINDOW(topwindow),scoring_accel);  }}void scoring_dialog_init(void) {  GtkWidget *box, *butbox, *w;    if ( scoring_dialog ) {    gtk_widget_destroy(scoring_dialog);    scoring_dialog = NULL;  }  switch ( dialogs_position ) {  case DialogsCentral:  case DialogsUnspecified:    scoring_dialog = gtk_event_box_new();    gtk_fixed_put(GTK_FIXED(discard_area),scoring_dialog,0,0);    break;  case DialogsBelow:    scoring_dialog = gtk_event_box_new();    gtk_box_pack_start(GTK_BOX(dialoglowerbox),scoring_dialog,1,0,0);    break;  case DialogsPopup:    scoring_dialog = gtk_window_new(GTK_WINDOW_DIALOG);    gtk_signal_connect (GTK_OBJECT (scoring_dialog), "delete_event",                               GTK_SIGNAL_FUNC (gtk_widget_hide), NULL);  }    box = gtk_vbox_new(0,dialog_vert_spacing);  gtk_container_set_border_width(GTK_CONTAINER(box),				 dialog_border_width);  gtk_widget_show(box);  gtk_container_add(GTK_CONTAINER(scoring_dialog),box);  butbox = gtk_hbox_new(1,dialog_button_spacing);  gtk_widget_show(butbox);  gtk_box_pack_end(GTK_BOX(box),butbox,0,0,0);    w = gtk_label_new("Declare concealed sets\nSelect 1st tile and:");  gtk_widget_show(w);  gtk_box_pack_end(GTK_BOX(box),w,0,0,0);  scoring_accel = gtk_accel_group_new();  w = gtk_button_new_with_label("Eyes");  GTK_WIDGET_UNSET_FLAGS(w,GTK_CAN_FOCUS);  gtk_widget_show(w);  gtk_box_pack_start(GTK_BOX(butbox),w,1,1,0);  gtk_signal_connect(GTK_OBJECT(w),"clicked",		     turn_callback,(gpointer)PMsgFormClosedPair);  gtk_accel_group_add(scoring_accel,GDK_e,0,0,GTK_OBJECT(w),"clicked");  gtk_label_set_pattern(GTK_LABEL(GTK_BIN(w)->child),"_");    w = gtk_button_new_with_label("Chow");

⌨️ 快捷键说明

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