資源簡介
Linux下Gtk開發(fā)的貪吃蛇游戲:
1. 可用鼠標或鍵盤操作移動蛇
2. 蛇會自動移動
3. 可暫停和重新開始
4. 積分并計時,給出積分計時比

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?“snake.h“
#include?“wall.h“
#define?OVER_STRING?“Game?Over!\nPress?Start?again.“
#define?UP_KEY?????65362
#define?DOWN_KEY???65364
#define?LEFT_KEY???65361
#define?RIGHT_KEY??65363
#define?SPACE_KEY??32
#define?ENTER_KEY??65293
GtkWidget?*score_label;
GtkWidget?*time_label;
GtkWidget?*ratio_label;
static?guint?id?=?0;
static?time_t?time_start?=?0;
static?time_t?time_end?=?0;
static?time_t?pause_time?=?0;
/////////////////////////////////////////////
/////////////////////////////////////////////
static?void?
destroy_cb(GtkWidget?*widgetgpointer?data)
{
g_print(“=======>>in?destroy_cb()\n“);
wall_t?*wall?=?(wall_t*)data;
g_return_if_fail(wall?!=?NULL);
snake_t?*snake?=?wall->snake;
if?(snake)
{
snake_destroy(snake);
snake?=?NULL;
}
if?(wall)
{
wall_destroy(wall);
wall?=?NULL;
}
g_print(“=======>>out?destroy_cb()\n“);
gtk_main_quit();
}
////////////////////button?press?call?back
static?void?
up_button_press_cb(GtkButton?*button?gpointer???user_data)
{
g_print(“up\n“);
wall_t?*wall?=?(wall_t*)user_data;
if?(wall->snake->direction?!=?DOWN)
wall->snake->direction?=?UP;
}
static?void?
down_button_press_cb(GtkButton?*button?gpointer???user_data)
{
g_print(“Down\n“); ?
wall_t?*wall?=?(wall_t*)user_data;
if?(wall->snake->direction?!=?UP) ??
wall->snake->direction?=?DOWN;
}
static?void?
left_button_press_cb(GtkButton?*button?gpointer???user_data)
{
g_print(“Left\n“);
wall_t?*wall?=?(wall_t*)user_data;
if?(wall->snake->direction?!=?RIGHT)
wall->snake->direction?=?LEFT;
}
static?void?
right_button_press_cb(GtkButton?*button?gpointer???user_data)
{
g_print(“Right\n“);??
wall_t?*wall?=?(wall_t*)user_data;
if?(wall->snake->direction?!=?LEFT) ???
? wall->snake->direction?=?RIGHT;
}
////////////////////////////////
static?gboolean?
draw_expose_cb(GtkWidget?*daGdkEventExpose?*eventgpointer?data???)
{
g_print(“=======>>in?draw_expose_cb()\n“);
wall_t?*wall?=?(wall_t*)data;
wall_snake_food_draw(wall);
wall_wall_draw(wall->draw);
g_print(“=======>>out?draw_expose_cb()\n“);
return?TRUE;
}
static?gboolean?
position_update(gpointer?data)?
{
g_print(“=======>>in?position_update()\n“);
gboolean?ret?=?TRUE;
char?score[10];
char?times[10];
char?ratio[10];
int?int_score?=?0;
int?int_times?=?0;
double?double_ratio?=?0.0;
GdkGC?*gc_blue;
GdkColor?color;
PangoLayout??*string_layout?=?NULL;
GDK_THREADS_ENTER();
wall_t?*wall?=?(wall_t*)data;
snake_t?*snake?=?wall->snake;
gc_blue?=?gdk_gc_new(wall->draw->window);
color.red?=?0;
color.green?=?0;
color.blue?=?65535;
gdk_gc_set_rgb_fg_color(gc_blue&color);
if?(!wall_snake_head_tail_update(wall))
{
string_layout?=?gtk_widget_create_pango_layout(wall->draw?OVER_STRING);
gdk_draw_layout(wall->draw->window?gc_blue?DRAW_SIZE_WIDTH/2-BUTTON_SIZE?
DRAW_SIZE_HEIGHT/2-BUTTON_SIZE?string_layout);
ret
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????624??2009-09-22?13:38??新建文件夾\snake.h
?????文件????????930??2009-09-22?20:27??新建文件夾\wall.h
?????文件???????9281??2009-09-22?21:17??新建文件夾\main.c
?????文件???????1277??2009-09-22?20:27??新建文件夾\snake.c
?????文件???????6679??2009-09-22?20:26??新建文件夾\wall.c
?????文件????????680??2009-09-22?22:37??新建文件夾\Makefile
?????目錄??????????0??2009-09-22?22:36??新建文件夾
-----------?---------??----------?-----??----
????????????????19471????????????????????7
評論
共有 條評論