创意电子

标题: C语言项目实战:《贪吃蛇》零基础项目!源码已奉上 [打印本页]

作者: C语言编程    时间: 2021-11-5 17:46
标题: C语言项目实战:《贪吃蛇》零基础项目!源码已奉上
这篇文章重要为大家详细介绍了C语言实现——《贪吃蛇项目》,文中示例代码介绍的非常详细,具有肯定的参考价值,感兴趣的小伙伴们可以参考一下!

                               
登录/注册后可看大图

本项目重要用到了C语言的循环,函数,指针,结构体,枚举,联合,文件操作,简单的数据结构,并且对逻辑也是有肯定的要求,但是这些在我们项目源码里面都会有注释,大家到时候学习的时候千万不要忽略注释,注释可以更好地帮你理解代码,尤其是C语言初学者。
本项目编译环境:VS2019/VS2013;
插件:图形库插件easyX;
结果图演示:

                               
登录/注册后可看大图

本案例配套学习教程:精讲贪吃蛇——哔哩哔哩
源代码示例:
#include#include//包罗easyx图形库,可以利用给我们提供的一些函数,绘图,贴图#include#define WIN_WIDTH 640#define WIN_HEIGHT 480#define MAX_SNAKE 500 //蛇的最大节数//枚举enum DIR //枚举蛇的方向{        UP,        DOWN,        LEFT,        RIGHT,};struct Food //食物{        int x;        int y;        DWORD color;        bool flag;//是否被吃掉,是否要重新生成食物}food;struct Pos{        int x;        int y;        DWORD color;};struct Snake//蛇的结构体{        int num;//当前节数        int dir;//蛇的方向        int score;//分数        int size;//蛇的宽和高        int speed;//蛇的移动速度        //表示每一节蛇的坐标 数组        struct Pos coor[MAX_SNAKE];}snake;void GameInit(){        //设置随机数种子        srand(GetTickCount());        snake.num = 3;        snake.dir = RIGHT;        snake.score = 0;        snake.size = 10;        snake.speed = 10;        snake.coor[2].x = 0;        snake.coor[2].y = 0;        snake.coor[2].color = RGB(rand() % 256, rand() % 256, rand() % 256);//随机生成三个数,用三原色表示颜色        snake.coor[1].x = 10;        snake.coor[1].y = 0;        snake.coor[1].color = RGB(rand() % 256, rand() % 256, rand() % 256);//随机生成三个数,用三原色表示颜色        snake.coor[0].x = 20;        snake.coor[0].y = 0;        snake.coor[0].color = RGB(rand() % 256, rand() % 256, rand() % 256);//随机生成三个数,用三原色表示颜色        //初始化食物        food.x = rand() % (WIN_WIDTH/10)*10;//1*10  10 20 30 40 50 60         food.y = rand() % (WIN_HEIGHT/10)*10;        food.color = RGB(rand() % 256, rand() % 256, rand() % 256);//随机生成三个数,用三原色表示颜色        food.flag = true;}void GameDraw(){        cleardevice();        for (int i = 0; i < snake.num; i++)        {                //设置填充颜色                setfillcolor(snake.coor.color);                //画矩形                fillrectangle(snake.coor.x, snake.coor.y, snake.coor.x + 10, snake.coor.y + 10);        }        //绘制食物        //solidcircle(food.x,food.y,5)        if (food.flag)        {                setfillcolor(food.color);                solidellipse(food.x, food.y, food.x + 10, food.y + 10);        }        //绘制犯颀                //先把整数转成字符串        char temp[20] = " ";        sprintf(temp, "分数:%d", snake.score);        outtextxy(10,10,temp);//假如报错  “outtextxy”: 2 个重载中没有一个可以转换全部参数类型  肯定是字符集题目        /*怎么修改字符集呢?三种方法                        */}void GameMove(){        for (int i = snake.num-1; i >0; i--)        {                snake.coor.x = snake.coor[i - 1].x;                snake.coor.y = snake.coor[i - 1].y;        }        switch(snake.dir)        {        case UP:                snake.coor[0].y -= snake.speed;                if (snake.coor[0].y < 0)                {                        snake.coor[0].y = WIN_HEIGHT;                }                break;        case DOWN:                snake.coor[0].y += snake.speed;                if (snake.coor[0].y > WIN_HEIGHT)                {                        snake.coor[0].y = 0;                }                break;        case LEFT:                snake.coor[0].x -= snake.speed;                if (snake.coor[0].x < 0)                {                        snake.coor[0].x = WIN_WIDTH;                }                break;        case RIGHT:                snake.coor[0].x += snake.speed;                if (snake.coor[0].x > WIN_WIDTH)                {                        snake.coor[0].x = 0;                }                break;        }}void GameControl(){        //获取键盘输入,_getch(); 不回显函数,        char key = _getch();        switch (key)        {                case 72:                        if (snake.dir!=DOWN)                        {                                snake.dir = UP;                        }                                break;                case 80:                        if (snake.dir != UP)                        {                                snake.dir = DOWN;                        }                        break;                case 75:                        if (snake.dir != RIGHT)                        {                                snake.dir = LEFT;                        }                        break;                case 77:                        if (snake.dir != LEFT)                        {                                snake.dir = RIGHT;                        }                        break;        }        printf("%d\n", key);}void CreateFood(){        if (!food.flag)        {                food.x = rand() % (WIN_WIDTH / 10) * 10;//1*10  10 20 30 40 50 60                 food.y = rand() % (WIN_HEIGHT / 10) * 10;                food.color = RGB(rand() % 256, rand() % 256, rand() % 256);//随机生成三个数,用三原色表示颜色                food.flag = true;        }}void EatFood(){        if (food.flag && snake.coor[0].x == food.x && snake.coor[0].y == food.y)        {                food.flag = false;                snake.num++;                snake.score += 10;                snake.coor[snake.num-1].color = RGB(rand() % 256, rand() % 256, rand() % 256);//随机生成三个数,用三原色表示颜色                CreateFood();        }}int main(){        //1,创建窗口,init初始化 graphics 图形窗口        initgraph(WIN_WIDTH, WIN_HEIGHT, SHOWCONSOLE);        setbkcolor(RGB(207, 214, 229));//设置颜色        cleardevice();//刷新窗口        GameInit();                while (1)        {                                GameDraw();                GameMove();                if (_kbhit())                {                        GameControl();                }                        EatFood();                Sleep(100);                }        getchar();        return 0;}整个项目标源码已经分享,这是一个比力完善的贪吃蛇游戏,从食物随机出现到分数的表现都已经实现了,大家在把握了相应知识后练练手,尤其建议先自己了解其逻辑和思路之后去尝试写出来,而不是直接照着代码抄,如许对你帮助并不大的!
下一期我们将分享的是能够自动行动的《进化版贪吃蛇》大家在把握了这个项目标基础上只必要加一个功能就好了,怎么样实现贪吃蛇的自动吃食物,大家也可以自己先去想想试试,每一次的思考就是你进步的过程!
假如学习的过程中有什么题目,以及本项目有什么不懂的地方,都可以来找我交流,我来帮你!
那么今天的分享就到这里了,后续会更新更多精彩项目标,大家要好勤学C语言C++哟~
写在最后:对于准备学习C/C++编程的小伙伴,假如你想更好的提升你的编程核心能力(内功)不妨从现在开始!
编程学习书籍分享:

                               
登录/注册后可看大图

编程学习视频分享:

                               
登录/注册后可看大图

整理分享(多年学习的源码、项目实战视频、项目条记,基础入门教程)
接待转行和学习编程的伙伴,利用更多的资料学习发展比自己琢磨更快哦!
对于C/C++感兴趣可以关注小编在背景私信我:【编程交流】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!
作者: 大道涟漪    时间: 2021-11-5 19:41
转发了
作者: 胡威葳    时间: 2021-11-5 20:29
转发了
作者: 网事2008    时间: 2021-11-5 21:46
转发了
作者: 网事2008    时间: 2021-11-5 21:46
转发了
作者: Guyufeng    时间: 2021-11-5 22:20
转发了
作者: 乌喱单刀    时间: 2021-11-6 01:04
关注你了,安装VS2019/VS2013编译器,电脑内存要多大?




欢迎光临 创意电子 (https://wxcydz.cc/) Powered by Discuz! X3.4