贪吃蛇游戏要求:

一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被吃掉,这时蛇的身体长一节,同时计1分;接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉(蛇头撞到自己的身体)游戏结束。 

数据结构:

单链表,并使用头插法

编译工具

Dev c++

ps:不同的编译工具可能导致有些代码无故报错,但编写贪吃蛇的思想是一样的


贪吃蛇的核心步骤:

1.如何让贪吃蛇移动:

(①让蛇自行前进。②改变蛇的移动方向)

①如何让蛇自行移动

我们就需要一个移动光标的函数,这个函数的名字可以自行创建,但函数里面必须要包含以下内容(详情请看我举例,这里我把我的光标移动函数命名为gotoxy( )  )。在创建光标函数的时候我们需要引入一个头文件  #include<windows.h>。

当我们一个c语言 编译 运行 成功后,将会打开一个窗口,这时水平方向表示x轴,垂直方向表示y轴。但我们需要注意的是 x轴,y轴 的起始位置从0开始,所以在我的样例中,你会看见 pos.X = x-1; pos.Y = y-1; 这里我将x轴,y轴 的起始位置变成了从1开始。但如果你想让你的x轴,y轴 的起始位置从0开始,则需要将 pos.X = x; pos.Y = y;

#include<stdio.h>
#include<windows.h>
void gotoxy(int x,int y){             //用于移动光标
COORD pos;
pos.X = x-1;    //起始位置从1开始
pos.Y = y-1;
/*
pos.X = x;             //起始位置从0开始
pos.Y = y;
*/
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
int main(){gotoxy(50,10);printf("*********");gotoxy(50,30);printf("*********");return 0;
}

运行如图所示:

那如何让蛇自行移动呢?

首先我们需要定义蛇的结构,所以我们适用结构体,来定义:

typedef struct snake{int x,y;struct snake *SnakeNext;}SNAKE,*Snake;

ps:在这篇文章中我主要的还是讲解,贪吃蛇的原理实现,代码可以比较少,但是在文章最后我会将我的源码分享出来。

如何让蛇移动:

在蛇移动之前,我们可以通过光标函数 gotoxy(),将蛇的初始化状态打印出来。

假设蛇的初始方向是 向左 那么这时我们只需要将蛇的蛇头的坐标变为向左后的坐标,这时蛇头的坐标已经变成了新的坐标。然后我们只需要一个循环将蛇的第一节身体变为蛇头以前的坐标,第二节身体变为第一节身体以前的坐标,然后依次类推。然后在用 上面提及到的光标函数 gotoxy(),将蛇依次打印出来。

那么这时我们会产生一个问题,随着蛇的移动,蛇的身体在运行窗口中可能会变得越来越长,这个不是因为 蛇的单链表中插入了数据,而是我们在蛇的移动中没有将蛇的尾部打印坐标对应的图案掩盖掉,这时我们只需要通过当蛇移动时,将蛇尾的坐标保留下来,然后在利用 光标函数 在这里打印一个 空格 从而掩盖蛇原先的蛇尾,每次移动我们都需要将蛇尾用空格进行掩盖。从而达到蛇移动的现象。

但是在蛇的运行过程中,我们会发现一个问题,就时蛇的移动速度太快了,那么这时我们该如何处理这个问题呢?

这时我们就需要用到一个新的函数 Sleep() 需要引入#include<windows.h>

ps:Sleep()函数的简单介绍

功 能: 执行挂起一段时间 (简单的说:当程序运行到Sleep()函数这里时,程序将暂停多长时间然后在继续运行)

eg:  Sleep(50)  表示的是程序将暂停50毫秒

这个时候我们就引入一个问题,Sleep()函数,在贪吃蛇中有什么作用呢?

首先我们知道Sleep()函数可以将程序挂起,来控制程序的运行时间。所以我们可以通过这个函数来控制蛇的移动速度。为什么可以控制蛇的速度呢?其本质还是控制打印蛇的速度。

ps:通过Sleep()函数,那么我们就可以为游戏设置 游戏难度 的功能。

②如何让蛇改变移动方向

在之前,我们需要了解两个函数,kbhit(),getch()。

函数名:kbhit()

功能及返回值: 检查当前是否有键盘输入,若有则返回一个非0值,否则返回0。

用 法:int kbhit(void);

C++语言包含头文件: include <conio.h>。

C语言不需包含额外头文件。

在VC++6.0下为_kbhit()

功能及返回值同上;

函数名:getch():

所在头文件:conio.h

函数用途:从控制台读取一个字符,但不显示在屏幕上

函数原型:int getch(void)

返回值:读取的字符

例如:

char ch;或int ch;

getch();或ch=getch();

用getch();会等待你按下任意键,再继续执行下面的语句;

用ch=getch();会等待你按下任意键之后,把该键字符所对应的ASCII码赋给ch,再执行下面的语句。

通过kbhit(),getch()这两个函数我们就可以用来控制蛇的移动。

列如 我们通过W A S D 来控制方向,当我们按下W的时候这时我们只需要改变 蛇头 的坐标,然后重复 蛇自行移动 的步骤从而使蛇移动。

那么当我们什么都不按下的时候,怎么可以让蛇自行移动呢?

ps: 我们可以将向上,向下,向左,向右,分别写一个函数,然后将其封装起来,然后在用一个死循环即可。

最后文章最后我将附上源码,供大家参考。

2.食物

(①产生随机食物②蛇吃食物)

①产生随机食物:

需要srand() 和  rand()函数

  • 举例
include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main(){srand((unsigned)time(NULL));for(int i=0;i<5;i++){//srand((unsigned)time(NULL)); 只能调用一次,否者会使产生的随机数相同printf("%d  ",rand()%5+1);}return 0;
}

这样产生的随机数就是1-5之间的随机函数

这二个函数的工作过程如下:
1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535;
2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)
3) 根据需要多次调用rand(),从而不间断地得到新的随机数;
4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。

