接上文《C/C++编程笔记:C语言贪吃蛇源代码控制台(一),会动的那种哦!》如果你在学习C语言开发贪吃蛇的话,零基础建议从上一篇开始哦!接下来正式开始吧!

三、蛇的运动

上次我已经教大家画出蛇了,现在我就教大家让蛇动起来。为了让大家更好理解,蛇的移动就用最简单的办法,这里就不用链表,顺序队列什么的了。蛇的移动就是头往前移动,然后后面的身体移动到前一节身体原来的位置上。就像这样:

那蛇头怎么办呢?

为了确定蛇头的位置,我们定义一个变量原来存储蛇现在的方向。

intdirection;    //蛇的方向

我们可以通过direction的值来标记现在蛇的方向。比如0代表上,1代表下。。。

为了方便,我们定义一些常量

//定义direction的每个值代表的方向

#defineUP 0

#defineDOWN 1

#defineLEFT 2

#defineRIGHT 3

这样,我们就可以这样写:

写好的move函数如下

然后move写好了,我们还要写个循环,这样就可以让蛇一直动了。地图画完一次并且画了蛇之后,我们要把光标移动到起始位置。最简单的办法是每一次画地图的时候都把关标移动到(0,0)。

修改drawMap函数为下面这样。在开头加一个设置位置的语句。

然后建立一个循环,不断地画蛇,移动。

然后观察一下,蛇确实走了,但是蛇的痕迹还在。

这样我们可以在蛇移动函数里面,擦去上一次的尾巴。

修改过后的move函数如下

运行一下,蛇动起来了。

然后试试修改下方向。在init函数最后写一个

好,感觉很正常。

现在我们可以通过给direction变量赋值来改变蛇的前进方向了。

接下来,我们试试用键盘控制它。

写一个新函数key,用来处理键盘输入。

我们的输入不能在屏幕上有痕迹,并且不能输入一个按键就回车一下。。。所以我们用getch函数。

加conio.h头文件。然后getch会暂停程序等待输入,而蛇只在转弯的时候需要输入。所以我们就需要一个判断有没有输入的函数

然后通过输入的字符是w还是a还是s或者d来控制蛇的方向。

