C实现贪吃蛇游戏练手项目 原创 C开发 2022年3月29日 17:43 夏至未至 1028 当前内容 6007 字,在路上,马上到,马上到 ### 游戏说明 1.使用C语言,基于VS2017实现的一个贪吃蛇游戏,很好的练手项目,项目中注释简单,理解容易,推荐初学使用。 2.游戏中任何问题,都可[实时沟通](https://www.codecomeon.com/posts/1/ "实时沟通"),欢迎体验。 ### 游戏界面展示  ### 游戏着重点 1. 游戏结束,蛇身链表需要销毁。 2. 随机产生的食物节点,如果蛇没吃到,游戏结束了,此食物节点也需要清理。 3. 一定需要吃了上一个食物在出现下一个食物,以防死掉,还有一节点漏掉。 4. 重新开始游戏,控制参数需要全部重新初始化。 5. 关于状态按键的初始状态,必须是用已知状态中的一个去初始化。 6. rand()%n 随机数范围:[0,n-1]。 ### 游戏功能概览 // 初始化游戏 void InitSnakeGame(); // 开始游戏 void StartSnakeGame(); // 重新开始游戏 void RestartSnakeGame(); // 展示游戏菜单 void ShowGameMenu(); // 创建游戏地图 void CreateGameLimitMap(); // 展示游戏向导 void ShowGameGuide(); // 展示游戏分数 void ShowGameScore(); // 展示作者信息 void ShowAuthInfo(); // 创建初始蛇身 void CreateSnakeBody(); // 创建食物 void CreateFoodNode(); // 游戏循环控制 void GameRecycleControl(); // 通过打印控制蛇移动 void SnakeMoveByPrint(); // 通过坐标控制打印位置 void DefinePosition(int x, int y); // 隐藏光标 void HideConsoleCursor(); // 游戏结束 bool SnakeGameOver(); // 蛇吃了自己(游戏结束) bool SnakeEatSelf(); // 蛇撞墙了(游戏结束) bool HitLinitWall(); // 游戏暂停 void GamePause(); // 游戏结束后,清理蛇体链表,释放内存 void ClearCorpse(); // 重新开始游戏选择 void ShowRestartGameMenu(); // 蛇移动逻辑 void SnakeMoveAction(snakeBodyNode* nextSnakeHead); ### 游戏源码 #### 头文件 `SnakeMain.h`,主要放节点结构体、全局变量以及函数声明: #pragma once #include #include #include #include using namespace std; //蛇上下左右动 #define SNAKE_UP 1 #define SNAKE_DOWN 2 #define SNAKE_LEFT 3 #define SNAKE_RIGHT 4 //蛇身的节点 struct snakeBodyNode { int x; int y; snakeBodyNode *next; }; snakeBodyNode *gpLastFood = NULL; snakeBodyNode *pgSnakeHead = NULL; // 全局控制变量 static int gTotalScore = 0; static int gScoreAdd = 20; static int gButtonState = SNAKE_RIGHT; static int gSleepingTime = 210; // 初始化游戏 void InitSnakeGame(); // 开始游戏 void StartSnakeGame(); // 重新开始游戏 void RestartSnakeGame(); // 展示游戏菜单 void ShowGameMenu(); // 创建游戏地图 void CreateGameLimitMap(); // 展示游戏向导 void ShowGameGuide(); // 展示游戏分数 void ShowGameScore(); // 展示作者信息 void ShowAuthInfo(); // 创建初始蛇身 void CreateSnakeBody(); // 创建食物 void CreateFoodNode(); // 游戏循环控制 void GameRecycleControl(); // 通过打印控制蛇移动 void SnakeMoveByPrint(); // 通过坐标控制打印位置 void DefinePosition(int x, int y); // 隐藏光标 void HideConsoleCursor(); // 游戏结束 bool SnakeGameOver(); // 蛇吃了自己(游戏结束) bool SnakeEatSelf(); // 蛇撞墙了(游戏结束) bool HitLinitWall(); // 游戏暂停 void GamePause(); // 游戏结束后,清理蛇体链表,释放内存 void ClearCorpse(); // 重新开始游戏选择 void ShowRestartGameMenu(); // 蛇移动逻辑 void SnakeMoveAction(snakeBodyNode* nextSnakeHead); #### 源文件 `SnakeMain.cpp`,游戏入口以及函数功能实现: /************************************ ** ShowAuthInfo: www.codecomeon.com ** Date: 2016/7/25 11:50 ** Desc: 贪吃蛇游戏 ************************************/ #include "SnakeMain.h" void ShowGameMenu() { DefinePosition(40, 5); printf("**************************************************************\n"); DefinePosition(40, 7); printf("* 欢迎进入贪吃蛇游戏 *\n"); DefinePosition(40, 9); printf("* 作者:www.codecomeon.com *\n"); DefinePosition(40, 11); printf("* 网站:https://www.codecomeon.com/index *\n"); DefinePosition(40, 13); printf("**************************************************************\n"); DefinePosition(40, 15); printf("按任意开始贪吃蛇游戏:"); getchar(); DefinePosition(40, 17); system("cls"); } void ShowRestartGameMenu() { int num = 1; DefinePosition(28, 14); printf("********************"); DefinePosition(28, 16); printf("* 1.重新开始 *"); DefinePosition(28, 18); printf("* 0.退出游戏 *"); DefinePosition(28, 20); printf("********************"); DefinePosition(28, 22); printf("请选择:"); scanf("%d", &num); DefinePosition(28, 24); switch (num) { case 1: { RestartSnakeGame(); }; break; case 0: { ClearCorpse(); exit(1); }; break; default: { printf("输入1或0,请重新选择!\n"); ShowRestartGameMenu(); }; break; } } void ShowGameGuide() { DefinePosition(90, 2); printf("一、游戏说明:"); DefinePosition(92, 4); printf("1.游戏规则:撞墙和咬伤自己,游戏结束"); DefinePosition(92, 6); printf("2.游戏操作:上下左右键控制贪吃蛇蛇的移动方向"); DefinePosition(90, 8); printf("二、按键说明:"); DefinePosition(92, 10); printf("1.F1键:减速,分数加成降低"); DefinePosition(92, 12); printf("2.F2键:加速,分数加成增大"); DefinePosition(92, 14); printf("3.ESC键:游戏结束"); DefinePosition(92, 16); printf("4.空格键:游戏暂停"); } void ShowGameScore() { DefinePosition(90, 20); printf("\033[1;31m本轮得分:\033[0m"); DefinePosition(90, 22); printf(" =========================="); DefinePosition(90, 24); printf(" 总分: \033[1;31m%d\033[0m", gTotalScore); DefinePosition(90, 26); printf(" =========================="); } void ShowAuthInfo() { DefinePosition(90, 30); printf("作者:码到城攻"); DefinePosition(90, 32); printf("网站:https://www.codecomeon.com/index"); } void DefinePosition(int x, int y) { COORD position; HANDLE hOutput; position.X = x; position.Y ¥10.00 解锁全文 下载资源 本文标题: C实现贪吃蛇游戏练手项目 本文作者: 夏至未至 发布时间: 2022年3月29日 17:43 最近更新: 2023年2月24日 18:07 原文链接: 许可协议: 署名-非商业性-禁止演绎 4.0 国际(CC BY-NC-ND 4.0) 请按协议转载并保留原文链接及作者 贪吃蛇(1) 游戏(1) 上一个 Navicat MySQL可视化工具激活使用 下一个 VS控制台颜色、大小控制 当前文章评论暂未开放,请移步至留言处留言。