亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? snake.c

?? 簡單的gtk+環境下的貪吃蛇游戲源碼,供學習gtk+入門
?? C
字號:
/*	snake - snake.c 	Copyright (c) 2003 by Linux_Lyb <linux_lyb@sohu.com> ____________________________________________________________________________		This program is free software; you can redistribute it and/or modify	it under the terms of the GNU General Public License as published by	the Free Software Foundation; either version 2, or (at your option)	any later version.	This program is distributed in the hope that it will be useful,	but WITHOUT ANY WARRANTY; without even the implied warranty of	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the	GNU General Public License for more details.	You should have received a copy of the GNU General Public License	along with this program; if not, write to the Free Software	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.	See the file COPYING in the doc/ directory for more information.*/#include <gdk/gdkkeysyms.h>#include <time.h>#include <stdlib.h>#include "snake.h" static GtkWidget *window = NULL;static GtkWidget *draw_area = NULL;static GdkPixmap *pixmap = NULL;GtkWidget *label;gchar text[64];guint timer = 0;gboolean playing = FALSE;gboolean pauseing = FALSE;She she;Dan dan;//游戲相關變量guint speed = 200;guint level = 1;guint dans = 35;guint live = 3;gboolean play_game (gpointer data);gint my_rand (gint min,gint max){	return rand() % max + min;}//進行蛇身體(不包括頭部)的走動void she_zuo (){gint i;	for (i=she.changdu;i>0;i--) {		she.shengti[i].x = she.shengti[i-1].x;		she.shengti[i].y = she.shengti[i-1].y;		}}//設置標簽的內容void set_label(){	sprintf (text,"egg: %d | live: %d | level: %d",dans,live,level);	gtk_label_set_text (GTK_LABEL(label),text);}//畫游戲畫面void draw(){gint i;//clear all	gdk_draw_rectangle (pixmap,window->style->white_gc,TRUE,0, 0,		      draw_area->allocation.width,draw_area->allocation.height);//draw snake	for (i=0;i<=she.changdu;i++) {		//g_print ("[%d]%d,%d->",i,she.shengti[i].x,she.shengti[i].y);		gdk_draw_rectangle (pixmap,window->style->black_gc,TRUE,she.shengti[i].x * 10,she.shengti[i].y * 10,		      			10,10);	}	//draw egg	gdk_draw_rectangle (pixmap,window->style->black_gc,TRUE,dan.x * 10,dan.y * 10,		      		10,10);	gtk_widget_queue_draw (draw_area);	}//初始化游戲void init_game(){gint i;	//蛇的設定	she.changdu = 5;	she.shengti[0].x = my_rand (5,20);	she.shengti[0].y = my_rand (5,20);	she.fangxiang = my_rand (0,4);	she.live = TRUE;	for (i=1;i<=she.changdu;i++)		switch (she.fangxiang) {			case SHE_SHANG:				she.shengti[i].x = she.shengti[i-1].x;				she.shengti[i].y = she.shengti[i-1].y - 1;			break;			case SHE_XIA:				she.shengti[i].x = she.shengti[i-1].x;				she.shengti[i].y = she.shengti[i-1].y + 1;;			break;			case SHE_ZUO:				she.shengti[i].x = she.shengti[i-1].x - 1;				she.shengti[i].y = she.shengti[i-1].y;			break;			case SHE_YOU:				she.shengti[i].x = she.shengti[i-1].x + 1;				she.shengti[i].y = she.shengti[i-1].y;			break;			default:			break;			}	she.live = TRUE;	//蛋的設定	dan.x = my_rand (0,20);	dan.y = dan.x;	dan.live = TRUE;}//游戲開始void game_start(){	if (timer == 0) timer = g_timeout_add (speed,play_game,NULL);}//暫停游戲void game_pause(GtkWidget *widget){	if (pauseing == FALSE) {		if (timer != 0) g_source_remove (timer);      		timer = 0;		gtk_button_set_label (GTK_BUTTON(widget)," Go "); 		pauseing = TRUE;	} else {		if (timer == 0) timer = g_timeout_add (speed,play_game,NULL);		gtk_button_set_label (GTK_BUTTON(widget),"Pause");		pauseing = FALSE; 	}}//停止游戲void game_stop(){	playing = FALSE;	if (timer != 0) g_source_remove (timer);      	timer = 0;		}gboolean play_game (gpointer data){int i;	if (playing == FALSE) { //如果游戲還沒開始,初始化游戲并開始		init_game();		set_label();		playing = TRUE;		return TRUE;		}	she_zuo();		switch (she.fangxiang) {		case SHE_SHANG:			she.shengti[0].y = she.shengti[0].y - 1;			//判斷是否有向自己身體走的情況,如果有就改變方向			//頭部[0]和身體[2]的坐標(x或y)相同,就需要向反方向改變			if (she.shengti[0].y == she.shengti[2].y) {				she.fangxiang = SHE_XIA;				she.shengti[0].y = she.shengti[0].y + 2;			}			break;		case SHE_XIA:			she.shengti[0].y = she.shengti[0].y + 1;			if (she.shengti[0].y == she.shengti[2].y) {				she.fangxiang = SHE_SHANG;				she.shengti[0].y = she.shengti[0].y - 2;			}			break;		case SHE_ZUO:			she.shengti[0].x = she.shengti[0].x - 1;			if (she.shengti[0].x == she.shengti[2].x) {				she.fangxiang = SHE_YOU;				she.shengti[0].x = she.shengti[0].x + 2;			}			break;		case SHE_YOU:			she.shengti[0].x = she.shengti[0].x + 1;			if (she.shengti[0].x == she.shengti[2].x) {				she.fangxiang = SHE_ZUO;				she.shengti[0].x = she.shengti[0].x - 2;			}			break;		default:			break;	}	//判斷蛇的頭部是否碰到了自己的身體,如果碰到了就去死!	for (i=4;i<=she.changdu;i++)		if (she.shengti[0].x == she.shengti[i].x && she.shengti[0].y == she.shengti[i].y) 			she.live = FALSE;	//判斷蛇是否碰到邊界,如果碰到了就去死!	if (she.shengti[0].x < 0 || she.shengti[0].y < 0 || she.shengti[0].x > 40 || she.shengti[0].y > 40) {she.live = FALSE;}		//判斷蛇是否死了	if (she.live == FALSE) {		live = live - 1;		if (live == 0) { //沒命就GAME OVER			speed = 200;			level = 1;			dans = 20;			live = 3;			game_stop();			gtk_label_set_text(GTK_LABEL(label)," - Game Over -");			return FALSE;		}		//還有命就繼續		set_label();			init_game();	}			//判斷蛇是否吃到了蛋,如果吃到了就變長!	if (she.shengti[0].x == dan.x && she.shengti[0].y == dan.y) {		she.changdu = she.changdu + 1;		she.shengti[she.changdu].x = she.shengti[she.changdu-1].x;		she.shengti[she.changdu].y = she.shengti[she.changdu-1].y;		//重新生成一個蛋		dan.x = my_rand (0,20);		dan.y = dan.x;		dans = dans - 1; //減少一個蛋		if (dans == 0) { //如果吃完全部的蛋,進入下一局,速度加快			level = level + 1;			dans = 20;			if (speed > 30) speed = speed - 20;			game_stop();			game_start();		}		set_label();	}	draw();	return TRUE;}static gboolean configure_event (GtkWidget *widget,GdkEventConfigure *event,gpointer data){	if (pixmap)		g_object_unref (pixmap); 	pixmap = gdk_pixmap_new (widget->window,			widget->allocation.width,widget->allocation.height,-1);	gdk_draw_rectangle (pixmap,widget->style->white_gc,TRUE,0, 0,		      widget->allocation.width,widget->allocation.height);  return TRUE;}static gboolean expose_event(GtkWidget *widget,GdkEventExpose *event,gpointer data){gdk_draw_drawable (widget->window,		     widget->style->fg_gc[GTK_WIDGET_STATE (widget)],		     pixmap,		     event->area.x, event->area.y,		     event->area.x, event->area.y,		     event->area.width, event->area.height);  return TRUE;}//處理按鈕事件void key_press (GtkWidget *widget,GdkEventKey *event){	if (playing == TRUE && event->type == GDK_KEY_PRESS) {				switch (event->keyval) {			case GDK_Up:				she.fangxiang = SHE_SHANG;			break;			case GDK_Down:				she.fangxiang = SHE_XIA;			break;			case GDK_Left:				she.fangxiang = SHE_ZUO;			break;			case GDK_Right:				she.fangxiang = SHE_YOU;			break;			default:			break;		}	}}//退出游戲void quit_game(){	game_stop();	gtk_main_quit();	g_object_unref (pixmap);}void create_window(){GtkWidget *vbox,*hbox;GtkWidget *b_start,*b_pause;	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);	gtk_window_set_title (GTK_WINDOW(window),"TanChiShe Ver 0.3");	//gtk_window_set_resizable (GTK_WINDOW(window),FALSE);	gtk_widget_set_usize (window,408,448);	gtk_window_set_position (GTK_WINDOW(window),GTK_WIN_POS_CENTER);	//gtk_widget_realize (window);	gtk_container_set_border_width (GTK_CONTAINER (window), 0);	g_signal_connect (GTK_OBJECT(window),"destroy",				G_CALLBACK (quit_game),&window);	g_signal_connect (GTK_OBJECT(window),"key_press_event",				G_CALLBACK (key_press),NULL);	vbox = gtk_vbox_new (FALSE,0);	gtk_container_add (GTK_CONTAINER(window),vbox);			draw_area = gtk_drawing_area_new ();	gtk_widget_set_usize (draw_area,400,400);	//gtk_widget_set_size_request (draw_area,400,400);	g_signal_connect (draw_area, "expose_event",			G_CALLBACK (expose_event), NULL);	g_signal_connect (draw_area,"configure_event",			G_CALLBACK (configure_event), NULL);	gtk_box_pack_start (GTK_BOX (vbox), draw_area, TRUE, TRUE, 0);	hbox = gtk_hbox_new (FALSE,0);	gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 5);	b_start = gtk_button_new_with_label ("Start");	gtk_box_pack_start (GTK_BOX (hbox), b_start, FALSE, FALSE, 0);	g_signal_connect (b_start,"clicked",			G_CALLBACK(game_start),NULL);	b_pause = gtk_button_new_with_label ("Pause");	gtk_box_pack_start (GTK_BOX (hbox), b_pause, FALSE, FALSE, 0);	g_signal_connect (b_pause,"clicked",			G_CALLBACK(game_pause),b_pause);	label = gtk_label_new (" - By Linux_Lyb ( linux_lyb@sohu.com )");	gtk_box_pack_start (GTK_BOX (hbox), label, TRUE,TRUE, 0);	gtk_widget_show_all (window);}int main(int argc,char *argv[]){	srand (time(NULL));	gtk_init (&argc,&argv);	create_window();	gtk_main();	return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本不卡一二三| 国内精品不卡在线| 久久综合综合久久综合| 91麻豆免费视频| 2023国产精品| 亚洲成人激情综合网| 99久久精品99国产精品| 精品国产一区二区三区忘忧草 | 欧美日韩一区中文字幕| 日韩精品一区在线| 精品国产免费视频| 亚洲主播在线播放| 成人小视频免费在线观看| 3d成人h动漫网站入口| 亚洲欧美精品午睡沙发| 国产夫妻精品视频| 欧美va亚洲va| 日韩电影在线观看一区| 欧美在线综合视频| 亚洲欧美偷拍三级| 成人av免费在线| 国产精品乱码一区二区三区软件| 久久99精品久久久久久久久久久久| 欧美理论电影在线| 一区二区三区不卡视频 | av网站一区二区三区| 久久午夜免费电影| 极品美女销魂一区二区三区免费| 91麻豆精品国产91久久久资源速度| 亚洲自拍偷拍图区| 欧美综合一区二区三区| 亚洲人一二三区| 色成人在线视频| 一区二区三区精品久久久| 99re成人在线| 亚洲女同ⅹxx女同tv| 99久久er热在这里只有精品66| 欧美激情在线观看视频免费| 国产成人免费xxxxxxxx| 欧美极品少妇xxxxⅹ高跟鞋| 成人天堂资源www在线| 国产欧美日韩不卡| 成人app在线观看| 亚洲日本在线天堂| 欧美系列在线观看| 五月婷婷激情综合网| 777午夜精品视频在线播放| 日本va欧美va精品| 欧美国产日韩精品免费观看| 成人免费黄色大片| 一区二区三区电影在线播| 欧美色精品在线视频| 日韩激情视频在线观看| 精品日韩av一区二区| 国产91在线看| 亚洲精品欧美激情| 欧美精选一区二区| 国产一区二区0| 国产欧美日韩三区| 色狠狠一区二区| 丝袜亚洲另类欧美| 国产精品传媒入口麻豆| 欧美四级电影在线观看| 黄网站免费久久| 亚洲美女电影在线| 日韩欧美中文字幕精品| 成人的网站免费观看| 香蕉久久夜色精品国产使用方法| 日韩精品一区二区在线| 99精品久久免费看蜜臀剧情介绍| 亚洲成人三级小说| 国产精品免费视频一区| 欧美另类高清zo欧美| 国产成a人亚洲精| 午夜精品一区在线观看| 国产网站一区二区| 91麻豆精品国产综合久久久久久| 丁香五精品蜜臀久久久久99网站| 亚洲精品视频观看| 欧美日韩综合不卡| 国产综合色视频| 一区二区三区中文字幕精品精品 | 国产性天天综合网| 日本电影欧美片| 成人一二三区视频| 青青草国产精品亚洲专区无| 亚洲欧洲精品一区二区三区不卡| 欧美日韩高清影院| 色天天综合色天天久久| 精品一区二区三区视频在线观看| 亚洲精品老司机| 国产精品盗摄一区二区三区| 日韩美女一区二区三区四区| 欧美视频一区二区三区| 99riav久久精品riav| 国产成人免费视频一区| 蜜桃久久精品一区二区| 亚洲国产精品一区二区久久恐怖片 | 91免费版在线| 成人性色生活片免费看爆迷你毛片| 日本不卡不码高清免费观看| 亚洲一区二区视频在线| 亚洲欧美日韩人成在线播放| 欧美国产乱子伦| 欧美极品另类videosde| 国产亚洲欧美一级| 久久久久久久久免费| 日韩美女在线视频| 日韩片之四级片| 欧美一卡二卡三卡| 91麻豆精品国产91久久久久久 | 国产在线不卡视频| 青青青伊人色综合久久| 首页亚洲欧美制服丝腿| 亚洲成人一区二区| 日本欧美一区二区三区| 日韩高清中文字幕一区| 日本成人在线不卡视频| 日本美女一区二区三区| 久久99精品久久久久| 久久国产精品一区二区| 国产伦精一区二区三区| 国产精品18久久久久久久网站| 国产成人夜色高潮福利影视| 国产电影一区二区三区| 国产999精品久久久久久| 99久久久无码国产精品| 色哟哟国产精品免费观看| 在线视频欧美精品| 欧美夫妻性生活| 欧美成人精精品一区二区频| 久久精品视频在线免费观看| 国产目拍亚洲精品99久久精品 | 久久综合久久久久88| 久久久久久免费网| 亚洲欧洲日产国产综合网| 亚洲电影欧美电影有声小说| 美女视频免费一区| 国产不卡视频一区二区三区| 一本久久a久久精品亚洲| 欧美老女人第四色| 久久理论电影网| 亚洲欧洲中文日韩久久av乱码| 亚洲午夜影视影院在线观看| 久久99精品久久久久久国产越南| 成人国产精品免费网站| 欧美性色欧美a在线播放| 日韩欧美一区二区久久婷婷| 中文字幕乱码亚洲精品一区 | 欧美视频一二三区| 久久精品视频在线看| 一区二区三区欧美日| 裸体一区二区三区| 91在线视频观看| 精品免费日韩av| 一区二区三区国产精品| 国产一区福利在线| 欧美日韩1234| 1区2区3区精品视频| 麻豆传媒一区二区三区| 一本大道久久a久久精品综合| 日韩一级大片在线观看| 亚洲人成伊人成综合网小说| 久久超碰97人人做人人爱| 91免费看视频| 国产精品视频你懂的| 日韩福利视频导航| 91同城在线观看| 日韩欧美中文字幕精品| 亚洲伊人色欲综合网| 国产成人av电影在线播放| 欧美一区二区三区视频免费| 一区二区三区中文字幕精品精品 | 亚洲老司机在线| 国产一区二区调教| 91精品国产高清一区二区三区蜜臀| 国产精品久久一卡二卡| 久久国产福利国产秒拍| 欧美猛男男办公室激情| 亚洲免费观看高清完整版在线观看| 黄色小说综合网站| 日韩欧美高清一区| 午夜精品一区二区三区电影天堂| 色美美综合视频| 亚洲视频一区二区在线观看| 国产一区二区三区免费看| 日韩欧美一区二区三区在线| 丝袜诱惑制服诱惑色一区在线观看 | 欧美吻胸吃奶大尺度电影| 国产精品福利影院| 成人天堂资源www在线| 国产婷婷一区二区| 国产v综合v亚洲欧| 国产欧美精品在线观看| 狠狠色综合色综合网络| 欧美一区二区观看视频| 免费观看在线色综合| 欧美一区二区三区在线观看视频| 舔着乳尖日韩一区| 欧美美女bb生活片|