好了,现在我们就能通过wasd这四个按键控制蛇到处走了。(进入游戏先切换为英文输入法

下面附这一步的完整代码。

好了,现在食物能正常投放了

接下来我们就来实现一下蛇吃到食物的变长功能吧。

首先设置一个变量标记蛇是否吃到食物

bool eated=false;   //标记是否吃到食物

然后在main里面的判断吃到食物时,使eated变为true

然后在move函数里面加下面的代码

这样在下面的坐标移动环节,就不会舍弃掉上一次的尾巴节点。蛇就变长了。

来看看效果:

蛇可以变长了。不过有时候玩着玩着有事,又舍不得玩了这么长的蛇,要是有个暂停功能就好了。接下来我们就来顺便实现下。

在key函数里面的switch里面加一个case

这样就可以实现按p键暂停了。(记得玩的时候切换为英文输入法呀)

来看看到现在为止的代码:

后续更新:

现在就来实现一下game over的功能吧。

写个函数判断蛇是否撞到自己或者撞到墙:

然后在main里面加这个实现gameOver

主函数

接下来,我们来显示一下成绩。

声明一个变量来记录分数

intscore=0;//得分

然后当吃到食物时分数增加(main里面)

然后写一个printScore函数来写分数

记得在main里面调用啊。看看效果:

以上就是本期分享的全部内容,希望对大家有帮助哦!

学习C/C++编程知识,或者你学习C/C++的时候有难度,可以来笔者的C语言C++零基础编程学习圈

微信公众号:C语言编程学习基地,欢迎关注~

C/C++编程笔记:C语言贪吃蛇源代码控制台(二),分数和食物!的更多相关文章

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

    前几天有个同学加我QQ私聊我说他们老师布置了一个贪吃蛇,他不知道怎么写所以来找我求解,我给他简单讲解了思路和一些难点之后他也能够自己独立将项目完成了!考虑到更多同学可能有贪吃蛇上的问题,今天有时间就来 ...

  2. c语言贪吃蛇详解3.让蛇动起来

    c语言贪吃蛇详解3.让蛇动起来 前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解.我将分几步来教大家写一个贪吃蛇小游戏.由于大家c语言未学完,这个教程只涉及数组和函数等知识点. 上次 ...

  3. c语言贪吃蛇详解-2.画出蛇

    c语言贪吃蛇详解-2.画出蛇 前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解.我将分几步来教大家写一个贪吃蛇小游戏.由于大家c语言未学完,这个教程只涉及数组和函数等知识点. 蛇的身 ...

  4. c语言贪吃蛇详解1.画出地图

    c语言贪吃蛇详解-1.画出地图 前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解.我将分几步来教大家写一个贪吃蛇小游戏.由于大家c语言未学完,这个教程只涉及数组和函数等知识点. 首先 ...

  5. c语言贪吃蛇详解5.GameOver功能与显示成绩

    c语言贪吃蛇详解5.GameOver功能与显示成绩 以前我们已经做出来了一个能吃东西变长的蛇.不过它好像不会死... 现在就来实现一下game over的功能吧. 写个函数判断蛇是否撞到自己或者撞到墙 ...

  6. c语言贪吃蛇详解4.食物的投放与蛇的变长

    c语言贪吃蛇详解4.食物的投放与蛇的变长 前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解.我将分几步来教大家写一个贪吃蛇小游戏.由于大家c语言未学完,这个教程只涉及数组和函数等知识 ...

  7. 程序游戏推荐(C语言贪吃蛇,python天天酷跑(需要安装pygame),js是狠人就坚持30s)

    下面是下载位置,我把他们上传到我的文件下了. C语言贪吃蛇:https://files.cnblogs.com/files/ITXiaoAng/%E8%B4%AA%E5%90%83%E8%9B%87. ...

  8. c语言贪吃蛇

    思路:函数gotoxy(x,y)使光标移植屏幕的x,y坐标(屏幕左上角为0,0),用来绘制蛇和界面,color()函数用来设置绘制的颜色.设有snakelong节,第i节蛇的x坐标为x[i],y坐标为 ...

  9. [C语言]贪吃蛇_结构数组实现

    一.设计思路 蛇身本质上就是个结构数组,数组里存储了坐标x.y的值,再通过一个循环把它打印出来,蛇的移动则是不断地刷新重新打印.所以撞墙.咬到自己只是数组x.y值的简单比较. 二.用上的知识点 结构数 ...

随机推荐

  1. 数组中出现次数超过一半的数字(剑指offer-28)

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  2. C++的基本输入输出

    参考:http://www.runoob.com/cplusplus/cpp-basic-input-output.html

  3. [JAVA]《JAVA开发手册》规约详解

    [强制] 使用 Map 的方法 keySet()/values()/entrySet()返回集合对象时,不可以对其进行添加元素操作,否则会抛出 UnsupportedOperationExceptio ...

  4. day25 ATM项目(第一天)

    项目的说明书 项目:ATM + 购物车 项目需求: 1.额度15000或自定义 --> 注册功能 2.实现购物商城,买东西加入购物车,调用信用卡接口结账 --> 购物功能.支付功能 3.可 ...

  5. 安装更强大更美观的zsh,配置oh my zsh及插件

    安装更强大更美观的zsh,配置oh my zsh及插件 #0x0 安装zsh #0x1 安装oh my zsh #0x2 配置zshrc #0x3 配置主题 #0x4 安装插件 #0x5 小结 #0x ...

  6. Vue 的响应式原理中 Object.defineProperty 有什么缺陷?

    Object.defineProperty只能劫持对象的属性,从而需要对每个对象,每个属性进行遍历,如果,属性值是对象,还需要深度遍历.Proxy可以劫持整个对象,并返回一个新的对象. Proxy不仅 ...

  7. requests接口自动化3-url里带参数的get请求:params

    url里带参数的get请求:用params传参 #2.带参数的get请求,把参数写成字典格式,用params传参 para2={"type":"math"} r ...

  8. 微信小程序热更新,小程序提示版本更新,版本迭代,强制更新,微信小程序版本迭代

    相信很多人在做小程序的时候都会有迭代每当版本迭代的时候之前老版本的一些方法或者显示就不够用了这就需要用到小程序的热更新.或者说是提示升级小程序版本 editionUpdate:function(){ ...

  9. Ubuntu18.04安装GitLab搭建私有仓库服务器过程笔记

      百度了很多资料结果折腾很久还没安装成功,索性就直接上官网找文档参考顺利搭建完成 因为有2台服务器做练习,总结了2种安装方式提供参考:第一种官网安装方式,第二种国内镜像安装方式(建议采用第二种) 第 ...

  10. 【C#】根据开始时间和结束时间筛选存在的信息

    背景 业务需求中,需要根绝开始时间和结束时间筛选一段时间内的任务存在个数. 示例图片 根据开始时间 9:00到 结束时间11:00 筛选信息 总共有这么四种情况可能出现 插入测试数据 CREATE T ...