贪吃蛇c语言自动寻路,C/C++编程笔记:C语言贪吃蛇源代码控制台(一),会动的那种哦!...

前几天有个同学加我QQ私聊我说他们老师布置了一个贪吃蛇,他不知道怎么写所以来找我求解,我给他简单讲解了思路和一些难点之后他也能够自己独立将项目完成了!考虑到更多同学可能有贪吃蛇上的问题,今天有时间就来写一下题解。我将分几步来教大家写一个贪吃蛇小游戏。由于大家可能C语言未学完,这个教程只涉及数组和函数等知识点。

be50dc0a51b2b52aa4cdc49096455097.png

一、画地图

首先我们使用宏定义来定义两个常数,地图的高(H)和地图的宽(W)

#defineH 20

#defineW 20

这样写的好处是以后改变地图的大小就不用更改写好的代码了,只要修改下宏定义。节省了时间又避免改出bug

接下来,我们定义一个二维数组,这个二维数组的每一个值刚好对应了平面的每一个点,这样就可以方便地自定义地图了。可以设置障碍物什么的了。然后我们用数组a[H][W]来存储地图情况,如果a[i][j]==0,就说明第i+1行,第j+1列是空的,如果a[i][j]==1,就说明这个点是障碍物。

然后我们使用下面的代码来把地图数组的边框做出来,就是让数组边缘等于1。(int全局变量默认为0)。

da5ee5d6343202c54aaf4a591ed138c1.png

这个只是最简单的地图,如果你有其他想法可以自由发挥,画出自己的地图。

地图画好了,剩下的就是画出地图了。我们把画地图的过程也写为一个函数,这样能使代码结构更清晰,更容易找出bug。画地图就简单了,就是遍历整个数组,然后值为0的地方输出空格,值为1的地方输出一个符号,符号按自己喜好,我这里使用了#。

7cb290c50ce19584c09a13f26f01b2b1.png

然后我们发现长宽不合适,我们可以修改刚开始的H和W的值。

按自己喜好调整,比如这样

#defineH 23

#defineW 75

然后看看是不是比刚才好看了。知道宏定义的好处了吧。

af765fdfb970812406439b14c75dc21b.png

好了,到这里为止,我们已经学会了画地图。

这只是最简单的地图,通过修改地图数组,我们就能做出很多不一样的地图。

下面附上第一步的完整代码。

1ea2af650c39f455804ed414eca2e96c.png

599921b2d9a29137ece9558eeab6fc05.png

二、画蛇

蛇的身体就是一些点,我们可以用二维数组把这些点的坐标存起来。

先声明一个足够大的二维数组。虽然我觉得你们玩不了这么长(手动滑稽)。

int s[H*W][2];

这样s[0][0]表示蛇头的i坐标,s[0][1]表示蛇头的j坐标。s[i][0]表示蛇第i+1个点的i坐标。s[i][1]同理。

然后再声明一个int变量存储蛇的长度。然后把这些初始化操作都放进上面init函数里面。

int sLength;        //蛇的长度

sLength=4;          //让蛇的最初长度为4

然后给刚开始的蛇身几个初始坐标

7c55fa91eaa1e33c37dab4b56c110022.png

然后接下来我们把蛇画出来,我这里有一个函数(百度的),可以实现移动光标到指定点。注:要添加头文件windows.h

如下:

810b923340ae5cc5df2cabffe79761c1.png

然后就可以先画地图,然后通过移动光标在地图上画出蛇。

77e71307158c03c54f1f8f0102373941.png

好,看看效果

6a2e85019c25154887e0f7fd52de9519.png

蛇确实出来了,但是那个光标很碍事,在init函数开始时加入下面代码可隐藏关标

CONSOLE_CURSOR_INFO cursor_info = {1, 0};

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);

6bd576e73f1ef9644eac0527f05f3664.png

这样就没有光标了。

到现在为止的代码。

678039ec2727f187b5a1eb620eb75337.png

c7a6f52506d1be031ed7a19950202a3f.png

1bb55ef2b0c8465934c3f913ac679e0e.png

今天先到这里吧!大家不要着急,下篇文章我会把蛇剩下的部分分享完整!

微信公众号:C语言编程学习基地,学习C/C++编程知识,想要成为一个更加优秀的程序员,或者你学习C/C++的时候有难度,可以来笔者的C语言C++零基础编程学习Q圈9541726787一起成长!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值