【C语言】贪吃蛇游戏的实现(一)

article/2025/10/25 15:07:24

(注意:本代码是在VC++6.0环境下编译的,在其他环境如codeblocks下运行可能会产生意想不到的问题,请尽量使用VC。至于为什么要使用VC编译,哦,我亲爱的朋友,这只有上帝才知道)

最近由于小创需要,捣鼓了一个贪吃蛇游戏,系统由纯C语言开发,VC++6.0编译通过,具体的运行效果如下:

略显简陋的开始界面,图案是我一点一点拼的,因为有\需要转义,所以对齐也花了不少时间,足够繁杂和无聊的工作。

游戏界面如图所示,左侧方框是地图,菱形组成的线是蛇,红色圆点是食物,吃到加分。

游戏结束界面可以选择再来一局或者退出。

系统源码链接:https://download.csdn.net/download/includei/10878930

GitHub:https://github.com/testAccount1024/snake

为了给以后自己留个参考,记录心得体会,也希望能对做相同项目的人有所帮助或启发,我把这个游戏的开发过程整理成博客发布,陆续更新,不足之处恳请批评斧正。

 

好了,让我们进入正题。

贪吃蛇游戏是一款经典的益智游戏,有PC和手机等多平台版本。既简单又耐玩。该游戏通过控制蛇头方向吃食物,从而使得蛇变得越来越长。它的基本规则是:一条蛇出现在封闭空间中,空间中随机出现一个食物,通过键盘上下左右方向键控制蛇前进方向。蛇头撞到食物,食物消失,蛇身体增长一节,累计得分,刷新食物。如果蛇在前进过程中撞到墙或自己身体,则游戏失败。

我们可以简单地画出游戏的大概流程图:

贪吃蛇游戏分为四个界面,包括欢迎界面,游戏界面,游戏说明和游戏结束界面。实现的主要功能有:

1.字符图案装饰。
           2.绘制游戏地图。
           3.绘制移动的贪吃蛇。
           4.随机绘制食物并且位置不与当前蛇身体重合。
           5.键盘按键控制蛇的前进方向。
           6.不按键时,蛇自动前进。
           7.文件读写,存入和读取最高分。

我们列出为实现各个模块功能所需要的函数:

暂且省略定义,下面依次介绍各个函数的功能,首先说明欢迎界面的函数,因为游戏说明界面其实只是打印字符较为简单,我们也一并列出。为了在窗口内合适位置打印字符,我们需要控制光标的位置,声明gotoxy()函数以实现设置光标位置。

/*设置光标位置
*/
void gotoxy(int x,int y)
{COORD c;c.X=x;c.Y=y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
}

为了让显示的文字色彩多样,我们声明color()函数用于改变文字颜色。

/*文字颜色函数
*/
int color(int c)
{//SetConsoleTextAttribute是API设置控制台窗口字体颜色和背景色的函数SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);        //更改文字颜色return 0;
}

接着声明printsnake()函数用于打印欢迎界面的字符装饰,color(2)设置文字颜色为绿色。

/*字符拼成英文图案
*/
void printsnake()
{color(2);printf("                                                                                         \n");printf("                       __________       ___                                              \n");printf("                      /          \\     / \\ \\    |____      __\\__                     \n");printf("                     /  ________  \\   / ___ \\  _/ __     | |   /                       \n");printf("                     |  |      |__|     _/_   |_|  /    [|] |/                           \n");printf("                     |  |              | | |      /     _|_ \\__/                        \n");printf("                     \\  \\_______        / \\      |___/        ____                    \n");printf("                      \\         \\    ____ ____      ____   __ |  |  ___   ______       \n");printf("                       \\_______  \\   |  |/    \\    /    \\_/ / |  | /  /  /      \\   \n");printf("                               \\  \\  |    ___  \\  / ____   /  |  |/  /  /  ____  \\   \n");printf("                     __        |  |  |   /   \\  \\ | |  |  /   |     /  |  /____\\  |   \n");printf("                    \\  \\_______|  |  |  |    |  | | |__|  |   |     \\  |  ________/   \n");printf("                     \\            /  |  |    |  |  \\       \\  |  |\\  \\  \\  \\____  \n");printf("                      \\__________/   |__|    |__|   \\___/\\__\\ |__| \\__\\  \\______/ \n");	
}

