设计思路

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

  通俗易懂,请仔细看。

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

        也没有难度设计,同上。

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

设置一个整形数组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<bits/stdc++.h>
#include<windows.h>
#include<iostream>
#include<conio.h>
int 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);}
}

效果

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

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

这只是个demo,你可以根据自己的需要任意的改写。

一看就懂的贪吃蛇游戏(c++实现)相关推荐

  1. bat贪吃蛇游戏代码_C语言写个贪吃蛇游戏

    贪吃蛇是个非常经典的游戏,用C语言来实现也是一个好玩的事情.这个游戏我写完后放在知乎,竟然点赞的人数超级多.我觉得大家喜欢,一个方面是因为写得简单,大家都能看得懂,一个可扩展性还是非常强的. 我试了说 ...

  2. C语言写个贪吃蛇游戏

    贪吃蛇是个非常经典的游戏,用C语言来实现也是一个好玩的事情.这个游戏我写完后放在知乎,竟然点赞的人数超级多.我觉得大家喜欢,一个方面是因为写得简单,大家都能看得懂,一个可扩展性还是非常强的. 我试了说 ...

  3. php 实现贪吃蛇游戏,C++实现简单贪吃蛇游戏

    我大概在一个多月前把自己上学期写的c代码的贪吃蛇游戏push到csdn上,并且说c风格的贪吃蛇写起来有些麻烦(贪吃蛇游戏的c语言实现),准备用面向对象的c++再写一遍.现在我们专业恰好刚教完了c++, ...

  4. x x x x c程序语言,C语言写个贪吃蛇游戏

    贪吃蛇是个非常经典的游戏,用C语言来实现也是一个好玩的事情.这个游戏我写完后放在知乎,竟然点赞的人数超级多.我觉得大家喜欢,一个方面是因为写得简单,大家都能看得懂,一个可扩展性还是非常强的. 我试了说 ...

  5. python60行绘图程序_不敢相信,60行python代码就写出了贪吃蛇游戏

    通过写游戏玩编程是一个非常有趣的事,网上用Python写贪吃蛇的代码很多,大部分都用类来写的,比较复杂.今天看到一个非常简洁的贪吃蛇游戏代码,只有60几行,非常适合小白上手,而且思路极其清晰,赶紧分享 ...

  6. 贪吃蛇c语言课程设计报告下载,c语言课程设计-贪吃蛇游戏

    c语言课程设计-贪吃蛇游戏 C 语言课程设计 1 山东交通学院 C 语言课程设计 贪吃蛇游戏 院(系)别 交通与物流工程学院 班 级 物联 131 学 号 130516122 姓 名 王赛 指导教师 ...

  7. 好玩的c语言编程游戏,C语言写个贪吃蛇游戏

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 C语言写个贪吃蛇游戏 贪吃蛇是个非常经典的游戏,用C语言来实现也是一个好玩的事情.这个游戏我写完后放在知乎,竟然点赞的人数超级多.我觉得大家喜欢,一个方面 ...

  8. 贪吃蛇大作战代码java,贪吃蛇游戏,贪吃蛇java游戏代码讲解

    贪吃蛇游戏,贪吃蛇java游戏代码讲解 来源:互联网 作者:佚名 时间:2020-06-06 贪吃蛇源代码.txt这世界上除了我谁都没资格陪在你身边. 听着,我允许你喜欢我.除了白头偕老,我们... ...

  9. 用C++语言实现贪吃蛇游戏

    最近更了个新的关于用C/C++写贪吃蛇的blog,感觉那个帮助会更大些,这篇中用DirectX技术不适合刚开始试着写游戏的同学,传送:https://blog.csdn.net/weixin_3781 ...

最新文章

  1. C# 枚举中的位运算
  2. CCNA 之 三 TCP/IP 及 子网划分
  3. ASP.NET 配置文件的层次和继承关系
  4. 非递归遍历N-ary树Java实现
  5. 在Fedora8上安装MySQL5.0.45的过程
  6. swoole使用 常用案例
  7. 华为员工“削尖脑袋”想进荣耀!网友也可以放心了,荣耀产品售后不受影响...
  8. linxu /proc/stat 文件
  9. 《面向模式的软件体系结构2-用于并发和网络化对象模式》读书笔记(10)--- 接受器 - 连接器...
  10. 使c语言程序变成流程图的软件6,下载_AutoFlowchart(C语言流程图生成器) V3.5.3 英文版_6z6z下载站...
  11. python画散点图
  12. php评论表情包怎么引入,纯代码实现WordPress添加评论表情(心情)的教程
  13. JDK与JRE的区别
  14. smart检测指标详解
  15. bat脚本打开cmd执行命令
  16. jupyter代码字体大小_Jupyter Notebook 更改字体、字体大小、行高
  17. <hr> 标签:定义水平线
  18. 生产者消费者的几种写法
  19. 如何在生产环境mysql删除亿万级数据解并且不影响数据库主从延迟的解决方案
  20. 如何解决模具折弯尺寸不稳定?

热门文章

  1. 音乐制作编曲工具FL Studio 20高清视频教程
  2. nodejs安装weinre 及移动端调试网页
  3. HtmlUnit的简单例子
  4. 思科的服务器困局:投资增长,还是退出?
  5. java.util.Optional
  6. 基本数据类型引用数据类型
  7. element-plus中el-dialog导致props报错问题解决
  8. 阿里云 SLB示例配置
  9. 一般迭代法与steffensen迭代法matlab实现
  10. -1-6 java 异常简单介绍 java异常 异常体系 Throwable 分类 throws和throw 异常处理 自定义异常...