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

📄 main.c

📁 连连看
💻 C
📖 第 1 页 / 共 5 页
字号:
/*************************************************************************** *            main.c * *  Fri Sep 23 08:46:05 2005 *  Copyright  2005  Alpher *  Email: alpher_zmx@yahoo.com.cn ****************************************************************************//* *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */#include "../config.h"#include "main.h"/*  creat menus*/voidget_main_menu( GtkWidget *window, GtkWidget **menubar){	GtkAccelGroup *accel_group; 	GtkWidget *menu1,*menu2,*menu3,*menuitem,*rootmenu; 	accel_group = gtk_accel_group_new(); 	gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);	*menubar = gtk_menu_bar_new();		menu1 = gtk_menu_new();	/*Game*/		menu2 = gtk_menu_new();		/*Single*/			menuitem = gtk_menu_item_new_with_mnemonic(_("_Easy"));			gtk_menu_shell_append(GTK_MENU_SHELL(menu2),menuitem); 			gtk_widget_add_accelerator (menuitem, "activate", accel_group,GDK_F1, 0, GTK_ACCEL_VISIBLE);			g_signal_connect(G_OBJECT(menuitem),"activate",G_CALLBACK(ui_game_begin),(gpointer)1);			menuitem = gtk_menu_item_new_with_mnemonic(_("_Normal"));			gtk_menu_shell_append(GTK_MENU_SHELL(menu2),menuitem);			gtk_widget_add_accelerator (menuitem, "activate", accel_group,GDK_F2, 0, GTK_ACCEL_VISIBLE);			g_signal_connect(G_OBJECT(menuitem),"activate",G_CALLBACK(ui_game_begin),(gpointer)2);			menuitem = gtk_menu_item_new_with_mnemonic(_("_Hard"));			gtk_menu_shell_append(GTK_MENU_SHELL(menu2),menuitem);			gtk_widget_add_accelerator (menuitem, "activate", accel_group,GDK_F3, 0, GTK_ACCEL_VISIBLE);			g_signal_connect(G_OBJECT(menuitem),"activate",G_CALLBACK(ui_game_begin),(gpointer)3);			menuitem = gtk_separator_menu_item_new();			gtk_menu_shell_append(GTK_MENU_SHELL(menu2),menuitem);			menuitem = gtk_menu_item_new_with_mnemonic(_("_Resume"));			gtk_menu_shell_append(GTK_MENU_SHELL(menu2),menuitem);			gtk_widget_add_accelerator (menuitem, "activate", accel_group,GDK_F4, 0, GTK_ACCEL_VISIBLE);			g_signal_connect(G_OBJECT(menuitem),"activate",G_CALLBACK(ui_game_begin),(gpointer)4);	menuitem = gtk_menu_item_new_with_mnemonic(_("_Single"));	gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem),menu2);	gtk_menu_shell_append(GTK_MENU_SHELL(menu1),menuitem);		menu2 = gtk_menu_new();			menuitem = gtk_menu_item_new_with_mnemonic(_("_Easy"));			gtk_menu_shell_append(GTK_MENU_SHELL(menu2),menuitem);			g_signal_connect(G_OBJECT(menuitem),"activate",G_CALLBACK(print_hello),(gpointer)1);			menuitem = gtk_menu_item_new_with_mnemonic(_("_Normal"));			gtk_menu_shell_append(GTK_MENU_SHELL(menu2),menuitem);			g_signal_connect(G_OBJECT(menuitem),"activate",G_CALLBACK(print_hello),(gpointer)2);			menuitem = gtk_menu_item_new_with_mnemonic(_("_Hard"));			gtk_menu_shell_append(GTK_MENU_SHELL(menu2),menuitem);			g_signal_connect(G_OBJECT(menuitem),"activate",G_CALLBACK(print_hello),(gpointer)3);	menuitem = gtk_menu_item_new_with_mnemonic(_("_Two"));	gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem),menu2);	gtk_menu_shell_append(GTK_MENU_SHELL(menu1),menuitem);	/* Two not available*/	gtk_widget_set_sensitive (GTK_WIDGET (menuitem), FALSE);		menu2 = gtk_menu_new();			menu3 = gtk_menu_new();			menuitem = gtk_menu_item_new_with_mnemonic(_("_Easy"));			gtk_menu_shell_append(GTK_MENU_SHELL(menu3),menuitem);			g_signal_connect(G_OBJECT(menuitem),"activate",G_CALLBACK(print_hello),(gpointer)1);			menuitem = gtk_menu_item_new_with_mnemonic(_("_Normal"));			gtk_menu_shell_append(GTK_MENU_SHELL(menu3),menuitem);			g_signal_connect(G_OBJECT(menuitem),"activate",G_CALLBACK(print_hello),(gpointer)2);			menuitem = gtk_menu_item_new_with_mnemonic(_("_Hard"));			gtk_menu_shell_append(GTK_MENU_SHELL(menu3),menuitem);			g_signal_connect(G_OBJECT(menuitem),"activate",G_CALLBACK(print_hello),(gpointer)3);		menuitem = gtk_menu_item_new_with_mnemonic(_("_Server"));		gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem),menu3);		gtk_menu_shell_append(GTK_MENU_SHELL(menu2),menuitem);		menuitem = gtk_menu_item_new_with_mnemonic(_("_Client"));		gtk_menu_shell_append(GTK_MENU_SHELL(menu2),menuitem);		g_signal_connect(G_OBJECT(menuitem),"activate",G_CALLBACK(print_hello),(gpointer)0);	menuitem = gtk_menu_item_new_with_mnemonic(_("_Network"));	gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem),menu2);	gtk_menu_shell_append(GTK_MENU_SHELL(menu1),menuitem);	/* Network not available */	gtk_widget_set_sensitive (GTK_WIDGET (menuitem), FALSE);	menuitem = gtk_separator_menu_item_new();	gtk_menu_shell_append(GTK_MENU_SHELL(menu1),menuitem);	menuitem = gtk_menu_item_new_with_mnemonic(_("_Giveup"));	gtk_menu_shell_append(GTK_MENU_SHELL(menu1),menuitem);	gtk_widget_add_accelerator (menuitem, "activate", accel_group,GDK_F12, 0, GTK_ACCEL_VISIBLE);	g_signal_connect(G_OBJECT(menuitem),"activate",G_CALLBACK(ui_game_giveup),(gpointer)0);	menuitem = gtk_separator_menu_item_new();	gtk_menu_shell_append(GTK_MENU_SHELL(menu1),menuitem);	menuitem = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT,accel_group);	gtk_menu_shell_append(GTK_MENU_SHELL(menu1),menuitem);	g_signal_connect(G_OBJECT(menuitem),"activate",G_CALLBACK(gtk_main_quit),(gpointer)0);	rootmenu = gtk_menu_item_new_with_mnemonic(_("_Game"));	gtk_menu_item_set_submenu(GTK_MENU_ITEM(rootmenu),menu1);	gtk_menu_shell_append(GTK_MENU_SHELL(*menubar),rootmenu);	g_signal_connect (G_OBJECT (menu1), "show", G_CALLBACK (ui_game_on_show), NULL);	/*============================================================*/	menu1 = gtk_menu_new();	menuitem = gtk_menu_item_new_with_mnemonic(_("_Hint"));	gtk_menu_shell_append(GTK_MENU_SHELL(menu1),menuitem);	gtk_widget_add_accelerator (menuitem, "activate", accel_group,GDK_F5, 0, GTK_ACCEL_VISIBLE);	g_signal_connect(G_OBJECT(menuitem),"activate",G_CALLBACK(ui_game_hint),(gpointer)0);	menuitem = gtk_menu_item_new_with_mnemonic(_("_Shuffle"));	gtk_menu_shell_append(GTK_MENU_SHELL(menu1),menuitem);	gtk_widget_add_accelerator (menuitem, "activate", accel_group,GDK_F6, 0, GTK_ACCEL_VISIBLE);	g_signal_connect(G_OBJECT(menuitem),"activate",G_CALLBACK(ui_game_shuffle),(gpointer)0);	menuitem = gtk_menu_item_new_with_mnemonic(_("_Pause/Proceed"));	gtk_menu_shell_append(GTK_MENU_SHELL(menu1),menuitem);	gtk_widget_add_accelerator (menuitem, "activate", accel_group,GDK_F7, 0, GTK_ACCEL_VISIBLE);	g_signal_connect(G_OBJECT(menuitem),"activate",G_CALLBACK(ui_game_pause),(gpointer)0);	menuitem = gtk_separator_menu_item_new();	gtk_menu_shell_append(GTK_MENU_SHELL(menu1),menuitem);	menuitem = gtk_menu_item_new_with_mnemonic(_("H_ide"));	gtk_menu_shell_append(GTK_MENU_SHELL(menu1),menuitem);	gtk_widget_add_accelerator (menuitem, "activate", accel_group,GDK_Escape, 0, GTK_ACCEL_VISIBLE);	/*	  Hide menuitem's activeate event is connected in the main function, not here.	  g_signal_connect(G_OBJECT(menuitem),"activate",G_CALLBACK(ui_game_giveup),(gpointer)0);	 */	menuitem = gtk_menu_item_new_with_mnemonic(_("_Theme Edit Tools"));	gtk_menu_shell_append(GTK_MENU_SHELL(menu1),menuitem);	g_signal_connect(G_OBJECT(menuitem),"activate",G_CALLBACK(ui_theme_editor),(gpointer)0);	rootmenu = gtk_menu_item_new_with_mnemonic(_("_Functions"));	gtk_menu_item_set_submenu(GTK_MENU_ITEM(rootmenu),menu1);	gtk_menu_shell_append(GTK_MENU_SHELL(*menubar),rootmenu);	g_signal_connect (G_OBJECT (menu1), "show", G_CALLBACK (ui_functions_on_show), NULL);	/*============================================================*/	menu1 = gtk_menu_new();	menuitem = gtk_menu_item_new_with_mnemonic(_("_Themes"));	gtk_menu_shell_append(GTK_MENU_SHELL(menu1),menuitem);	ui_menu_item.themes = GTK_MENU_ITEM (menuitem);	ui_menu_item.background_music = GTK_CHECK_MENU_ITEM (gtk_check_menu_item_new_with_mnemonic(_("_Music")));	gtk_menu_shell_append(GTK_MENU_SHELL(menu1),GTK_WIDGET (ui_menu_item.background_music));	g_signal_connect(G_OBJECT(ui_menu_item.background_music),"activate",G_CALLBACK(ui_use_m_s_bg),(gpointer)0);	ui_menu_item.sound_effect = GTK_CHECK_MENU_ITEM (gtk_check_menu_item_new_with_mnemonic(_("_Sound")));	gtk_menu_shell_append(GTK_MENU_SHELL(menu1), GTK_WIDGET (ui_menu_item.sound_effect));	g_signal_connect(G_OBJECT(ui_menu_item.sound_effect),"activate",G_CALLBACK(ui_use_m_s_bg),(gpointer)1);	ui_menu_item.background_picture = GTK_CHECK_MENU_ITEM (gtk_check_menu_item_new_with_mnemonic(_("_Background Picture")));	gtk_menu_shell_append(GTK_MENU_SHELL(menu1), GTK_WIDGET (ui_menu_item.background_picture));	g_signal_connect(G_OBJECT(ui_menu_item.background_picture),"activate",G_CALLBACK(ui_use_m_s_bg),(gpointer)2);	menuitem = gtk_separator_menu_item_new();	gtk_menu_shell_append(GTK_MENU_SHELL(menu1),menuitem);	menuitem = gtk_menu_item_new_with_mnemonic(_("_Cheat"));	gtk_menu_shell_append(GTK_MENU_SHELL(menu1),menuitem);	gtk_widget_add_accelerator (menuitem, "activate", accel_group,GDK_F8, 0, GTK_ACCEL_VISIBLE);	g_signal_connect(G_OBJECT(menuitem),"activate",G_CALLBACK(ui_game_cheat),(gpointer)0);	rootmenu = gtk_menu_item_new_with_mnemonic(_("_Setting"));	gtk_menu_item_set_submenu(GTK_MENU_ITEM(rootmenu),menu1);	gtk_menu_shell_append(GTK_MENU_SHELL(*menubar),rootmenu);	g_signal_connect (G_OBJECT (menu1), "show", G_CALLBACK (ui_setting_on_show), NULL);	/*============================================================*/	menu1 = gtk_menu_new();	menuitem = gtk_menu_item_new_with_mnemonic(_("_View Scores"));	gtk_menu_shell_append(GTK_MENU_SHELL(menu1),menuitem);	gtk_widget_add_accelerator (menuitem, "activate", accel_group,GDK_F9, 0, GTK_ACCEL_VISIBLE);	g_signal_connect(G_OBJECT(menuitem),"activate",G_CALLBACK(ui_view_score),(gpointer)0);	menuitem = gtk_menu_item_new_with_mnemonic(_("_Internet Scores"));	gtk_menu_shell_append(GTK_MENU_SHELL(menu1),menuitem);	/* Internet score not available */	gtk_widget_set_sensitive (GTK_WIDGET (menuitem), FALSE);	rootmenu = gtk_menu_item_new_with_mnemonic(_("S_core"));	gtk_menu_item_set_submenu(GTK_MENU_ITEM(rootmenu),menu1);	gtk_menu_shell_append(GTK_MENU_SHELL(*menubar),rootmenu);	/*============================================================*/	menu1 = gtk_menu_new();	menuitem = gtk_menu_item_new_with_mnemonic(_("_Rules"));	gtk_menu_shell_append(GTK_MENU_SHELL(menu1),menuitem);	g_signal_connect(G_OBJECT(menuitem),"activate",G_CALLBACK(ui_rule),(gpointer)0);	menuitem = gtk_menu_item_new_with_mnemonic(_("_Author"));	gtk_menu_shell_append(GTK_MENU_SHELL(menu1),menuitem);	g_signal_connect(G_OBJECT(menuitem),"activate",G_CALLBACK(ui_about),(gpointer)0);	rootmenu = gtk_menu_item_new_with_mnemonic(_("_About"));	gtk_menu_item_set_submenu(GTK_MENU_ITEM(rootmenu),menu1);	gtk_menu_shell_append(GTK_MENU_SHELL(*menubar),rootmenu);	/*============================================================*/	gtk_widget_show_all(*menubar);}/*  empty call back funtion, use for testing  no need to translate these strings*/static voidprint_hello( GtkWidget *w, gpointer   data ){  g_print ("data returned %d \n",GPOINTER_TO_INT(data));}void ui_hide_window (GtkWidget *w, gpointer data){	LlkTray *tray = (LlkTray *)data;	/* show/hidden man window */	if (tray->status == SHOW)	{		tray->status = HIDDEN;		gtk_widget_hide_all (GTK_WIDGET (tray->window_main));	}	else	{		tray->status = SHOW;		gtk_widget_show_all (GTK_WIDGET (tray->window_main));	}}/* * set sensitive of the Game menu */voidui_game_on_show (GtkWidget *w, gpointer data){	gtk_widget_set_sensitive (g_list_nth_data (GTK_MENU(w)->menu_shell.children,0),		algorithm_game.status == ALGORITHM_GAME_STOP);	gtk_widget_set_sensitive (g_list_nth_data (GTK_MENU(w)->menu_shell.children,4),		algorithm_game.status != ALGORITHM_GAME_STOP);}/* * set sensitive of the Functions menu */void ui_functions_on_show (GtkWidget *w, gpointer data){	gtk_widget_set_sensitive (g_list_nth_data (GTK_MENU(w)->menu_shell.children,0),		algorithm_game.status == ALGORITHM_GAME_RUN);	gtk_widget_set_sensitive (g_list_nth_data (GTK_MENU(w)->menu_shell.children,1),		algorithm_game.status == ALGORITHM_GAME_RUN);	gtk_widget_set_sensitive (g_list_nth_data (GTK_MENU(w)->menu_shell.children,2),		algorithm_game.status != ALGORITHM_GAME_STOP);}/* * set sensitive of the Setting menu */voidui_setting_on_show (GtkWidget *w, gpointer data){	//g_print ("menu setting on show.\n");}/*  replace with new image at (i,j)*/gboolean ui_replace_image(struct AlgorithmPoint p1,struct AlgorithmPoint p2){  GdkRectangle update_rect;  /*according to data in algorithm_game and the selected position, redraw the image at (i,j)    this function is modified from ui_game_begin function //(algorithm_game.data[p1.x][p1.y] - 1)  */  /* Draw card back image */  gdk_pixbuf_render_to_drawable_alpha(ui_pixbuf.cardbacks,ui_double_pixmap,        0,(ui_pixbuf.cardback_choice>=5?1:ui_pixbuf.cardback_choice+1)*UI_BACK_HEIGHT,        UI_FIXED_START_DRAW_LEFT + (p1.y - algorithm_game.difficulty)*(UI_BACK_WIDTH-UI_BACK_BORDER_1),        UI_FIXED_START_DRAW_TOP + p1.x*(UI_BACK_HEIGHT - UI_BACK_BORDER_2),		UI_BACK_WIDTH-UI_BACK_BORDER_1,UI_BACK_HEIGHT-UI_BACK_BORDER_2,        GDK_PIXBUF_ALPHA_BILEVEL,128,        GDK_RGB_DITHER_NORMAL, 0, 0);  /*gdk_draw_rectangle (ui_double_pixmap,                      ui_drawingarea->style->black_gc,                      TRUE,					  UI_FIXED_START_DRAW_LEFT + (p1.y - algorithm_game.difficulty)*(UI_BACK_WIDTH-UI_BACK_BORDER_1),        			  UI_FIXED_START_DRAW_TOP + p1.x*(UI_BACK_HEIGHT - UI_BACK_BORDER_2),					  UI_BACK_WIDTH-UI_BACK_BORDER_1,UI_BACK_HEIGHT-UI_BACK_BORDER_2);*/  /* Draw card's front image */  gdk_pixbuf_render_to_drawable_alpha(ui_pixbuf.cardimages,ui_double_pixmap,        (algorithm_game.data[p1.x][p1.y] - 1)*UI_IMAGE_SIZE,0,        UI_FIXED_START_DRAW_LEFT + (p1.y - algorithm_game.difficulty)*(UI_BACK_WIDTH-UI_BACK_BORDER_1) +                (UI_BACK_WIDTH-UI_BACK_BORDER_1-UI_IMAGE_SIZE)/2,        UI_FIXED_START_DRAW_TOP + p1.x*(UI_BACK_HEIGHT - UI_BACK_BORDER_2)+               (UI_BACK_HEIGHT-UI_BACK_BORDER_2-UI_IMAGE_SIZE)/2,        UI_IMAGE_SIZE,UI_IMAGE_SIZE,        GDK_PIXBUF_ALPHA_BILEVEL,128,        GDK_RGB_DITHER_NORMAL, 0, 0);  update_rect.x = UI_FIXED_START_DRAW_LEFT + (p1.y - algorithm_game.difficulty)*(UI_BACK_WIDTH - UI_BACK_BORDER_1);  update_rect.y = UI_FIXED_START_DRAW_TOP + p1.x*(UI_BACK_HEIGHT - UI_BACK_BORDER_2);  update_rect.width = UI_BACK_WIDTH-UI_BACK_BORDER_1;  update_rect.height = UI_BACK_HEIGHT-UI_BACK_BORDER_2;  gtk_widget_draw (ui_drawingarea, &update_rect);    if(p2.x != -1 && p2.y != -1)  {    /* Draw card back image */    gdk_pixbuf_render_to_drawable_alpha(ui_pixbuf.cardbacks,ui_double_pixmap,          0,(ui_pixbuf.cardback_choice>=5?1:ui_pixbuf.cardback_choice+1)*UI_BACK_HEIGHT,          UI_FIXED_START_DRAW_LEFT + (p2.y - algorithm_game.difficulty)*(UI_BACK_WIDTH-UI_BACK_BORDER_1),          UI_FIXED_START_DRAW_TOP + p2.x*(UI_BACK_HEIGHT - UI_BACK_BORDER_2),          UI_BACK_WIDTH-UI_BACK_BORDER_1,UI_BACK_HEIGHT-UI_BACK_BORDER_2,          GDK_PIXBUF_ALPHA_BILEVEL,128,          GDK_RGB_DITHER_NORMAL, 0, 0);    /*gdk_draw_rectangle (ui_double_pixmap,                      ui_drawingarea->style->black_gc,                      TRUE,					  UI_FIXED_START_DRAW_LEFT + (p2.y - algorithm_game.difficulty)*(UI_BACK_WIDTH-UI_BACK_BORDER_1),        			  UI_FIXED_START_DRAW_TOP + p2.x*(UI_BACK_HEIGHT - UI_BACK_BORDER_2),					  UI_BACK_WIDTH-UI_BACK_BORDER_1,UI_BACK_HEIGHT-UI_BACK_BORDER_2);*/    /* Draw card's front image */    gdk_pixbuf_render_to_drawable_alpha(ui_pixbuf.cardimages,ui_double_pixmap,          (algorithm_game.data[p2.x][p2.y] - 1)*UI_IMAGE_SIZE,0,          UI_FIXED_START_DRAW_LEFT + (p2.y - algorithm_game.difficulty)*(UI_BACK_WIDTH-UI_BACK_BORDER_1) +                  (UI_BACK_WIDTH-UI_BACK_BORDER_1-UI_IMAGE_SIZE)/2,          UI_FIXED_START_DRAW_TOP + p2.x*(UI_BACK_HEIGHT - UI_BACK_BORDER_2)+                 (UI_BACK_HEIGHT-UI_BACK_BORDER_2-UI_IMAGE_SIZE)/2,          UI_IMAGE_SIZE,UI_IMAGE_SIZE,          GDK_PIXBUF_ALPHA_BILEVEL,128,          GDK_RGB_DITHER_NORMAL, 0, 0);    update_rect.x = UI_FIXED_START_DRAW_LEFT + (p2.y - algorithm_game.difficulty)*(UI_BACK_WIDTH - UI_BACK_BORDER_1);    update_rect.y = UI_FIXED_START_DRAW_TOP + p2.x*(UI_BACK_HEIGHT - UI_BACK_BORDER_2);    update_rect.width = UI_BACK_WIDTH-UI_BACK_BORDER_1;    update_rect.height = UI_BACK_HEIGHT-UI_BACK_BORDER_2;    gtk_widget_draw (ui_drawingarea, &update_rect);  }  return TRUE;}/*  redraw all card images according to datas in algorithm_game*/gboolean ui_redraw_images(void){  GdkRectangle update_rect;  gint i,j;  /*redraw background picture*/  ui_drawingarea_draw_bg(1);

⌨️ 快捷键说明

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