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

📄 jing.c~

📁 哈哈
💻 C~
📖 第 1 页 / 共 2 页
字号:
     }     do     {              if(node == HEAD)          {                   my_gc_snake = gdk_gc_new(widget->window);//set the color of the snake head                color.red = 0xffff;               color.green = 0x0000;               color.blue = 0x0000;               gdk_gc_set_rgb_fg_color(my_gc_snake, &color);               gdk_draw_rectangle(pixmap, my_gc_snake, TRUE,                                  node->location.left ,                                  node->location.top, 13, 13);          }          else          {               my_gc_snake = gdk_gc_new(widget->window);//set the color of the snake body               color.red = 0;               color.green = 65535;               color.blue = 0;               gdk_gc_set_rgb_fg_color(my_gc_snake, &color);               gdk_draw_rectangle(pixmap, my_gc_snake, TRUE,                                  node->location.left ,                                  node->location.top , 13, 13);          }                    node = node->next;     }while (node != HEAD);     node = BEANNODE;//set the color of the bean       color.red = 65535;     color.green = 0;     color.blue = 65535;     gdk_gc_set_rgb_fg_color(my_gc_background, &color);     gdk_draw_rectangle(pixmap, my_gc_background, TRUE,                        BEANNODE->location.left,                        BEANNODE->location.top, 13, 13); }/******************************************************************内容 : キーボードを処理するニュースを接収します*参数1: widget*参数2: event*参数3: data *返回 : TRUE:正常   FALSE:異常*異常 : なし*****************************************************************/gboolean IsKeyDown(GtkWidget* widget, GdkEventKey* event, gpointer data){                 if (FIRSTFLAG == -1)//judge if the key is pressed for the first time     {              return FALSE;     }     if (event->keyval == (unsigned int)HEAD->direction)      { //judge if the direction is opersite to the present direction          return FALSE;     }     switch (event->keyval)      {              case GDK_Up:               HEAD->direction = up;               break;          case GDK_Down:                HEAD->direction = down;               break;          case GDK_Left:               HEAD->direction = left;               break;          case GDK_Right:               HEAD->direction = right;               break;          default:                return FALSE;     }     if ((STILLFLAG%2) == 0) //judge if the key pause is pressed     {             gtk_timeout_remove(timerID);          timerID = 0;          OnMove(widget);                                                       if(timerID != 0)          {               gtk_timeout_remove(timerID);               timerID = 0;             }          timerID = gtk_timeout_add(1000,(GtkFunction)my_timer, widget);     }     return TRUE;            }    /******************************************************************内容 : 蛇のは格のモバイルを追います*参数 : widget *返回 : TRUE:正常   FALSE:異常*異常 : なし*****************************************************************/gboolean OnMove(GtkWidget *widget){         if (FIRSTFLAG == 0) //if the first time press the direction key,alter the flag     {              if(timerID != 0)          {               gtk_timeout_remove(timerID);               timerID = 0;             }                    timerID = gtk_timeout_add(1000, (GtkFunction)my_timer, widget);          FIRSTFLAG = 1;                                                                 }                                                                                      int m = HEAD->height;                                                              int n = HEAD->width;     switch (HEAD->direction)                                                          {             case up:               m = m - 1;               break;          case down:               m = m + 1;               break;          case left:               n = n - 1;               break;          case right:               n = n + 1;               break;          default:               return FALSE;     }         if ((m < 0)|(m > (MAXLINEINDEX-1))|(n<0)|(n>(MAXCOLUMNINDEX-1)))                  { //the snake kick the wall                  gtk_timeout_remove(timerID);           FIRSTFLAG = -1;                                                                     SCORE = 0;           GtkWidget * MessageBox;           MessageBox = gnome_message_box_new ("Game Over ! ",                        GNOME_MESSAGE_BOX_WARNING, GNOME_STOCK_BUTTON_OK, NULL) ;           gtk_window_set_modal((GtkWindow*)MessageBox,FALSE);           gtk_widget_show (MessageBox);           return FALSE;     }     else if (BACKGROUND[m][n] == snake)                                               { //the snake kick itself            gtk_timeout_remove(timerID);          FIRSTFLAG = -1;          SCORE = 0;          GtkWidget * MessageBox;                    MessageBox = gnome_message_box_new ("Game Over ! ",                       GNOME_MESSAGE_BOX_WARNING, GNOME_STOCK_BUTTON_OK, NULL) ;          gtk_window_set_modal((GtkWindow*)MessageBox,TRUE);          gtk_widget_show (MessageBox);          return FALSE;     }     else if (BACKGROUND[m][n] == bean)                                                {  //the snake eat the bean          BEANNODE->direction = HEAD->direction;                                             BEANNODE->last = TAIL;                                                             HEAD->last = BEANNODE;          TAIL->next = BEANNODE;          BEANNODE->next = HEAD;          HEAD->direction = HEAD->next->direction;          HEAD = BEANNODE;          BACKGROUND[m][n] = snake;          SCORE ++;                                                                          CreateBean();          set_statusbar();           gtk_widget_queue_draw_area(widget, 0, 0, 1000, 1000);          return TRUE;     }     else                                                                               {  //the snake moves in common                 BACKGROUND[m][n] = snake;                                                           TAIL->location.bottom = (m+1) * UNIT - 1 ;                                          TAIL->location.top = m * UNIT + 1;                                                  TAIL->location.left = n * UNIT + 1;          TAIL->location.right = (n+1) * UNIT - 1;          TAIL->height = m;          TAIL->width = n;          TAIL->direction = HEAD->direction;          TAIL->next = HEAD;          HEAD->direction = HEAD->next->direction;                                            HEAD = HEAD->last;                                                                  TAIL = TAIL->last;          BACKGROUND[TAIL->height][TAIL->width] = grid;            gtk_widget_queue_draw_area(widget, 0, 0, 1000, 1000);                                               return TRUE;                                                                   } }/******************************************************************内容 : ステータス・バーを初期化します*参数 : なし *返回 : なし*異常 : なし*****************************************************************/void initialize_statusbar(){     status_bar = gtk_statusbar_new();//set the statusbar size        gtk_widget_set_usize(status_bar, MAXWINDOWWIDTH, STATUSBARHIGHT);    gtk_box_pack_end(GTK_BOX (vbox), status_bar, FALSE, TRUE, 0);    gtk_widget_show (status_bar);    context_ID = gtk_statusbar_get_context_id(        GTK_STATUSBAR (status_bar), "Statusbar");}/******************************************************************内容 : ステータス・バーを設けます*参数 : なし *返回 : なし*異常 : なし*****************************************************************/void set_statusbar(){    gchar *buff;//display the score on status bar    char TITLE_STATUSBAR[50] = {"SdkWorm // Copyright(2007) by jing_li@neusoft.com"};        buff = g_strdup_printf ("%s\t\t\tScore : %d", TITLE_STATUSBAR, SCORE);    gtk_statusbar_push(GTK_STATUSBAR(status_bar),         GPOINTER_TO_INT(context_ID), buff);}int main(int argc , char *argv[]){         //GtkAccelGroup *accelgroup;     GtkWidget *menu;     GtkWidget *menu_bar;     GtkWidget *root_menu;     GtkWidget *menu_items;     char *buf[3] = {"New Game","Pause", "EXIT GAME"};     int i = 0;     gtk_init(&argc, &argv);//set the windows size and style     window = gtk_window_new(GTK_WINDOW_TOPLEVEL);     gtk_window_set_title(GTK_WINDOW(window), "SnakeWorm");     gtk_widget_set_size_request(window, MAXWINDOWWIDTH , MAXWINDOWLENGTH);     gtk_container_set_border_width(GTK_CONTAINER(window) , 2);     gtk_window_set_resizable(GTK_WINDOW(window) , FALSE);          vbox = gtk_vbox_new(FALSE , 0);     gtk_container_add(GTK_CONTAINER(window) , vbox);     gtk_widget_show(vbox);     initialize_statusbar();     set_statusbar();          menu = gtk_menu_new ();      //set the menu,subitems and speed key      //accelgroup = gtk_accel_group_new();     //gtk_accel_group_attach (accelgroup,GTK_OBJECT(window));     root_menu = gtk_menu_item_new_with_label ("Game");      gtk_widget_show (root_menu);           menu_items = gtk_menu_item_new_with_label (buf[0]);     gtk_menu_append (GTK_MENU (menu), menu_items);     g_signal_connect (G_OBJECT(menu_items),"activate",                       G_CALLBACK(my_replay),NULL);     gtk_widget_show (menu_items);     //     /*gtk_accel_group_add(accelgroup,'N',                   GDK_CONTROL_MASK,                   GTK_ACCEL_VISIBLE,                   GTK_OBJECT(menu_items),"activate"); */         menu_items = gtk_menu_item_new_with_label (buf[1]);     gtk_menu_append (GTK_MENU (menu), menu_items);     g_signal_connect (G_OBJECT(menu_items),"activate",                       G_CALLBACK(my_pause),NULL);     gtk_widget_show (menu_items);     /*     gtk_accel_group_add(accelgroup,'P',                         GDK_CONTROL_MASK,                         GTK_ACCEL_VISIBLE,                         GTK_OBJECT(menu_items),"activate");*/     gtk_widget_show (menu_items);          menu_items = gtk_menu_item_new_with_label (buf[2]);     gtk_menu_append (GTK_MENU (menu), menu_items);     g_signal_connect (G_OBJECT(menu_items),"activate",                       G_CALLBACK(my_quit),NULL);     gtk_widget_show (menu_items);     /*     gtk_accel_group_add(accelgroup,'E',                         GDK_CONTROL_MASK,                         GTK_ACCEL_VISIBLE,                         GTK_OBJECT(menu_items),"activate");*/     gtk_widget_show (menu_items);                      gtk_menu_item_set_submenu (GTK_MENU_ITEM (root_menu), menu);     menu_bar = gtk_menu_bar_new ();     gtk_widget_show (menu_bar);     gtk_menu_bar_append (GTK_MENU_BAR (menu_bar), root_menu);          gtk_box_pack_start (GTK_BOX (vbox), menu_bar, FALSE, FALSE, 2);     g_signal_connect(G_OBJECT(window), "destroy",                       G_CALLBACK(my_quit) , NULL);     drawing_area = gtk_drawing_area_new();     gtk_box_pack_start(GTK_BOX(vbox) , drawing_area , TRUE , TRUE , 0);     gtk_widget_show(drawing_area);     //set the connection of the event     g_signal_connect(G_OBJECT(drawing_area) , "configure_event" ,                G_CALLBACK(InitInstance) , NULL);     g_signal_connect(G_OBJECT(drawing_area) , "expose_event" ,                G_CALLBACK(InvalidateRect) , NULL);        g_signal_connect(G_OBJECT(window) , "key_press_event" ,                G_CALLBACK(IsKeyDown), NULL);      gtk_widget_show(window);     gtk_main();     return 0;}

⌨️ 快捷键说明

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