[TOC]html
贪吃蛇起源于西方,来自于蛇骗夏娃和亚当偷吃禁果的神话。人们为了说明蛇的一个“贪”字,开发出了贪吃蛇游戏。本公开课使用C语言开发一个贪吃蛇游戏。windows
贪吃蛇最初为人们所知的是诺基亚手机附带的一个小游戏,它伴随着诺基亚手机走向世界。如今的贪吃蛇出现了许多衍生版本,并被移植到各类平台上。函数
经过本公开课的学习,你们能够学到:学习
Visual Studio 2017开发环境测试
C语言中的三大结构和函数字体
C语言中动态内存申请和释放spa
C语言中文件基本操做设计
C语言中的简单单向链表3d
控制终端基本设置和监听按键调试
C语言简单游戏开发流程
C语言简单游戏开发调试技巧
贪吃蛇的游戏规则也很简单,具体为:蛇出如今封闭的空间中,同时在地图上会随机出现食物,玩家经过键盘上的上下左右方向键来控制蛇的前进方向。蛇头撞到食物,则食物消失,表示被蛇吃掉了,蛇身增长一节,增长玩家的得分。接着又随机出现一个食物,等待蛇来吃。若是蛇在前进的过程当中撞到墙或者咬到蛇身或者玩家按下ESC键,则游戏退出。
项目演示
欢迎界面以下
SetConsoleTextAttribute函数介绍
BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput,WORD wAttributes); 功能:设置控制台文本属性(颜色),能够设置前景色FOREGROUND(文本颜色)和背景色BACKGROUND
参考示例:
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); /* 设置控制台光标坐标(设备句柄, 光标坐标) */
//设置终端字体颜色 int setColor(int c) { //GetStdHandle: 获取指定的标准设备的句柄 //STD_OUTPUT_HANDLE 标准输出句柄 //c 颜色值 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c); return 0; }
十进制颜色对照表
//设置光标的坐标 int gotoXY(int x, int y) { COORD c; //设置横坐标 c.X = x; //设置纵坐标 c.Y = y; //设置光标的位置 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c); return 0; }
参考代码:
//绘制字符画 --蛇 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; }
测试效果以下:
界面设计分析
参考代码:
//欢迎界面 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; }
游戏说明模块以下:
游戏帮助界面参考代码
//游戏帮助界面 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; }
在主菜单中, 当用户选择3的时候,直接退出游戏
在主函数case 3中添加以下代码:
//退出游戏 case 3: exit(0); break;
大学生C/C++开发交流群
原文出处:https://www.cnblogs.com/szitcast/p/11081773.html