📄 main.c
字号:
if(ui_pixbuf.randomback)gdk_pixbuf_unref(ui_pixbuf.randomback); /* Free old randomback pixbuf */ ui_pixbuf.randomback = gdk_pixbuf_new_from_file(bgfilename,NULL); remove(bgfilename); if(ui_pixbuf.randomback == NULL){ui_pixbuf.randomback = ui_pixbuf.mainback;g_print(_("randomback=NULL,Error occored.\n"));} } else{ ui_pixbuf.randomback = NULL; ui_pixbuf.randomback_choice = 0; } remove("/tmp/llk_cardimages.png"); remove("/tmp/llk_cardbacks.png"); remove("/tmp/llk_vertical.png"); remove("/tmp/llk_horizon.png"); remove("/tmp/llk_logo.png"); remove("/tmp/llk_pause.jpg"); remove("/tmp/llk_mainback.jpg"); if( !ui_pixbuf.cardimages || !ui_pixbuf.cardbacks || !ui_pixbuf.vertical || !ui_pixbuf.horizon || !ui_pixbuf.logo || !ui_pixbuf.pause || !ui_pixbuf.mainback ) { sprintf(*message,_("Convert jpg/png files into ui_pixbuf error.")); return FALSE; } return TRUE;}void ui_use_m_s_bg( GtkWidget *w,gpointer data ){ switch(GPOINTER_TO_INT(data)) { case 0: ini_file_write_boolean(ui_ini,"UISETTING","bgmusic",gtk_check_menu_item_get_active(ui_menu_item.background_music)); break; case 1: ini_file_write_boolean(ui_ini,"UISETTING","sound",gtk_check_menu_item_get_active(ui_menu_item.sound_effect)); break; case 2: ini_file_write_boolean(ui_ini,"UISETTING","bgpicture",gtk_check_menu_item_get_active(ui_menu_item.background_picture)); /* redraw all images */ if(algorithm_game.status == ALGORITHM_GAME_RUN)ui_redraw_images(); break; } if(!ini_file_write_file(ui_ini,ui_ini->filename)) { /* g_print("Ini file save error!\n"); */ }}/* empty call back funtion, use for testing*/voidradio_item_on_clicked( GtkWidget *w, gpointer data ){ gchar themenum[10]; gchar *return_str; gchar path[MAX_PATH_LENGTH]; gboolean success=TRUE; static gboolean called_from_menu = TRUE; if(!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(w)))return; if(called_from_menu == FALSE)return; sprintf(themenum,"theme%d",GPOINTER_TO_INT(data)); /* load pak file */ if( ! ini_file_read_string(ui_ini,"THEMEFILE",themenum, &return_str)) { g_print(_("Failed to read \"[THEMEFILE]/%s\"\n"),themenum); success = FALSE; } else { sprintf(path,"%s/%s/%s.pak",PACKAGE_DATA_DIR,PACKAGE,return_str); g_free(return_str); if( ! g_file_test(path,G_FILE_TEST_EXISTS)) { g_print(_("The package file:LLK_DATA_PATH/%s does not exists.\n"),themenum); success = FALSE; } else { if( ! LoadPAKHFT(path)) { g_print(_("LoadPAKHFT error.\n")); success = FALSE; } else { pak_info.back_num = GetFileNum("back","jpg"); pak_info.sound_num = GetFileNum("sound","wav"); pak_info.music_num = GetFileNum("music","mid"); if( !ExtractSingleFile("cardimages.png") || !ExtractSingleFile("cardbacks.png") || !ExtractSingleFile("horizon.png") || !ExtractSingleFile("vertical.png") || !ExtractSingleFile("pause.jpg") || !ExtractSingleFile("logo.png") || !ExtractSingleFile("mainback.jpg") ) { g_print(_("Failed to extract necessary jpg/png files.\n")); success = FALSE; } else { gdk_pixbuf_unref(ui_pixbuf.cardimages); gdk_pixbuf_unref(ui_pixbuf.cardbacks); gdk_pixbuf_unref(ui_pixbuf.vertical); gdk_pixbuf_unref(ui_pixbuf.horizon); gdk_pixbuf_unref(ui_pixbuf.logo); gdk_pixbuf_unref(ui_pixbuf.pause); gdk_pixbuf_unref(ui_pixbuf.mainback); ui_pixbuf.cardimages = gdk_pixbuf_new_from_file("/tmp/llk_cardimages.png",NULL); ui_pixbuf.cardbacks = gdk_pixbuf_new_from_file("/tmp/llk_cardbacks.png",NULL); ui_pixbuf.vertical = gdk_pixbuf_new_from_file("/tmp/llk_vertical.png",NULL); ui_pixbuf.horizon = gdk_pixbuf_new_from_file("/tmp/llk_horizon.png",NULL); ui_pixbuf.logo = gdk_pixbuf_new_from_file("/tmp/llk_logo.png",NULL); ui_pixbuf.pause = gdk_pixbuf_new_from_file("/tmp/llk_pause.jpg",NULL); ui_pixbuf.mainback = gdk_pixbuf_new_from_file("/tmp/llk_mainback.jpg",NULL); /* ui_pixbuf.cardback_choice = g_rand_int_range(ui_rand,0,6);*//*Do not change card back choice when change theme*/ if(pak_info.back_num > 0){ ui_pixbuf.randomback_choice = g_rand_int_range(ui_rand,1,pak_info.back_num+1); /* Extract the bg picture and read it to ui_pixbuf.randomback */ gchar bgfilename[30]; sprintf(bgfilename,"back%d.jpg",ui_pixbuf.randomback_choice-1); if(!ExtractSingleFile(bgfilename)){g_print(_("Failed to extract file:%s.\n"),bgfilename);} sprintf(bgfilename,"/tmp/llk_back%d.jpg",ui_pixbuf.randomback_choice-1); if(ui_pixbuf.randomback)gdk_pixbuf_unref(ui_pixbuf.randomback); /* Free old randomback pixbuf */ ui_pixbuf.randomback = gdk_pixbuf_new_from_file(bgfilename,NULL); remove(bgfilename); if(ui_pixbuf.randomback == NULL){ui_pixbuf.randomback = ui_pixbuf.mainback;g_print(_("randomback=NULL,Error occored.\n"));} } else{ ui_pixbuf.randomback = NULL; ui_pixbuf.randomback_choice = 0; } remove("/tmp/llk_cardimages.png"); remove("/tmp/llk_cardbacks.png"); remove("/tmp/llk_vertical.png"); remove("/tmp/llk_horizon.png"); remove("/tmp/llk_logo.png"); remove("/tmp/llk_pause.jpg"); remove("/tmp/llk_mainback.jpg"); if( !ui_pixbuf.cardimages || !ui_pixbuf.cardbacks || !ui_pixbuf.vertical || !ui_pixbuf.horizon || !ui_pixbuf.logo || !ui_pixbuf.pause || !ui_pixbuf.mainback ) { g_print(_("Convert jpg/png files into ui_pixbuf error.\n")); success = FALSE; } } } } } if(success) { ini_file_write_string(ui_ini,"UISETTING","themenum",themenum); if(!ini_file_write_file(ui_ini,ui_ini->filename)){/* g_print("Ini file save error!\n"); */} ui_menu_item.current_theme = GTK_RADIO_MENU_ITEM(w); /* redraw all images */ if(algorithm_game.status == ALGORITHM_GAME_RUN)ui_redraw_images(); } else { /* ignore the error of convert png file,when other errors occored,because we have not change anything, so just reset the radio menu item's active status */ called_from_menu = FALSE; gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ui_menu_item.current_theme),TRUE); called_from_menu = TRUE; }}gboolean ui_save_game_data(void){ FILE *fp; struct passwd *user; char path[MAX_PATH_LENGTH]; /* load ini file,if it do not exist, make a new one */ user = getpwuid(getuid()); /*user home directory: user->pw_dir*/ sprintf(path,"%s/.llk_linux/save.dat",user->pw_dir); fp = fopen(path,"wb"); if(fp) { fwrite(&algorithm_game,sizeof(struct AlgorithmGame),1,fp); fwrite(&time_remain,sizeof(gint),1,fp); fclose(fp); return TRUE; } else { g_print(_("Open save.dat file error.\n")); return FALSE; }}gboolean ui_read_game_data(void){ FILE *fp; struct passwd *user; char path[MAX_PATH_LENGTH]; /* load ini file,if it do not exist, make a new one */ user = getpwuid(getuid()); /*user home directory: user->pw_dir*/ sprintf(path,"%s/.llk_linux/save.dat",user->pw_dir); fp = fopen(path,"rb"); if(fp) { fread(&algorithm_game,sizeof(struct AlgorithmGame),1,fp); fread(&time_remain,sizeof(gint),1,fp); fclose(fp); return TRUE; } else { g_print(_("Open save.dat file error.\n")); return FALSE; }}void ui_input_string(gchar *str1,gchar *str2,gint max_length){ GtkWidget *dialog; GtkWidget *label,*entry_name,*entry_nick; GtkWidget *hbox,*button; gint result; g_assert(max_length > 0); dialog = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(dialog),_("Input your name and nick")); gtk_container_border_width(GTK_CONTAINER(dialog), 5); hbox = gtk_hbox_new(FALSE,10); gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->vbox),hbox,FALSE,TRUE,5); label = gtk_label_new(_(" Name ")); gtk_widget_set_size_request(label,100,30); gtk_box_pack_start (GTK_BOX(hbox),label,FALSE,TRUE,5); gtk_widget_show(label); entry_name = gtk_entry_new_with_max_length(max_length); gtk_box_pack_start (GTK_BOX(hbox),entry_name,FALSE,TRUE,5); gtk_widget_show(entry_name); gtk_widget_show(hbox); hbox = gtk_hbox_new(FALSE,10); gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->vbox),hbox,FALSE,TRUE,5); label = gtk_label_new(_(" Nick ")); gtk_widget_set_size_request(label,100,30); gtk_box_pack_start (GTK_BOX(hbox),label,FALSE,TRUE,5); gtk_widget_show(label); entry_nick = gtk_entry_new_with_max_length(max_length); gtk_box_pack_start (GTK_BOX(hbox),entry_nick,FALSE,TRUE,5); gtk_widget_show(entry_nick); gtk_widget_show(hbox); /*Button area*/ button = gtk_dialog_add_button(GTK_DIALOG(dialog),_("OK"),GTK_RESPONSE_ACCEPT); gtk_widget_show(button); button = gtk_dialog_add_button(GTK_DIALOG(dialog),_("Cancel"),GTK_RESPONSE_CANCEL); gtk_widget_show(button); result = gtk_dialog_run (GTK_DIALOG (dialog)); switch (result) { case GTK_RESPONSE_ACCEPT: sprintf(str1,"%s",gtk_entry_get_text(GTK_ENTRY(entry_name))); sprintf(str2,"%s",gtk_entry_get_text(GTK_ENTRY(entry_nick))); break; default: sprintf(str1,"%s",""); sprintf(str2,"%s",""); break; } gtk_widget_destroy (dialog);}void ui_record_score(gboolean view){ struct ScoreItem{ gchar score[30]; gchar name[51]; gchar nick[51]; gchar difficulty[10]; gchar level[3]; gchar time[30]; struct ScoreItem *prev; struct ScoreItem *next; }; FILE *fp; struct passwd *user; gchar path[MAX_PATH_LENGTH]; struct ScoreItem *score_list=NULL,*score_item_end=NULL,*score_item_tmp; gint item_num=0; /* load ini file,if it do not exist, make a new one */ user = getpwuid(getuid()); /*user home directory: user->pw_dir*/ sprintf(path,"%s/.llk_linux/score.dat",user->pw_dir); fp = fopen(path,"rb"); if(fp != NULL) { while(1) { score_item_tmp = (struct ScoreItem *)malloc(sizeof(struct ScoreItem)); fread(score_item_tmp,sizeof(struct ScoreItem),1,fp); score_item_tmp->next = NULL; score_item_tmp->prev = NULL; if(feof(fp)) {g_free(score_item_tmp);break;} if(score_item_end) { score_item_end->next = score_item_tmp; score_item_tmp->prev = score_item_end; score_item_end = score_item_tmp; } else { score_list = score_item_tmp; score_item_end = score_list; } item_num++; } fclose(fp); } else { g_print(_("Open file error.\n")); } if(!view) /* If not just view the score,then this function must be called by ui_game_over,so add the current player's score into the list,and then write to file if the list is modified,and at last,show the score list on a new window */ { gint insert_pos=1; for(score_item_tmp = score_list;score_item_tmp!=NULL;score_item_tmp=score_item_tmp->next) { if(algorithm_game.score > atoi(score_item_tmp->score))break; insert_pos++; } if(insert_pos > 10) {insert_pos=0;score_item_tmp=NULL;} else { if(insert_pos == 1) { if(score_list == NULL) { score_list = (struct ScoreItem *)g_malloc(sizeof(struct ScoreItem)); score_list->prev = NULL; score_list->next = NULL; score_item_end = score_list; score_item_tmp = score_list; } e
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -