C + SDL 贪吃蛇的基础实现

本文介绍了如何使用C语言结合SDL库来实现一个基础的贪吃蛇游戏。游戏已实现时间显示、碰撞检测、蛇身增长和转向功能。剩下障碍物和地图设置等功能留待读者自行发挥。代码分为四个文件:贪吃蛇头文件、时间显示头文件、常用设置头文件和主函数文件。文章详细展示了关键函数的实现,如初始化蛇的节点表面、蛇的图片变换、蛇身移动等。
摘要由CSDN通过智能技术生成

说明一下:目前实现了 时间显示、碰撞、蛇身的增加 、转向。剩下的就是障碍的出现还有地图的设置。这些就留给朋友们自己发挥创意了。

总共分四个文件。 贪吃蛇头文件、时间显示头文件、常用设置头文件还有主函数文件。

//SNake.h
//贪吃蛇头文件
/******************** 常量定义区 *******************/

//一个节点的宽
#define FTB_W 27
//一个节点的高
#define FTB_H 27

//蛇的最大长度
#define SK_MAX 15


/******************* 表面定义区 ********************/

//节点
SDL_Surface *fc_ftb = NULL;

/******************* 全局变量声明区 *********************/

//足球两种状态的坐标
struct point football[2] = { {0,0}, {0,27}};

//当前蛇的长度
unsigned int body_length = 0;
//蛇身的组
struct object body_list[SK_MAX];


/******************* 函数定义区 ********************/

//初始化蛇的节点表面
void Init_Snake(char *pic)
{
     fc_ftb = IMG_Load(pic);
     if(fc_ftb == NULL)   printf("Error[Init_Snake()]:Init snake failed!/n");
}

//蛇的图片变换
void ChangPic()
{
     for(int i = body_length-1; i > 0; i--)
     {
         if(body_list[i].seq == 1)  body_list[i].seq = 0;
                else body_list[i].seq = 1;
         body_list[i].xs = football[body_list[i].seq].xpos;
         body_list[i].ys = football[body_list[i].seq].ypos;          
     }
}

//增加节点
void AddNode()
{
      body_list[body_length].seq = 0;
     body_length++;
}

//蛇头可否转向的判定 0不可转
int CanTurn(struct object *head, int direction)
{
    if(head->direction == 1 || head->direction == 2)
    switch(direction)
    {
     case 1:
            break;
     case 2:
            break;
     case 3:
            head->direction = 3;
            return 3;
     case 4:
            head->direction = 4;        
            return 4;
     default:
            break;                       
    }
   
    if(head->direction == 3 || head->direction == 4)
    switch(direction)
    {
     case 1:
            head->direction = 1;
            return 1;
     case 2:
            head->direction = 2;
            return 2;
     case 3:
            break;
     case 4:
            break;
     default:
            break;                       
    }
    return 0;
}

//获得键盘
void GetKey(struct object *body)
{
     Uint8 *keys = SDL_GetKeyState(NULL);
     int LEFT = 1, RIGHT = 2, UP = 3, DOWN = 4;
    
     if(keys[SDLK_DOWN])
         CanTurn(body,DOWN);
     else if(keys[SDLK_UP])
        CanTurn(body,UP);
        else if(keys[SDLK_LEFT])
             CanTurn(body,LEFT);
             else if(keys[SDLK_RIGHT])
                 CanTurn(body,RIGHT);
}
         


//蛇的身体的移动<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值