然后我们声明welcometogame()函数绘制菜单选项并通过switch实现选择功能。

/*开始界面
*/
void welcometogame()
{int n;int i,j = 1;gotoxy(43,18);color(11);printf("贪 吃 蛇 游 戏");color(14);          			//黄色边框for (i = 20; i <= 26; i++)   	//输出上下边框┅{for (j = 27; j <= 74; j++)  //输出左右边框┇{gotoxy(j, i);if (i == 20 || i == 26){printf("-");}else if (j == 27 || j == 74){printf("|");}}}color(10);gotoxy(35, 22);printf("1.开始游戏");gotoxy(55, 22);printf("2.游戏说明");gotoxy(35, 24);printf("3.退出游戏");gotoxy(29,27);color(3);printf("请选择[1 2 3]:[ ]\b\b");        //\b为退格,使得光标处于[]中间color(14);scanf("%d", &n);    		//输入选项switch (n){case 1:					//选择开始游戏system("cls");createMap();        //创建地图initsnake();        //初始化蛇身createfood();		//初始化食物keyboardControl();	//控制键盘按钮break;case 2:					//选择游戏说明explation();break;case 3:					//选择退出游戏exit(0);     		//退出游戏break;default:				//输入非1~3之间的选项color(12);gotoxy(40,28);printf("请输入1~3之间的数!");getch();			//输入任意键system("cls");		//清屏printsnake();welcometogame();}
}

游戏说明界面explation()函数实现打印说明文字的功能。

/*游戏说明
*/
void explation()
{int i,j = 1;system("cls");color(15);gotoxy(44,3);printf("游戏说明");color(2);for (i = 6; i <= 22; i++)   //输出上下边框==={for (j = 20; j <= 76; j++)  //输出左右边框||{gotoxy(j, i);if (i == 6 || i == 22) printf("=");else if (j == 20 || j == 75) printf("||");}}color(3);gotoxy(30,8);printf("tip1: 不能撞墙,不能咬到自己");color(10);gotoxy(30,11);printf("tip2: 用↑.↓.←.→分别控制蛇的移动");color(14);gotoxy(30,14);printf("tip3: F1 为加速,F2 为减速");color(11);gotoxy(30,17);printf("tip4: 按空格键暂停游戏,再按空格键继续");color(4);gotoxy(30,20);printf("tip5: Esc :退出游戏");getch();                //按任意键返回主界面system("cls");printsnake();welcometogame();
}

以上便是欢迎界面和游戏说明界面的函数介绍,下一部分内容有空的时候继续更新(最后让我吐槽一下富文本编辑器这谜一样的代码对齐方式)。


http://chatgpt.dhexx.cn/article/RXA3MQZy.shtml

相关文章

C语言贪吃蛇 新手入门(超详细)

贪吃蛇小程序&#xff0c;主要采用C语言描述&#xff0c;采用数组进行数据存储的图形化操作界面&#xff0c;会涉及一点点C 知识&#xff08;特别少的一点点&#xff09;&#xff0c;但是有C语言基础就够用了&#xff0c;编译器&#xff1a;VS2015&#xff0c;会涉及部分库函数…

C语言实现的贪吃蛇(无EasyX,详解)

&#x1f4a6;前言 或许厌倦了枯燥的做题&#xff0c;那就学学贪吃蛇&#xff0c;激发你的学习乐趣吧~ 你将进一步加深对结构体&#xff0c;单链表&#xff0c;函数&#xff0c;循环等基础的理解。 希望对你有所帮助~ 纯C实现的贪吃蛇&#x1f40d; &#x1f4a6;前言&#x1f…

教你如何用C语言做一个简单的贪吃蛇

小时候大家可能都玩过贪吃蛇&#xff0c;但有没有想过自己做一个出来玩玩看。今天我们就教大家用C语言做一个简单的贪吃蛇游戏。这里没有采用图形界面去做&#xff0c;而是采用win32控制台。 首先&#xff0c;先把做好的游戏初始界面和游戏截图先展示一下。 游戏初始界面如图&a…

C语言实现贪吃蛇(简易)

文章目录 目录 文章目录 前言 一、游戏功能和效果 1.游戏功能 2.游戏效果 二. 游戏初步实现 1.确定地图大小 2.创建蛇对象&#xff0c;食物对象 3.初始化蛇 4.生成随机食物 5.画蛇 6.画食物 7. 游戏内移动控制 1.当按上下左右时移动方向改变 。 2.开始游戏时的默认方向 8.判…

C语言贪吃蛇小游戏,贪吃蛇C语言代码实现大全

一、C语言贪吃蛇代码实现前言 设计贪吃蛇游戏的主要目的是让大家夯实C语言基础&#xff0c;训练编程思维&#xff0c;培养解决问题的思路&#xff0c;领略多姿多彩的C语言。 贪吃蛇是非常经典的一款游戏&#xff0c;本次我们模拟在控制台实现贪吃蛇游戏&#xff0c;也就是实现…

C语言实现贪吃蛇[内附详细步骤]

C语言贪吃蛇项目 今天给分享一下使用C语言写个贪吃蛇小游戏&#xff0c;主要包含以下10部分内容&#xff1a; 1、windows光标定位与隐藏 2、欢迎界面 3、打印围墙 4、产生食物 5、初始化蛇身 6、响应按键 7、蛇身运动 8、碰撞检测 9、结束界面 10、程序运行 windows…

C语言实现贪吃蛇小游戏!(超简单详细)详细思路+源码分享

贪吃蛇&#xff08;也叫做贪食蛇&#xff09;游戏是一款休闲益智类游戏&#xff0c;有PC和手机等多平台版本。既简单又耐玩。该游戏通过控制蛇头方向吃蛋&#xff0c;从而使得蛇变得越来越长。 我们的今天的目标就是&#xff1a;用C语言来实现一个贪吃蛇项目&#xff0c;也不用…

C语言 贪吃蛇

基于C语言编写的贪吃蛇 编写环境&#xff1a;VS2019x86 这是一个基于C语言链表开发的贪吃蛇游戏 其实贪吃蛇游戏要解决的主要问题就是 1、这个游戏的基本组成元素和数据结构 2、如何初始化贪吃蛇并正常行走 3、如何判断事件发生 代码中运用到了键盘虚拟键判断、终端窗口大小的…

游戏贪吃蛇(c语言)

游戏贪吃蛇&#xff08;c语言&#xff09; 一、项目背景二、设计目的三、项目功能需求1、初始化游戏2、控制蛇的运行轨迹3、控制蛇的长度4、控制食物生成5、计算分数6、结束条件 四、系统的功能结构图五、总体设计1、初始化模块2、游戏控制模块3、运行控制模块4、食物生成模块 …

C语言实现贪吃蛇(详细版)

一、需要掌握的知识&#xff1a; C语言基础语法&#xff08;结构体、指针、链表&#xff09;、<windows.h>库、<stdlib.h>库、<time.h>库中的一些函数&#xff08;不需要额外学习&#xff0c;本文后面会讲贪吃蛇需要用到的相关函数&#xff09; 由于作者水平…

贪吃蛇(C语言实现)

文章目录 游戏说明游戏效果展示游戏代码游戏代码详解游戏框架构建隐藏光标光标跳转初始化界面颜色设置初始化蛇随机生成食物打印蛇与覆盖蛇移动蛇游戏主体逻辑函数执行按键判断得分与结束从文件读取最高分更新最高分到文件主函数 游戏说明 游戏界面当中没有打印相关的按键说明…

