千家信息网

c++如何实现超简单的贪吃蛇游戏

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,小编给大家分享一下c++如何实现超简单的贪吃蛇游戏,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!设计思路建议先将代码复制下来跑一遍再来看思路!!!通俗易懂,请仔细看。值得注意的是我给
千家信息网最后更新 2026年11月03日c++如何实现超简单的贪吃蛇游戏

小编给大家分享一下c++如何实现超简单的贪吃蛇游戏,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

设计思路

建议先将代码复制下来跑一遍再来看思路!!!

通俗易懂,请仔细看。

值得注意的是我给出的代码没有加墙体,如有需要自己添加。

也没有难度设计,同上。

地图大小(这里设计了墙体,代码中未实现)

设置一个整形数组map,其大小为1600,对应着地图的大小为1600,并初始化数组,令数组中的值全为0,0代表空地。

我们通过设定窗口的宽度为80,打印时每个map[i] 所对应的字符占两格位置即可实现每打印40个map[i]就换行的效果。

这样地图的长宽即为40x40.

2.墙体

墙体在地图的最外围,意味着当map[i]中的i为地图边界时,对应着墙体,使用if语句判断i的值,符合位于边界的条件打印墙体即可。

通过地图的大小我们了解到,当0<=i<=39时,map[i]对应着第一行,也就是地图的边界 ,同样的,地图左边界的i满足i%40==0,右边界的i满足(i+1)%40==0,,同理下边界。将上述符合的条件放入if语句中即可实现打印墙体的功能。

3.蛇

蛇是如何移动呢?并且保持一定长度。其实我们只需要一个蛇头就可以办到,因为蛇身只是旧蛇头的位置,所以我们一直只需更新蛇头坐标就能达到目的,如何保持长度呢?,因为我们更新新的蛇头,去掉旧的蛇尾是很显然的事了,在地图大小中我们提到,map[i] 如果等于0,就是空地,让蛇尾的值变成0就行了,因为蛇一直在移动,所以当前蛇尾的前一节蛇身会是下一刻的蛇尾,很自然的联想到了以1为公差的一组数1234,分别对应蛇身的值,如果我们想使蛇连续的动起来,新蛇头的值为4,在加入新蛇头前将蛇尾变为0,蛇尾前一节蛇身变为此刻蛇尾对应的值为1,使蛇整体减去1,此时的蛇的值为0123,加入蛇头4,01234,此刻原蛇尾变为空地,原蛇尾前一截蛇身变为此刻的蛇尾。贪吃蛇的持续移动便完成了。

4.食物

很自然的,在上面3节map[i]为0,正整数时都有了对应的含义,食物我们便使其 map[i] =-1.因为贪吃蛇游戏中食物的生成要求是随机的,但我们的c++课程中并没有提到,便在网上查找到了随机数生成的函数srand(上面的设定窗口大小也是如此),生成的随机数i可能超出数组大小,对i取1600的余数即可。食物只能生成在空地上,当map[i]等于0时,令map[i]=-1。新的食物便生成了。容易忽略的一点是,我们并没有给墙体map[i]的值,也就是所墙体的值在数组中对应的是空地,只不过通过i的位置来判断是否为墙体,在这里,同样也要加入墙体的位置到判断条件,以免食物生成在墙体内。新的食物在旧的食物被吃掉后立即生成。

5.死亡判定

我们通过新蛇头所对应的值来判断蛇是否死亡

(1)map[headx+heady*40]>0, 由3我们可以知道,蛇身所对应的map [i] 值大于0,新蛇头所对应的map值大于0也就意味着新蛇头在蛇身生成,按

照贪吃蛇的规则,游戏结束

(2)(headx+heady*40)满足墙体的打印条件时,意味着蛇头在墙体生成,游戏结束

实现代码

#include#include#include#includeint main() {    int headx = 0, heady = 0, len = 5, map[1600] = { 0 }, i = 0;    char c = 'd', cl = 'd',body=3,head=2;    /*随机数生成*/    srand((unsigned)time(0));    system("mode con:cols=80 lines=40");    map[rand() % 1600] = -1;    while (true)    {        if (_kbhit())//判断键盘输入        {            cl =_getch();            if (cl < 97) cl += 32;            if (cl == 'a' && c != 'd' || cl == 'd' && c != 'a' ||cl == 'w' && c != 's' || cl == 's' && c != 'w')//判断输入方向是否与原方向冲突                c = cl;        }        /*改变蛇头坐标*/        if (c == 'a') headx--;        if (c == 'd') headx++;        if (c == 'w') heady--;        if (c == 's') heady++;        /*判断蛇头是否撞墙*/        if(headx==-1||headx==40||heady==-1||heady==40)            break;        /*判断蛇头是否为空地*/        if (map[heady * 40 + headx])        {            if (map[heady * 40+headx] > 0) break;            /*吃到食物,蛇身+1,并在空地生成新的食物*/            if (map[heady * 40 + headx] < 0)            {                len++;                for (i = rand() % 1600; map[i] || !(map[i] = -1); i = rand() % 1600);            }        }        /*是空地则蛇身值整体减1,蛇尾由1减为0变成空地*/        else for (i = 0; i < 1600; i++)        {            if (map[i] > 0) map[i] -= 1;        }        system("cls");        /*新蛇头赋值,遍历map,值大于0为蛇身,等于0为空地,小于0为食物*/        for (map[heady * 40 + headx] = len, i = 0; i < 1600; i++)        {            if (map[i] == len) {                printf("%2d", map[i]);                continue;            }            if (map[i] > 0)  printf("%2d", map[i]);            if (map[i] == 0)  printf("%2d", map[i]);            if (map[i] == -1) printf("%2d", map[i]);//打印         }        Sleep(100);    }}

效果

如果你仔细阅读了代码,将数字替换成你想要的符号(占两个字符大小如果是一个字符要加一个空格)是很简单的事情

如果你想要游戏循环进行,也是很容易办到的。

看完了这篇文章,相信你对"c++如何实现超简单的贪吃蛇游戏"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

墙体 蛇头 蛇尾 食物 生成 空地 地图 大小 代码 数组 位置 条件 边界 c++ 字符 意味 随机数 移动 设计 也就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技作文 唐信互联网科技 大连 深圳天众互联网科技公司 狮子座互联网科技培训 成都仁贤领冠互联网科技有限公司 互联网 科技馆 深圳国际航运科技和互联网 互联网大会黑科技排名 贵州叶脉互联网科技有限公司所属行业 中国航天科技大学国际工业互联网 搜狐科技互联网 互联网科技大奖都有哪些公司 畅思互联网科技 长沙互联网科技 工业互联网山东科技大学 电子商务与互联网科技的关系 互联网高科技行业有哪些企业 数字科技和互联网金融哪个好 银川新华互联网科技学校招聘 前海云享互联网科技 远信互联网科技 天津摩尔互联网科技 互联网金融科技平台 易通互联网络科技有限公司 友谊互联网络科技 互联网金融和金融科技 湖北码尼互联网科技有限公司电话 中国航天科技大学国际工业互联网 中国新注册互联网科技 长沙易易互联网科技有限公司
0