②蛇吃食物:

当蛇头按照它的运行轨迹下一个坐标将要到达食物的坐标时我们利用链表的头插法将食物的坐标插入进链表中,这时我们就不能将蛇的尾部进行覆盖。

3.地图

利用光标函数,进行地图的打印。

4.死亡

当蛇撞到自己或者墙时表示死亡,我们可以用 exit(0) 来强制中断程序。需要头文件#include<stdlib.h>

5.游戏背景颜色

需要导入头文件#include<stdlib.h>

system("color  XY"); 中只需要改变X Y 的值就可以改变游戏背景的颜色。

项目地址:

https://github.com/chenxinfan1998/snake

游戏GIF图展示

闯关模式:

休闲模式(可以选择地图,有三种地图,四种难度模式):

小白用C语言编写贪吃蛇相关推荐

  1. 用C语言编写贪吃蛇项目描述,刚学C语言,想写一个贪吃蛇的代码

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include typedef struct snake { int a; int b; stru ...

  2. c语言编写贪吃蛇代码无错,刚学C语言,想写一个贪吃蛇的代码

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include typedef struct snake { int a; int b; stru ...

  3. c语言编写贪吃蛇难点解析,刚学C语言,想写一个贪吃蛇的代码

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include typedef struct snake { int a; int b; stru ...

  4. 如何用c 语言编写贪吃蛇,刚学C语言,想写一个贪吃蛇的代码

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include typedef struct snake { int a; int b; stru ...

  5. 用C语言编写贪吃蛇代码(难度可选)

    /********************************************************* ********************贪吃蛇(难道可选)************ ...

  6. c语言安卓贪吃蛇代码下载,C语言贪吃蛇代码

    c语言编写贪吃蛇源代码,简单易懂,文件为VC源代码.如果你正在学习c语言,就来下载吧.很经典的 C语言贪吃蛇代码部分 #include #include #include#include #defin ...

  7. 【笔记】用vs2017 c语言写 贪吃蛇 小游戏

    目录 文章目录 前言 一.贪吃蛇游戏 设计逻辑 二.详细介绍 1.设置界面(界面大小,背景颜色) 2.设置贪吃蛇的身体并显示 3.使之能够移动并能够穿墙 4.添加食物并让蛇吃掉 5.设置背景音乐 完整 ...

  8. c语言制作贪吃小白入门,小白入门——easyx界面版“贪吃蛇”的C语言实现(详细)...

    小白入门--easyx界面版"贪吃蛇"的C语言实现(详细) 作者:顽石 前言:C语言初学者都是在控制台上开发一些小游戏什么,由于没有界面(比如图片.音乐,不能做出拥有自己风格的程序 ...

  9. C语言与C++基础编写贪吃蛇项目1

    C语言与C++基础编写贪吃蛇项目1 第一阶段: 简单的移动的贪吃蛇编写. 小白编写,勿喷. 一.总体项目功能: 1.添加背景音乐或者动作音效 2.有欢迎界面,游戏选项等界面 3.地图范围内有障碍物,可 ...

  10. c语言mfc写贪吃蛇,手把手教你用MFC编写贪吃蛇.doc

    手把手教你用MFC编写贪吃蛇 贪吃蛇是一款经典的小游戏,它玩法非常简单,对于MFC的初学者来说,也是一个非常好的练手项目.这篇文章,将从项目创建开始来一步一步教你如何制作一个贪吃蛇小游戏.我用的是vi ...

最新文章

  1. pandas使用query函数基于dataframe字符串数据列中字符串的长度筛选dataframe的数据行(specific column string length)
  2. 学python用什么软件开发-5款Python程序员高频使用开发工具推荐
  3. 【opencv】14.cv::cvtColor函数转换颜色空间时使用CV_RGB2BGR与CV_BGR2RGB结果一样的原因
  4. sess.run接收返回值得变量和sess.run函数內的tensor型变量命名注意不能一致,影响迭代,产生报错:Can not convert a ndarray into a Tensor
  5. 多线程(6)线程同步
  6. java调用c so动态库_jni 调用C动态库dll/so
  7. 周鸿祎在美参加的信息安全大会已有两人确诊新冠肺炎
  8. 6.高级Magento模型EAV
  9. 获取URl后的查询参数
  10. linux 终端复制剪贴板,命令行剪贴板复制和粘贴工具?
  11. win10手动安装打印机驱动
  12. uni-app 中使用背景图片
  13. android自动照相机2.0,Camera2.0下载
  14. ICLOUD储存空间要升级吗_苹果iCloud照片恢复步骤
  15. java主机哪儿好_java虚拟主机哪个好,香港java虚拟主机哪里有!
  16. 艾宾浩斯遗忘曲线PHP,艾宾浩斯遗忘曲线计划表打印版
  17. html怎么设置加qq,qq密友 怎么把QQ好友加为密友啊?
  18. 联想机架式服务器安装文档,联想智能超算平台LiCO安装手册.docx
  19. FPGA : 学习交流的网站和社区
  20. K210实现多色块检测功能

热门文章

  1. 商城类小程序,拼团、砍价、秒杀、预售,一套源码全搞定
  2. 365锦鲤助手修改版,砍价小程序
  3. 【推荐收藏】1000+ Python第三方库大合集
  4. matlab 数字水印攻击 jpeg压缩,基于DFT的数字水印技术研究及模拟.doc
  5. Nopi的学习笔记(C#篇)
  6. 【2022-01-06】JS逆向之QCC请求头参数
  7. python 视频保存_通过Python保存央视频某主题的视频地址
  8. jmeter TCP接口压力测试
  9. 法律咨询小程序开发制作(律师事务所小程序)
  10. 【驱动安装及keil使用】win10 stm32 stlink驱动安装,检测不到芯片,下载不了程序