c++编写入门版贪吃蛇,只要你想学就能学会

c++编写入门版贪吃蛇,只要你想学就能学会

c++编写入门版贪吃蛇,只要你想学就能学会

老规矩,先效果图
在这里插入图片描述
代码是用原生c++控制台程序编写的。这里面的算法很值得学习。

首先我们需要编写一个蛇的结构体。

struct body
{
   
    int x,y;
    body *last,*next;
    body(){
   last=next=NULL;}
}*head;

蛇的body里面有next为了连接蛇与蛇,然后last是为了标记蛇的尾部的。

int Rand(int l,int r)
{
   
    return rand()%(r-l+1)+l;
}

因为蛇吃的东西是需要随机生成的,蛇一开始的位置,方向全部都是随机的,所以我们封装好一个随机函数。

需要模拟真随机需要用到

 srand((unsigned)time(NULL));

这里面的地图+蛇,全部数据都写在一个二维数组里面

char map[23][53];

一开始的时候需要把墙体写好

//地图
    for( i=0;i<22;i++)
        for(int j=0;j<52;j++)
            map[i][j]=' ';
    for( i=0;i<52;i++)
        map[0][i]=map[21][i]='#';
    for( i=0;i<22;i++)
        map[i][0]=map[i][51]='#';

需要生成蛇的位置和方向

//生成蛇的位置
    srand((unsigned)time(NULL));
    head=new body;
    head->x=Rand(5,15),head->y=Rand(10,40);

	//生成蛇的方向
    d=Rand(0,3);
    switch(d)
    {
   
        case 0:map[head->x][head->y]='|';map[head->x+1][head->y]='|';break;
        case 1:map[head->x][head->y]='-';map[head->x][head->y+1]='-';break;
        case 2:map[head->x][head->y]='|';map[head->x-1][head->y]='|';break;
        case 3:map[head->x][head->y]='-';map[head->x][head->y-1]='-';break;
    }

最后我们需要控制蛇体移动,这里需要写上自己的摇杆。

		for(int i=0;i<=10;i++)
        {
   
            if(GetKeyState('S')<0&&d!=2)
                x=0;
            if(GetKeyState('D')<0&&d!=3)
                x=1;
            if(GetKeyState('W')<0&&d!=0)
                x=2;
            if(GetKeyState('A')<0&&d!=1)
                x=3;
            Sleep(10);
        }
        d=x;
        eat=(map[head->x+dd[d][0]][head->y+dd[d][1]]=='*');
        Update(head,head->x+dd[d][0],head->y+dd[d][1]);

eat是判断是否吃了食物。
Update就是要画出蛇的每一步。

在这个平台上有收徒的打算,如果小伙伴刚好需要一个能答疑,能带着你学习的师父,请联系我,q:2316773638

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2863.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SDN和NFV对OSS/BSS的影响[通俗易懂]

    SDN和NFV对OSS/BSS的影响

    2022年3月4日
    33
  • SPI协议详解(图文并茂+超详细)

    SPI协议详解(图文并茂+超详细)先说串口因为之前写过一篇UART,通用串行异步通讯协议,UART的相关资料因为UART没有时钟信号,无法控制何时发送数据,也无法保证双发按照完全相同的速度接收数据。因此,双方以不同的速度进行数据接收和发送,就会出现问题。如果要解决这个问题,UART为每个字节添加额外的起始位和停止位,以帮助接收器在数据到达时进行同步;双方还必须事先就传输速度达成共识(设置相同的波特率,例如每秒9600位)。传输速率如果有微小差异不是问题,因为接收器会在每个字节的开头重新同步。相应的协议如下图所示;如果您注意到

    2022年6月18日
    84
  • FRP内网穿透_内网穿透 无需公网ip

    FRP内网穿透_内网穿透 无需公网ip一、关于内网穿透内网穿透,也即NAT穿透,进行NAT穿透是为了使具有某一个特定源IP地址和源端口号的数据包不被NAT设备屏蔽而正确路由到内网主机。下面就相互通信的主机在网络中与NAT设备的相对位置介绍内网穿透方法。二、为什么要使用内网穿透为了外网要访问内网,因为当不在同一局域网内,ip和地址互相ping不同的话,最简单的方式是使用向日葵与teamview,但是用起来并不方便。三、使用frp进行内网穿透(1)关于frp的介绍frp是一个高性能的反向代理应用,可以帮助您轻

    2022年9月12日
    0
  • pygame安装报错

    pygame安装报错pygame安装报错:ERROR:CouldnotinstallpackagesduetoanEnvironmentError:[Errno2]Nosuchfileordirectory:’D:\\PycharmProjects\\Game\\pygame-1.9.4-cp37-cp37m-win_amd64.whl’错误截图:原因:本地未下载需要的pygame安装包解决方案:在官网下载需要的库,然后放入所在目录,在执行上述安装命令。官网下载地址

    2022年5月23日
    53
  • 脚本模板[通俗易懂]

    脚本模板[通俗易懂]setignorecase(忽略字符的大小写)简写:seticsetcursorline(设置光标所在行的标识线)简写:setculsetautoindent(设置自动缩进)简写:

    2022年8月6日
    3
  • git merge用法详解_git merge用法

    git merge用法详解_git merge用法一、开发分支(dev)上的代码达到上线的标准后,要合并到master分支gitcheckoutdevgitpullgitcheckoutmastergitmergedevgitpush-uoriginmaster二、当master代码改动了,需要更新开发分支(dev)上的代码gitcheckoutmastergitpullgitch…

    2025年7月30日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号