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

📄 hrd.c

📁 华容道gtk版 将压缩包在任一目录下解开
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -