00. 目录

文章目录

  • 00. 目录
  • 01. 开发背景
  • 02. 功能介绍
  • 03. 欢迎界面设计
    • 3.1 常用终端控制函数
    • 3.2 设置文本颜色函数
    • 3.3 设置光标位置函数
    • 3.4 绘制字符画(蛇)
    • 3.5 欢迎界面函数
  • 04. 游戏帮助界面设计
  • 05. 退出游戏实现
  • 06. 附录

01. 开发背景

​ 贪吃蛇起源于西方,来自于蛇骗夏娃和亚当偷吃禁果的神话。人们为了说明蛇的一个“贪”字,开发出了贪吃蛇游戏。本公开课使用C语言开发一个贪吃蛇游戏。

​ 贪吃蛇最初为人们所知的是诺基亚手机附带的一个小游戏,它伴随着诺基亚手机走向世界。现在的贪吃蛇出现了许多衍生版本,并被移植到各种平台上。

通过本案例的学习,大家可以学到:

  • Visual Studio 2017开发环境

  • C语言中的三大结构和函数

  • C语言中动态内存申请和释放

  • C语言中文件基本操作

  • C语言中的简单单向链表

  • 控制终端基本设置和监听按键

  • C语言简单游戏开发流程

  • C语言简单游戏开发调试技巧

02. 功能介绍

​ 贪吃蛇的游戏规则也很简单,具体为:蛇出现在封闭的空间中,同时在地图上会随机出现食物,玩家通过键盘上的上下左右方向键来控制蛇的前进方向。蛇头撞到食物,则食物消失,表示被蛇吃掉了,蛇身增加一节,增加玩家的得分。接着又随机出现一个食物,等待蛇来吃。如果蛇在前进的过程中撞到墙或者咬到蛇身或者玩家按下ESC键,则游戏退出。

项目演示

03. 欢迎界面设计

欢迎界面如下

3.1 常用终端控制函数

SetConsoleTextAttribute函数介绍

BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput,WORD wAttributes);
功能:设置控制台文本属性(颜色),可以设置前景色FOREGROUND(文本颜色)和背景色BACKGROUND

SetConsoleTextAttribute官方文档介绍

参考示例:

HANDLE hOut;hOut = GetStdHandle(STD_OUTPUT_HANDLE);         /* 获取标注输出句柄 */
SetConsoleTextAttribute(hOut, FOREGROUND_BLUE); /* 设置控制台颜色,前景色为蓝色*/
SetConsoleTextAttribute(hOut, BACKGROUND_RED);  /* 背景色为红色 */

SetConsoleCursorPosition函数介绍

BOOL SetConsoleCursorPosition(HANDLE hConsoleOutput, COORD  dwCursorPosition);
功能:设置控制台光标坐标

SetConsoleCursorPosition官方文档介绍

参考示例:

COORD pos = {x, y};/* x是横坐标 y是纵坐标 */
HANDLE hOut;hOut = GetStdHandle(STD_OUTPUT_HANDLE); /* 获取标注输出句柄 */
SetConsoleCursorPosition(hOut,pos);     /* 设置控制台光标坐标(设备句柄, 光标坐标) */

3.2 设置文本颜色函数

//设置终端字体颜色
int setColor(int c)
{//GetStdHandle: 获取指定的标准设备的句柄//STD_OUTPUT_HANDLE 标准输出句柄//c 颜色值SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);return 0;
}

十进制颜色对照表

3.3 设置光标位置函数

//设置光标的坐标
int gotoXY(int x, int y)
{COORD c;//设置横坐标c.X = x;//设置纵坐标c.Y = y;//设置光标的位置SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);return 0;
}

3.4 绘制字符画(蛇)

参考代码:

//绘制字符画 --蛇
int printSnake(void)
{//清屏system("cls");gotoXY(35, 1);setColor(6);printf("/^\\/^\\");      //蛇眼睛gotoXY(34, 2);printf("|__|  O|");      //蛇眼睛gotoXY(33, 2);setColor(2);printf("_");gotoXY(25, 3);setColor(12);printf("\\/");        //蛇信gotoXY(31, 3);setColor(2);printf("/");gotoXY(37, 3);setColor(6);printf(" \\_/");        //蛇眼睛gotoXY(41, 3);setColor(10);printf(" \\");gotoXY(26, 4);setColor(12);printf("\\____");      //舌头gotoXY(32, 4);printf("_________/");gotoXY(31, 4);setColor(2);printf("|");gotoXY(43, 4);setColor(10);printf("\\");gotoXY(32, 5);setColor(2);printf("\\_______");    //蛇嘴gotoXY(44, 5);setColor(10);printf("\\");gotoXY(39, 6);printf("|     |                  \\");  //下面都是画蛇身gotoXY(38, 7);printf("/      /                   \\");gotoXY(37, 8);printf("/      /                    \\ \\");gotoXY(35, 9);printf("/      /                       \\ \\");gotoXY(34, 10);printf("/     /                          \\  \\");gotoXY(33, 11);printf("/     /             _----_         \\   \\");gotoXY(32, 12);printf("/     /           _-~      ~-_         |  |");gotoXY(31, 13);printf("(      (        _-~    _--_    ~-_     _/  |");gotoXY(32, 14);printf("\\     ~-____-~    _-~    ~-_    ~-_-~    /");gotoXY(33, 15);printf("~-_           _-~          ~-_       _-~");gotoXY(35, 16);printf("~--______-~                ~-___-~");return 0;
}

测试代码如下:

int main()
{//设置控制台的宽高system("mode con cols=100 lines=30");printSnake();system("pause");return 0;
}

测试效果如下:

3.5 欢迎界面函数

界面设计分析

参考代码:

//欢迎界面
int welcomGame(void)
{int i;int j;int n = 0;//绘制字符画蛇printSnake();//输出文字setColor(11);gotoXY(45, 18);printf("贪吃蛇游戏");setColor(14);//边框范围20--26行  27--74列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("|");}}}setColor(12);gotoXY(35, 22);printf("1. 开始游戏");gotoXY(55, 22);printf("2. 游戏说明");gotoXY(35, 24);printf("3. 退出游戏");gotoXY(27, 27);printf("请选择[1 2 3]: ");scanf("%d", &n);//清空换行符getchar();return n;
}

主函数参考代码如下:

int main()
{int choice;//设置控制台的宽高system("mode con cols=100 lines=30");while (1){choice = welcomGame();switch (choice){//开始游戏case 1:printf("开始游戏");break;//游戏说明case 2:printf("游戏说明");break;//退出游戏case 3:break;default:setColor(12);gotoXY(45, 28);printf("请做出有效选择[1~3]");//输入任意键getchar();}}system("pause");return 0;
}

04. 游戏帮助界面设计

游戏说明模块如下:

游戏帮助界面参考代码

//游戏帮助界面
int aboutGame(void)
{int i = 0;int j = 0;//清屏system("cls");setColor(13);gotoXY(44, 3);printf("游戏说明");setColor(2);//画出边框//6~22行   20~75列for (i = 6; i <= 22; i++){for (j = 20; j <= 75; j++){gotoXY(j, i);//画上下边框if (i == 6 || i == 22){printf("=");}else if (j == 20 || j == 75){printf("||");}}}setColor(3);gotoXY(30, 8);printf("★ 1.不能撞到墙壁,不能咬到自己");setColor(5);gotoXY(30, 11);printf("★ 2.F1加速前进,F2减速前进");setColor(11);gotoXY(30, 14);printf("★ 3.使用空格暂停游戏和继续游戏");setColor(13);gotoXY(30, 17);printf("★ 4.使用方向键控制前进的方向");setColor(14);gotoXY(30, 20);printf("★ 5.按下ESC键退出游戏");setColor(12);gotoXY(22, 24);printf("按下回车键返回主界面...");getchar();return 0;
}

主函数代码修改如下:

int main()
{int choice;//设置控制台的宽高system("mode con cols=100 lines=30");while (1){choice = welcomGame();switch (choice){//开始游戏case 1:printf("开始游戏");break;//游戏说明case 2:aboutGame();break;//退出游戏case 3:break;default:setColor(12);gotoXY(45, 28);printf("请做出有效选择[1~3]");//输入任意键getchar();}}system("pause");return 0;
}

05. 退出游戏实现

在主菜单中, 当用户选择3的时候,直接退出游戏

在主函数case 3中添加如下代码:

//退出游戏
case 3:exit(0);break;

06. 附录

下一篇:【C语言项目】贪吃蛇游戏(下)

大学生C/C++开发QQ交流群

【C语言项目】贪吃蛇游戏(上)相关推荐

  1. linux贪吃蛇c程序,Linux环境下C语言实现贪吃蛇游戏

    Linux环境下C语言实现贪吃蛇游戏 [liul@test snake]$ more snake.c #include #include #include #include #include #def ...

  2. 贪吃蛇c语言经典程序下载,C语言实现贪吃蛇游戏(单人版)

    本文实例为大家分享了C语言实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 相比于第一个:贪吃蛇游戏,功能更加丰富 #include"snake.h" //蛇的移动 void m ...

  3. c语言贪吃蛇游戏的论文,基于c语言的贪吃蛇游戏论文.doc

    基于c语言的贪吃蛇游戏论文 第 PAGE \* Arabic \* MERGEFORMAT 15 页第 PAGE \* Arabic \* MERGEFORMAT 15 页 学校代码 学号 分 类 号 ...

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

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

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

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

  6. 纯C语言实现贪吃蛇游戏(VC6.0)

    转自C语言网 今天笔者为大家展示C语言写的贪吃蛇游戏,让大家玩一玩自己写的游戏~ 是纯C语言哦~VC6.0开发 无问题 首先,开始界面: 游戏界面如下: 代码如下: 笔者VC6.0下编写,测试无问题, ...

  7. c语言贪吃蛇按键,C语言实现贪吃蛇游戏(命令行)

    这是一个纯C语言写的贪吃蛇游戏,供大家参考,具体内容如下 #include #include #include #include #include #define SNAKE_LENGTH 100// ...

  8. Java项目:贪吃蛇游戏(java+swing)

    源码获取:博客首页 "资源" 里下载! 功能简介: 贪吃蛇游戏 大嘴鱼洁面类.完成大嘴鱼的界面的绘制: /*** 大嘴鱼洁面类.完成大嘴鱼的界面的绘制.*/ public clas ...

  9. C语言之贪吃蛇游戏源码

    贪吃蛇游戏是我编程以来做的第一个游戏,很兴奋,我记得当时我一直最求代码数量的最小化,即以最少的代码实现功能,有的时候,对换行.括号之类的都下手,呵呵,现在想想都想笑,那些年让我纠结的代码门,你们现在还 ...

最新文章

  1. 全景分割:CVPR2019论文解析
  2. html编写app页面代码,编写html页面代码需要了解的--综合编
  3. 高仿腾讯QQ Xplan(X计划)的H5页面(2):动画控制
  4. 「数据库系列一」为什么要用数据库?
  5. Zookeeper基于Java 访问
  6. c#类和结构体的关系
  7. matlab imcrop 对应python函数_Python精讲Numpy基础,大牛笔记详细解释
  8. 大数据之-Hadoop3.x_MapReduce_MapTask源码解析---大数据之hadoop3.x工作笔记0126
  9. alert中文信息时乱码,html页面和script标签中均已设置为utf-8依然乱码
  10. H.264官方软件JM源代码简单分析-解码器ldecod
  11. Python数据结构与算法(2.1)——线性表的基本概念
  12. 实用~AVAide MP4 Converter for mac - MP4转换器
  13. logisim数据选择器_基于Logisim的CRC编码电路实现.pdf
  14. linux qt触摸屏配置,QT触摸屏的实现
  15. 小巧的网页聊天工具提供-GOFLY在线客服系统
  16. APP在推广之渠道为王(一 )
  17. 2.1微信小程序简介
  18. Win7 + VirtualBox 安装 MacOS X 10.9 Mavericks 操作步骤
  19. 如何在C加加的面向对象写游戏 我的世界
  20. 懂车帝:2018汽车行业大数据报告(附下载)

热门文章

  1. html input type=file 文件上传; 图片上传; 图片闪烁
  2. 一些常用的基本的liunx命令:
  3. signature=07d53df34494bb51485d7f5988447796,android – Progaurd问题“警告:忽略一个匿名内部类的InnerClasses属性”...
  4. Java黑皮书课后题第8章:**8.12(金融应用:计算税款)使用数组重写程序清单3-5,每个纳税人身份都有6种税率。每种税率都应用在某个特定范围内的可征税收入
  5. 创建AOP静态代理(上篇)
  6. 【旧文章搬运】Windows内核常见数据结构(线程相关)
  7. .net core 一个避免跨站请求的中间件
  8. Verilog MIPS32 CPU(一)-- PC寄存器
  9. 【转】如何缩进你的代码?
  10. ORACLE----触发器,存储过程及JOB