基于Linux下的GTK+2.0贪吃蛇游戏开发

来源:互联网 发布:lp仿传奇单机版源码 编辑:程序博客网 时间:2024/04/28 12:42

之前在很多平台上都见过贪吃蛇的小游戏但是唯独在Linux 下见到这种游戏编程很少,像Java 的C语言的有很多,这里分享一下我自己参考别人的贪吃蛇代码移植到Linux 

平台下并且这个小程序有多个.c和.h文件组成,虽然很多人会说这样子会造成全局变量混乱,以及变量声明的的重定义等,但是为了让更好的理解这个贪吃蛇的逻辑,分成多个文件,希望有助于大家学习和帮助,在源代码中,我的代码的每一行都有详细的注释,因为本人才接触Linux,能力有限,希望大家不要在意。

 在本程序中的贪吃蛇主要 分成了interface.c文件 和snake.c,about .c,main.c文件等4个文件以及对应的interface.h ,snake.h,about.h,global.h的头文件,因为以往的贪吃蛇都是一个文件全部覆盖,这里我来分别说明下这4个.c文件的作用,interface.c是用来创建 主要的游戏窗口的主要代码以及interface 函数的主要功能实现区,snake.c文件则是为小蛇的主要上下左右功能的实现区,about.c则为菜单栏作者的主要实现区,而main.c则是调用了前台动画的主要的实现,以及综合调用 主窗口函数的运行。这个程序的核心所在就是snake.c这个文件了,其基本逻辑和其他各种语言写的贪吃蛇的代码的逻辑基本相同,都是用一个timeou的计时器用来刷新小蛇的坐标的同时用小蛇的图片来填充新的坐标,同时用数组来保存小蛇的坐标,实现小蛇的动态行走。

这里定义了3个变量 因为是全局的用的external而不用static静态声明的原因我在代码里会解释;

extern GdkPixbuf *pixbuf = NULL ;  //背景图像 

extern GdkPixbuf *pix1 = NULL ;   //蛇图像 
extern  GdkPixbuf *pix2 = NULL ;   //豆子图像 ;

这个void move ()这是小蛇运动的主要函数里面的tailx ,taily,headx,heady分别用了数组locate[0][0]和locate[0][1],locate[len][0],locate[len][1];来记录小蛇的方向运动坐标;这里用switch分支语句来判读朝向的方向,列如想左边的情况:     

case LEFT: //左  
             headx--;
erase();
             if(headx == -1) 
{
game_end();
break;

            for(i=0; i<len; i++) 
            { 
                  locate[i][0] = locate[i+1][0]; 
                  locate[i][1] = locate[i+1][1];  
            } 


            locate[len][0] = headx; 
            locate[len][1] = heady; 
            draw(); 
            break; 


这里因为这个游戏区域的长度为60,因为向左边所以headx的坐标只能--,这里因为要先出来,所以要先调用erase()函数来抹擦掉蛇尾部分,然后判读headx坐标如果为-1则判读为头部撞到墙的里面条件成立则调用game_end()结束游戏这个函数同时退出循环;然后在用for循环这里定义了一个变量i和len,已经locate二维数组,首先给i赋值为0,locate[0][0]即为headx坐标,而locate[0][1]则为heady坐标,这里因为移动判读用locate[i+1][0]即为下一个坐标覆盖为当前的坐标,然后在用headx赋值为当前的locate[len][0]其他的方向同理;然后在调用draw函数画上蛇头

timer = gtk_timeout_add(50,(GtkFunction)game_run,NULL);这个变量位于 on_begin_clicked函数中主要是用timeout计时器每隔50秒来调用game_run函数的运行,同时一定程度上也可以实现小蛇的速度的加速 和减速,其他的游戏区域同理都是调用函数来实现的,大致原理相同;




在文件里面我用了一个框图来标注了这个游戏区域的生成帮助大家更好的理解,以及流程图来希望大家能多这个多文件的更好理解,以及贪吃蛇的帮助文档,里面内容都深刻的解析了贪吃蛇的每一个不服,因为能力有限,第一次写博客多有疏漏,希望大家多多包含

下面是文档的下载地址,希望能帮助大家更好的学习和使用贪吃蛇相关文档代码的下载

2 0
原创粉丝点击