【C语言项目】贪吃蛇游戏(上)

时间:2022-09-19 11:44:18

00. 目录

01. 开发背景

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

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

通过本公开课的学习,大家可以学到:

  • Visual Studio 2017开发环境

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

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

  • C语言中文件基本操作

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

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

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

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

02. 功能介绍

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

【C语言项目】贪吃蛇游戏(上)

项目演示

【C语言项目】贪吃蛇游戏(上)

03. 欢迎界面设计

欢迎界面如下

【C语言项目】贪吃蛇游戏(上)

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;
}

十进制颜色对照表

【C语言项目】贪吃蛇游戏(上)

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;
}

测试效果如下:

【C语言项目】贪吃蛇游戏(上)

3.5 欢迎界面函数

界面设计分析

【C语言项目】贪吃蛇游戏(上)

参考代码:

//欢迎界面
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. 游戏帮助界面设计

游戏说明模块如下:

【C语言项目】贪吃蛇游戏(上)

游戏帮助界面参考代码

//游戏帮助界面
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;

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

【C语言项目】贪吃蛇游戏(上)

【C语言项目】贪吃蛇游戏(上)的更多相关文章

  1. C语言实现贪吃蛇游戏

    #include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/times.h&gt ...

  2. 小项目特供 贪吃蛇游戏(基于C语言)

    C语言写贪吃蛇本来是打算去年暑假写的,结果因为ACM集训给耽搁了,因此借寒假的两天功夫写了这个贪吃蛇小项目,顺带把C语言重温了一次. 是发表博客的前一天开始写的,一共写了三个版本,第一天写了第一版,第 ...

  3. Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录

    一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝 ...

  4. 贪吃蛇游戏——C语言双向链表实现

    采用了双向链表结点来模拟蛇身结点: 通过C语言光标控制函数来打印地图.蛇身和食物: /************************** *************************** 贪吃 ...

  5. 贪吃蛇游戏(printf输出C语言版本)

    这一次我们应用printf输出实现一个经典的小游戏—贪吃蛇,主要难点是小蛇数据如何存储.如何实现转弯的效果.吃到食物后如何增加长度. 1 构造小蛇 首先,在画面中显示一条静止的小蛇.二维数组canva ...

  6. Love2D游戏引擎制作贪吃蛇游戏

    代码地址如下:http://www.demodashi.com/demo/15051.html Love2D游戏引擎制作贪吃蛇游戏 内附有linux下的makefile,windows下的生成方法请查 ...

  7. 使用Love2D引擎开发贪吃蛇游戏

    今天来介绍博主近期捣腾的一个小游戏[贪吃蛇],贪吃蛇这个游戏相信大家都不会感到陌生吧.今天博主将通过Love2D这款游戏引擎来为大家实现一个简单的贪吃蛇游戏,在本篇文章其中我们将会涉及到贪吃蛇的基本算 ...

  8. WebGL实现HTML5的3D贪吃蛇游戏

    js1k.com收集了小于1k的javascript小例子,里面有很多很炫很酷的游戏和特效,今年规则又增加了新花样,传统的classic类型基础上又增加了WebGL类型,以及允许增加到2K的++类型, ...

  9. 【BZOJ-4213】贪吃蛇 有上下界的费用流

    4213: 贪吃蛇 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 58  Solved: 24[Submit][Status][Discuss] Desc ...

随机推荐

  1. TextSwitcher 简单用例

    TextSwitcher 字面理解是文字交换器,是ViewSwitcher的子类,从ViewSwitcher来看,是View交换器,TextSwitcher继承自ViewSwitcher,显然是交换T ...

  2. Double Buffering Windows Forms

    Double Buffering Windows Forms As much as we would like it not to be the case, graphics can be slow ...

  3. java和Discuz论坛实现单点登录,通过Ucenter(用户管理中心)

    标题有点问题,没有进行修改. 一 Discuz论坛搭建步骤 1:服务器环境配置 服务器要支持php语言+支持mysql 5.0以上的数据库 + Apache服务器(支持网站的一个服务器,通过域名的能访 ...

  4. php--group&lowbar;concat&lpar;&rpar;函数总结

    group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果. 比较抽象,难以理解. 通俗点理解,其实是这样的:group_concat()会计算哪些行属于同一组 ...

  5. Qt 学习之路 :视图代理

    与 Qt model/view 架构类似,在自定义用户界面中,代理扮演着重要的角色.模型中的每一个数据项都要通过一个代理向用户展示,事实上,用户看到的可视部分就是代理. 每一个代理都可以访问一系列属性 ...

  6. 游戏客户端嵌入页面出白边bug

    需要使用 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" > 这样的头部给页面才能去除与客 ...

  7. spring&plus;spring mvc&plus;mybatis 实现主从数据库配置

    一.配置文件 1.jdbc.properties master_driverUrl=jdbc:mysql://localhost:3306/shiro?useUnicode=true&char ...

  8. (0)HomeAssistant 教程

    国外:https://www.home-assistant.io/components/light.mqtt/ 中国:https://www.hachina.io/docs/890.html

  9. 【03月04日】A股滚动市盈率PE历史新低排名

    2010年01月01日 到 2018年12月05日 之间,滚动市盈率历史新低排名. 上市三年以上的公司,2018年12月05日市盈率在300以下的公司. 1 - 青松股份(SZ300132) - 历史 ...

  10. ubuntu and centos各种上网代理设置

    1.Ubuntu 一. apt-get 代理设置 由于公司通过代理上网,firefox的代理设置很容易就搞定了,但是通过apt-get安装软件还是不行,于是,查阅了很多资料,最多的方法就是网上流传的三 ...