📄 hrd.c
字号:
#include <stdlib.h>#include <gtk/gtk.h>//Name define#define BLANK -1#define CaoCao 0#define ZhangFei 1#define ZhaoYun 2#define GuanYu 3#define MaChao 4#define HuangZhong 5#define Bing1 6#define Bing2 7#define Bing3 8#define Bing4 9//Shape define#define PLUMP 0#define ERECT 1#define LIE 2#define SMALL 3//Direct define#define LEFT 0#define RIGHT 1#define UP 2#define DOWN 3#define Base_X 50#define Base_Y 69+66#define Skin_Dir "./skins/default"void create_menubar(GtkWidget *window,GtkWidget **menubar);GdkPixmap *load_pixmap(GtkWidget *widget,gchar *filename);gboolean set_widget_gb(gchar *filename,GtkWidget *widget);void enter_close_button(GtkWidget *widget,GdkEventButton *event);void leave_close_button(GtkWidget *widget,GdkEventButton *event);void move_window(GtkWidget *window,GdkEventButton *event);void move_chess(GtkWidget *widget,GdkEventButton *event,gpointer data);gboolean move_able(gint man,gint direct);void move(gint man,gint direct);void about_auth();void about_hrd();void close_about_window(GtkWidget *window,GdkEventButton *event);void load_game_data(gint stage);void new_game();void game_demo();//Menu itemsstatic GtkItemFactoryEntry menu_items[]={// { "/娓告垙",NULL,NULL,0,"<Branch>" },// { "/娓告垙/鏂版父鎴�,NULL,NULL,0,NULL },// { "/娓告垙/Sep1",NULL,NULL,0,"<Separator>" },// { "/娓告垙/閫�鍑�,NULL,NULL,0,NULL },// { "/閫夐」",NULL,NULL,0,"<Branch>" },// { "/閫夐」/婕旂ず",NULL,NULL,0,NULL },// { "/甯姪",NULL,NULL,0,"<LastBranch>" },// { "/甯姪/About HRD,NULL,about_hrd,0,NULL } }; { "/File",NULL,NULL,0,"<Branch>" }, { "/File/New game",NULL,new_game,0,NULL }, { "/File/Sep1",NULL,NULL,0,"<Separator>" }, { "/File/Quit",NULL,gtk_main_quit,0,NULL }, { "/Option",NULL,NULL,0,"<Branch>" }, { "/Option/Demo",NULL,game_demo,0,NULL }, { "/Help",NULL,NULL,0,"<LastBranch>" }, { "/Help/About auth",NULL,about_auth,0,NULL }, { "/Help/About hrd",NULL,about_hrd,0,NULL} };gchar skin_dir[]={"./skins/default"};gchar pics[][20]={ "caocao.png","zhangfei.png","zhaoyun.png", "guanyu.png","machao.png","huangzhong.png", "bing1.png","bing2.png","bing3.png","bing4.png"};/*gint board[5][4]={ { 1, 0, 0, 2 }, { 1, 0, 0, 2 }, { 4, 3, 3, 5 }, { 4, 6, 7, 5 }, { 8,-1,-1, 9 } };gint man_x[10]={ 2,1,4,2,1,4,2,3,1,4 };gint man_y[10]={ 1,1,1,3,3,3,4,4,5,5 };gint man_shape[10]={ 0,1,1,2,1,1,3,3,3,3 };gint man_dir[10]={ 0,0,0,0,0,0,0,0,0,0 };*/gint board[5][4];gint man_x[10];gint man_y[10];gint man_shape[10];gint man_dir[10];gint my_dir[4][4]={ { LEFT,UP,DOWN,RIGHT }, { RIGHT,UP,DOWN,LEFT }, { UP,LEFT,RIGHT,DOWN }, { DOWN,LEFT,RIGHT,UP } };gint man=0;gint steps=0;gint stage=1;GtkWidget *window;GtkWidget *fixed;GtkWidget *chess[10];GtkWidget *close_image;/* ---------------------------- */main(int argc,char *argv[]){ int i; //GtkWidget *window; GtkWidget *menubar; //GtkWidget *fixed; //GtkWidget *chess[10]; GtkWidget *image[10]; GtkWidget *close_button; //GtkWidget *close_image; GtkWidget *close_imageN; GtkWidget *close_imageA; gchar *file; gtk_init(&argc,&argv); window=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window),"HuaRongDao"); gtk_widget_set_events(window,GDK_SCROLL_MASK); gtk_window_set_decorated(GTK_WINDOW(window),FALSE); gtk_widget_set_app_paintable(window,TRUE); gtk_window_set_resizable(GTK_WINDOW(window),FALSE); gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER_ALWAYS); gtk_widget_realize(window); gtk_signal_connect(GTK_OBJECT(window),"destroy", GTK_SIGNAL_FUNC(gtk_main_quit),NULL); g_signal_connect(GTK_OBJECT(window),"button_press_event", G_CALLBACK(move_window),&window); fixed=gtk_fixed_new(); gtk_container_add(GTK_CONTAINER(window),fixed); set_widget_bg("./skins/default/board.png",fixed); gtk_widget_set_usize(fixed,418,518+92); create_menubar(window,&menubar); gtk_widget_set_usize(menubar,408,26); gtk_fixed_put(GTK_FIXED(fixed),menubar,5,24); gtk_widget_show(menubar); load_game_data(stage); for(i=0;i<10;i++){ man=i; file=g_strdup_printf("%s/%s",skin_dir,pics[i]); chess[i]=gtk_event_box_new(); image[i]=gtk_image_new_from_file(file); gtk_container_add(GTK_CONTAINER(chess[i]),image[i]); gtk_fixed_put(GTK_FIXED(fixed),chess[i], Base_X+(man_x[i]-1)*80,Base_Y+(man_y[i]-1)*80); g_signal_connect(G_OBJECT(chess[i]),"button_press_event", G_CALLBACK(move_chess),GINT_TO_POINTER(man)); gtk_widget_show(image[i]); gtk_widget_show(chess[i]); g_free(file); } close_button=gtk_event_box_new(); close_image=gtk_image_new_from_file("./skins/default/closeN.png"); gtk_container_add(GTK_CONTAINER(close_button),close_image); gtk_fixed_put(GTK_FIXED(fixed),close_button,396,0); g_signal_connect(G_OBJECT(close_button),"button_press_event", G_CALLBACK(gtk_main_quit),&close_button); g_signal_connect(G_OBJECT(close_button),"enter_notify_event", G_CALLBACK(enter_close_button),&close_button); g_signal_connect(G_OBJECT(close_button),"leave_notify_event", G_CALLBACK(leave_close_button),&close_button); gtk_widget_show(close_image); gtk_widget_show(close_button); gtk_widget_show(fixed); gtk_widget_show_all(window); if(man==CaoCao && man_x[CaoCao]==2 && man_y[CaoCao]==4){ sleep(2); g_print("You win!\n"); gtk_fixed_move(GTK_FIXED(fixed),chess[man], Base_X+(man_x[CaoCao]-1)*80, Base_Y+(man_y[CaoCao]-1)*80+20); } gtk_main();}/* ---------------------------- */void create_menubar(GtkWidget *window,GtkWidget **menubar){ GtkItemFactory *item_factory; GtkAccelGroup *accel_group; gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); accel_group = gtk_accel_group_new (); item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group); gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL); gtk_window_add_accel_group (GTK_WINDOW (window), accel_group); if (menubar) *menubar = gtk_item_factory_get_widget (item_factory, "<main>");}/* ---------------------------- */GdkPixmap *load_pixmap(GtkWidget *widget,gchar *filename){ GdkPixbuf *pixbuf=NULL; GdkPixmap *pixmap=NULL; pixbuf=gdk_pixbuf_new_from_file(filename,NULL); if(!widget->window)printf("NULL\n"); pixmap=gdk_pixmap_new(widget->window,gdk_pixbuf_get_width(pixbuf), gdk_pixbuf_get_height(pixbuf),-1); gdk_pixbuf_render_to_drawable(pixbuf,pixmap, widget->style->fg_gc[GTK_STATE_NORMAL], 0,0,0,0, gdk_pixbuf_get_width(pixbuf), gdk_pixbuf_get_height(pixbuf), GDK_RGB_DITHER_NORMAL,0,0); g_object_unref(pixbuf); return pixmap;}/* ---------------------------- */gboolean set_widget_bg(gchar *filename,GtkWidget *widget){ GdkPixmap *bg; bg=load_pixmap(widget,filename); gdk_window_set_back_pixmap(widget->window,bg,FALSE); gdk_window_clear(widget->window); return TRUE;}/* ---------------------------- */void enter_close_button(GtkWidget *widget,GdkEventButton *event){ gtk_image_set_from_file(GTK_IMAGE(close_image), "./skins/default/closeA.png");}/* ---------------------------- */void leave_close_button(GtkWidget *widget,GdkEventButton *event){ gtk_image_set_from_file(GTK_IMAGE(close_image), "./skins/default/closeN.png");}/* ---------------------------- */void move_window(GtkWidget *window,GdkEventButton *event){ if(event->button==1 && event->type==GDK_BUTTON_PRESS){ if((gint)event->y>22)return; gtk_window_begin_move_drag(GTK_WINDOW(window),event->button, (gint)event->x_root,(gint)event->y_root,event->time); }}/* ---------------------------- */void move_chess(GtkWidget *widget,GdkEventButton *event,gpointer data){ gint i,man; gint direct; gint j; man=GPOINTER_TO_INT(data); #ifdef _DEBUG_ for(i=0;i<5;i++){ for(j=0;j<4;j++)g_print("%2d ",board[i][j]); g_print("\n"); } #endif for(i=0;i<4;i++){ direct=my_dir[man_dir[man]][i]; if(move_able(man,direct)){ #ifdef _DEBUG_ g_print("can move direct:%d\n",direct); #endif move(man,direct); man_dir[man]=direct; return; } } #ifdef _DEBUG_ for(i=0;i<5;i++){ for(j=0;j<4;j++)g_print("%2d ",board[i][j]); g_print("\n"); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -