千家信息网

怎么用C++实现贪吃蛇游戏

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章给大家分享的是有关怎么用C++实现贪吃蛇游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1976年,Gremlin平台推出了一款经典街机游戏Blockade。游戏
千家信息网最后更新 2026年11月04日怎么用C++实现贪吃蛇游戏

这篇文章给大家分享的是有关怎么用C++实现贪吃蛇游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

1976年,Gremlin平台推出了一款经典街机游戏Blockade。游戏中,两名玩家分别控制一个角色在屏幕上移动,所经之处砌起围栏。角色只能向左、右方向90度转弯,游戏目标保证让对方先撞上屏幕或围栏。 听起来有点复杂,其实就是下面这个样子: 基本上就是两条每走一步都会长大的贪吃蛇比谁后完蛋,玩家要做的就是避免撞上障碍物和越来越长的身体。更多照片、视频可以看 GamesDBase 的介绍。 Blockade 很受欢迎,类似的游戏先后出现在 Atari 2600、TRS-80、苹果 2 等早期游戏机、计算机上。但真正让这种游戏形式红遍全球的还是21年后随诺基亚手机走向世界的贪吃蛇游戏--Snake。

我们今天就来自己写一个游戏《贪吃蛇》

其实这个项目很早就想和大家分享了,但是鉴于这个比较简单,当时觉得没必要,但近期有小伙伴私信我说想要贪吃蛇的项目源码,我就来满足小伙伴们的要求,大家一定要好好看好好学哦!

行吧,我们现在就开始吧!!!

首先还是、还是我们的老朋友结构体(我们的食物以及蛇)

typedef struct pointXY{        int x;        int y;}MYPOINT;HWND hwnd = NULL; //蛇struct mySnake{        int num;        MYPOINT xy[MAX];        char postion;              //表示方向,标记}snake; //食物struct myFood{        MYPOINT foodxy;        int flag;        int eatGrade;}food;

接下来便是初始化了,这也是我们的老伙计了,再有就是绘制这条蛇以及食物的函数

//1.初始化蛇void initSnake(){        snake.xy[2].x = 0;        snake.xy[2].y = 0;         snake.xy[1].x = 10;        snake.xy[1].y = 0;         snake.xy[0].x = 20;        snake.xy[0].y = 0;         snake.num = 3;        snake.postion = right;         food.flag = 0;}//2.绘制蛇void drawSnake(){        for (int i = 0; i < snake.num; i++)        {                setlinecolor(RED);                setfillcolor(GREEN);                fillrectangle(snake.xy[i].x, snake.xy[i].y, snake.xy[i].x + 10, snake.xy[i].y + 10);        }}//初始化食物void  initFood(){        //0,63    630   640          //0,47    470   480        food.foodxy.x = rand() % 64 * 10;  //只能是10的整数倍,蛇头才能对齐食物        food.foodxy.y = rand() % 48 * 10;        food.flag = 1;        //食物不能出现在蛇身上        for (int i = 0; i < snake.num; i++)        {                if (food.foodxy.x == snake.xy[i].x&&food.foodxy.y == snake.xy[i].y)                {                        food.foodxy.x = rand() % 64 * 10;  //只能是10的整数倍,蛇头才能对齐食物                        food.foodxy.y = rand() % 48 * 10;                }        }}//绘制食物void drawFood(){        fillrectangle(food.foodxy.x, food.foodxy.y, food.foodxy.x + 10, food.foodxy.y + 10);}

现在是蛇的移动函数,蛇要怎么走,千万不要一下头朝前,一下屁股朝前,不要闹笑话了

//3.移动蛇void moveSnake(){        //除了第一节之外,后面的坐标都是前一节坐标        for (int i = snake.num - 1; i > 0; i--)        {                snake.xy[i].x = snake.xy[i - 1].x;                snake.xy[i].y = snake.xy[i - 1].y;        }        //蛇头怎么走,要根据方向标志去做移动        switch (snake.postion)        {        case right:                snake.xy[0].x += 10;                break;        case left:                snake.xy[0].x -= 10;                break;        case down:                snake.xy[0].y += 10;                break;        case up:                snake.xy[0].y -= 10;                break;        }  }

项目重点,如何去控制我们的蛇,之前是鼠标控制,那键盘控制该怎么去写呢,看好了

//4.按键用户:人玩蛇void keyDown(){        static char userkey = '\0';    //VC  getch不需要加下划线        //userkey=_getch();             //不可见输入        //自己生成按键        switch (snake.postion)        {        case right:        case left:                if (food.foodxy.y >= snake.xy[0].y)                {                        userkey = 80;                }                else  if (food.foodxy.y= snake.xy[0].x)                {                        userkey = 77;                }                else  if (food.foodxy.x < snake.xy[0].x)                {                        userkey = 75;                }                break;        }        switch (userkey)        {        case 'w':        case 'W':        case 72:   //上                if (snake.postion != down)                {                        //蛇往上走,你要排除掉蛇本来是朝下                        snake.postion = up;                }                break;        case 's':        case 'S':        case 80:   //下                if (snake.postion != up)                {                        snake.postion = down;                }                break;        case 'a':        case 'A':        case 75:   //左                if (snake.postion != right)                {                        snake.postion = left;                }                break;        case 'd':        case 'D':        case 77:   //右                if (snake.postion != left)                {                        snake.postion = right;                }        }}

接下来是我们的老判断函数了,蛇吃到食物会怎么样以及怎么判断蛇的死亡,理清逻辑

//蛇吃食物void eatFood(){        if (snake.xy[0].x == food.foodxy.x && snake.xy[0].y == food.foodxy.y)        {                snake.num++;                food.eatGrade += 10;                food.flag = 0;        }}//蛇死亡判断int snakeDie(){        //显示分数        char grade[100] = { 0 };        sprintf(grade, "%d", food.eatGrade);        setbkmode(TRANSPARENT);        settextcolor(RED);        outtextxy(580, 20, "分数:");          //loadimage           outtextxy(620, 20, grade);            //        //判断蛇是否死亡         //撞墙        if (snake.xy[0].x > 640 || snake.xy[0].x<0 || snake.xy[0].y>480 || snake.xy[0].y < 0)        {                MessageBox(hwnd, "游戏结束!", "撞墙死亡!", 0);                return 1;        }        //撞自己        for (int i = 1; i < snake.num; i++)        {                if (snake.xy[0].x == snake.xy[i].x&&snake.xy[0].y == snake.xy[i].y)                {                        MessageBox(hwnd, "游戏结束!", "撞自己!", 0);                        return 1;                }        }        return 0;}

最后是我们的主函数,这我就不说了

int main(){        srand((unsigned int)time(NULL));        hwnd=initgraph(640, 480);        setbkcolor(WHITE);        cleardevice();        initSnake();        while (1)        {                cleardevice();          //刷掉路径                if (food.flag == 0)                {                        initFood();                }                drawFood();                drawSnake();                if (snakeDie())                {                        break;                }                eatFood();                moveSnake();                Sleep(100);                     //控制速度                //while (_kbhit()) //kbhit() 存在按键操作,返回非零                //{                //      keyDown();                //}                keyDown();        }        closegraph();        printf("GameOver!!!");        system("pause");        return 0;}

感谢各位的阅读!关于"怎么用C++实现贪吃蛇游戏"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

食物 控制 函数 就是 移动 按键 方向 更多 蛇头 还是 项目 C++ 接下来 内容 分数 围栏 坐标 小伙 小伙伴 屏幕 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州百单互联网科技有限公司 重生之互联网科技帝国 互联网科技财经 互联网为科技 没上市的科技互联网公司 互联网科技与金融科技 鑫亿盛互联网科技 善班互联网科技有限公司 互联网科技大会案例 哈尔滨新华互联网科技学院 南平创想时代互联网科技有限公司 玉溪新华互联网科技好不好 世界互联网领先科技成果获奖 中国互联网有什么科技 皮皮虾互联网科技有限公司 互联网安防科技感 抖集互联网科技技术咨询 长沙易易互联网科技有限公司 互联网科技创业计划的风险分析 知域互联网科技有限公司官网 互联网科技公司的优势 互联网最新的科技有限公司 互联网科技论文 北京禾田雨橡互联网科技 中盈科技互联网信息有限公司 互联网科技与大数据专业 未来五年的互联网科技 用友工业互联网科技发展 皮皮虾互联网科技有限公司 互联网科技包装股份有限公司上市
0