SDRAM控制器(初始化)

SDRAM控制器&#xff08;初始化&#xff09; 文章目录 SDRAM控制器&#xff08;初始化&#xff09;初始化模块时序逻辑图代码仿真结果 初始化模块 SDRAM 在上电之后&#xff0c;执行正常操作之前需要被初始化&#xff0c;实际上就是对上文提到的SDRAM 内部逻辑控制单元进行初始…

SDRAM 控制器设计基本完结

项目可以拓展的地方&#xff1a; 1、接口为AXI 2、接口为AXI与AXI DMA 交互 2、优化读写时序&#xff0c;使得SDRAM输出效率最大&#xff1b; 总结&#xff1a; 项目不足&#xff1a;没有进行效率的优化&#xff0c;无地址映射&#xff0c;无外接交互接口&#xff0c;功能单一…

SDRAM读写控制

SDRAM读写控制器&#xff0c;这里分为三个部分&#xff0c;分别是SDRAM的基本操作实现&#xff0c;SDRAM控制器&#xff0c;封装成FIFO,以方便使用。 一、SDRAM的基本操作&#xff1a;初始化模块、自动刷新模块、写操作模块、读操作模块、SDRAM仲裁模块&#xff0c;顶层模块。 …

SDRAM 控制器(二)——初始化模块

1、初始化模块 SDRAM 的初始化是芯片上电后必须进行的一项操作&#xff0c;只有进行了初始化操作的 SDRAM 芯片才可被正常使用。SDRAM 的初始化是一套预先定义好的流程&#xff0c;除此之外的其 他操作会导致 SDRAM 出现不可预知的后果。 初始化时序图&#xff1a; CK&#xf…

SDRAM详细介绍

概念介绍&#xff1a; SDRAM&#xff1a;Synchronous Dynamic Random Access Memory&#xff0c;同步动态随机存储器。同步是指其时钟频率和CPU前端总线的系统时钟相同&#xff0c;并且内部命令的发送与数据的传输都以它为基准&#xff1b;动态是指存储阵列需要不断的刷新来保证…

sdram简易控制器设计

耗时一周&#xff0c;终于完成sdram简易控制器的所有代码设计&#xff0c;其中感谢开源骚客 – 邓堪文老师在b站发布的相关视频学习教材&#xff1b;其中仿真模块及所使用到的sdram仿真文件来源于开源骚客&#xff1b; 因为时间较为紧迫&#xff0c;其中就不做代码的一些注释&…

基于FPGA的SDRAM控制器设计(一)

基于FPGA的SDRAM控制器设计&#xff08;一&#xff09; 1. SDRAM控制器整体框架2.UART_RX模块3.UART_TX模块4. RX与TX模块的整合5.需要注意的问题6.代码7.参考资料 1. SDRAM控制器整体框架 图1.1整体框架 PC端通过串口模块UART_RX发送读写命令以及数据到Cmd_encode模块&#xf…

基于FPGA的SDRAM控制器设计(1)

基于FPGA的SDRAM初始化配置 SDRAM简述SDRAM的引脚及作用SDRAM初始化时序控制SDRAM上电时序代码SDRAM测试模块的代码仿真测试结果参考文献总结 SDRAM简述 SDRAM&#xff08; Synchronous Dynamic Random Access Memory&#xff09;&#xff0c;同步动态随机存储器。同步是指 Me…

FPGA进阶(3):SDRAM读写控制器的设计与验证

文章目录 第50讲&#xff1a;SDRAM读写控制器的设计与验证理论部分设计与实现1. sdram_ctrlsdram_initsdram_a_refsdram_writesdram_readsdram_arbitsdram_ctrl 2. sdram_topfifo_ctrlsdram_top 3. uart_sdramuart_rxuart_txfifo_readuart_sdram 第50讲&#xff1a;SDRAM读写控…