【C/C++】10分钟教你用C++写一个贪吃蛇附带AI功能(附源代码详解和下载)(中)

简介: 【C/C++】10分钟教你用C++写一个贪吃蛇附带AI功能(附源代码详解和下载)

01 初始化工作-游戏设置

游戏设置和相关初始化放在了一个类里面,并进行了静态声明。主要设置了游戏窗口的长和款。并在GameInit()函数里面设置了窗口大小,隐藏光标,初始化随机数种子等。代码如下:

1//游戏设置相关模块,把函数都放到一个类里面了。函数定义为static静态成员,不生成实体也可以直接调用
 2class GameSetting
 3{
 4public:
 5    //游戏窗口的长宽
 6    static const int window_height = 40;
 7    static const int window_width = 80;
 8public:
 9    static void GameInit()
10    {
11        //设置游戏窗口大小
12        char buffer[32];
13        sprintf_s(buffer, "mode con cols=%d lines=%d",window_width, window_height);
14        system(buffer);
15
16        //隐藏光标
17        HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
18        CONSOLE_CURSOR_INFO CursorInfo;
19        GetConsoleCursorInfo(handle, &CursorInfo);//获取控制台光标信息
20        CursorInfo.bVisible = false; //隐藏控制台光标
21        SetConsoleCursorInfo(handle, &CursorInfo);//设置控制台光标状态
22        //初始化随机数种子
23        srand((unsigned int)time(0));
24    }
25};

用到了几个相关的Windows API,本文不做过多介绍,大家百度即可。

02 打印信息类

该类主要是用来打印一些游戏相关信息的。该类大体如下:

微信图片_20220421150403.jpg

下面挑几个重点的来讲:

2.1 画地图边界

这个函数主要是根据上面所给的游戏窗口长宽来打印地图边界的。其中还划分了几个区域,主要用来放不同的信息的。

1//画地图边界
 2static void DrawMap()
 3{
 4    system("cls");
 5    int i, j;
 6    for (i = 0; i < GameSetting::window_width; i++)
 7        cout << "#";
 8    cout << endl;
 9    for (i = 0; i < GameSetting::window_height-2; i++)
10    {
11        for (j = 0; j < GameSetting::window_width; j++)
12        {
13            if (i == 13 && j >= GameSetting::window_width - 29)
14            {
15                cout << "#";
16                continue;
17            }
18
19            if (j == 0 || j == GameSetting::window_width - 29 || j == GameSetting::window_width-1)
20            {
21                cout << "#";
22            }
23            else
24                cout << " ";
25
26        }
27        cout << endl;
28    }
29    for (i = 0; i < GameSetting::window_width; i++)
30        cout << "#";
31
32}

划分区域如下图,#就是边框了:

微信图片_20220421150405.jpg

2.2 画出分数和模式

该函数主要是在右上角画出成绩和游戏模式的,在绘制之前会进行刷新处理。先清除,再重新打印。用到了一个gotoxy()函数。这个函数主要是移动光标到(x, y)坐标处的。关于(x, y)的位置,根据实际情况调整即可。

1//画分数
 2static void DrawScore(int score)
 3{
 4    gotoxy(GameSetting::window_width - 22+14, 6);
 5    cout << "  ";
 6    gotoxy(GameSetting::window_width - 22+14, 4);
 7    cout << "  ";
 8
 9    gotoxy(GameSetting::window_width - 22, 6);
10    cout << "当前玩家分数: " << score << endl;
11    gotoxy(GameSetting::window_width - 22, 4);
12    cout << "当前游戏速度: " << 10 - speed / 25 << endl;
13
14}

03 食物类

食物类定义了食物的坐标,随机生成规则,和画出食物等一系列操作。其中食物坐标我们用了一个结构体:

1typedef struct
2{
3    int x;
4    int y;
5}COORDINATE;

该结构体两个成员,分别保存坐标的(x, y)。蛇身的坐标也会用到这个结构体。
有关食物类的大体如下:

微信图片_20220421150408.jpg

下面我们还是挑几个重点来讲。

3.1 随机生成食物

随机生成食物,原则上不允许食物出现在蛇身的位置上,如果有。我们重新生成。注意地图的范围,就是区域左边一块。实际情况根据自身的地图范围来调整食物坐标的范围,注意不要越界。用rand()函数获得随机坐标。代码如下:

1void RandomXY(vector<COORDINATE> & coord)
 2{
 3    m_coordinate.x = rand() % (GameSetting::window_width - 30) + 1;
 4    m_coordinate.y = rand() % (GameSetting::window_height - 2) + 1;
 5    unsigned int i;
 6    //原则上不允许食物出现在蛇的位置上,如果有,重新生成
 7    for (i = 0; i < coord.size(); i++)
 8    {
 9        //食物出现在蛇身的位置上。重新生成
10        if (coord[i].x == m_coordinate.x && coord[i].y == m_coordinate.y)
11        {
12            m_coordinate.x = rand() % (GameSetting::window_width - 30) + 1;
13            m_coordinate.y = rand() % (GameSetting::window_height - 2) + 1;
14            i = 0;
15        }
16    }
17}

然后,在构造函数里面传入蛇身的坐标。即可生成食物。

3.2 画出食物

画出食物比较简单了,gotoxy到随机生成的坐标之后,cout就行。我们在这还设置了一个食物颜色为红色。代码如下:

1void DrawFood()
2{
3    setColor(12, 0);
4    gotoxy(m_coordinate.x, m_coordinate.y);
5    cout << "@";
6    setColor(7, 0);
7}
相关文章
|
C++ Windows
.NET Framework安装不成功,下载`NET Framework 3.5`文件,Microsoft Visual C++
.NET Framework常见问题及解决方案汇总,涵盖缺失组件、安装失败、错误代码等,提供多种修复方法,包括全能王DLL修复工具、微软官方运行库及命令行安装等,适用于Windows系统,解决应用程序无法运行问题。
1719 3
|
人工智能 JavaScript API
【HarmonyOS NEXT+AI】问答03:找不到DevEco Studio Cangjie Plugin下载链接?
本文针对学员在“HarmonyOS NEXT+AI大模型打造智能助手APP(仓颉版)”课程中提出的问题进行解答:为何无法在华为开发者社区官网找到DevEco Studio Cangjie Plugin下载链接。文中详细介绍了Cangjie Plugin的功能及获取方式,包括STS和Canary版本的申请流程,并提供了学习仓颉编程语言的资源与建议。对于普通开发者,STS版本是当前首选;同时,通过课程与官方教程,可快速掌握仓颉语言核心语法及API,助力开发HarmonyOS NEXT AI智能助手应用。
986 3
【HarmonyOS NEXT+AI】问答03:找不到DevEco Studio Cangjie Plugin下载链接?
|
人工智能 监控 JavaScript
MCP实战之Agent自主决策-让 AI玩转贪吃蛇
MCP服务器通过提供资源、工具、提示模板三大能力,推动AI实现多轮交互与实体操作。当前生态包含Manus、OpenManus等项目,阿里等企业积极合作,Cursor等工具已集成MCP市场。本文以贪吃蛇游戏为例,演示MCP Server实现流程:客户端连接服务端获取能力集,AI调用工具(如start_game、get_state)控制游戏,通过多轮交互实现动态操作,展示MCP在本地实践中的核心机制与挑战。
1182 39
MCP实战之Agent自主决策-让 AI玩转贪吃蛇
|
机器学习/深度学习 人工智能 文字识别
浏览器AI模型插件下载,支持chatgpt、claude、grok、gemini、DeepSeek等顶尖AI模型!
极客侧边栏是一款浏览器插件,集成ChatGPT、Claude、Grok、Gemini等全球顶尖AI模型,支持网页提问、文档分析、图片生成、智能截图、内容总结等功能。无需切换页面,办公写作效率倍增。内置书签云同步与智能整理功能,管理更高效。跨平台使用,安全便捷,是AI时代必备工具!
1033 8
|
人工智能 物联网 编译器
【01】优雅草星云物联网AI智控系统从0开发鸿蒙端适配完成流程-初始化鸿蒙编译器deveco studio项目结构-UI设计图切片下载-优雅草卓伊凡
【01】优雅草星云物联网AI智控系统从0开发鸿蒙端适配完成流程-初始化鸿蒙编译器deveco studio项目结构-UI设计图切片下载-优雅草卓伊凡
513 11
【01】优雅草星云物联网AI智控系统从0开发鸿蒙端适配完成流程-初始化鸿蒙编译器deveco studio项目结构-UI设计图切片下载-优雅草卓伊凡
|
人工智能 JSON 小程序
【AI编程】AI+高德MCP不到10分钟搞定上海三日游
本文介绍了小白如何通过AI编程工具(如Trae)快速开发应用并实现技术变现。内容涵盖AI编程用途、工具准备、高德地图开发者权限获取、AI工具配置及实战生成旅游攻略与打印页面,帮助零基础用户轻松入门AI编程。
742 0
|
IDE 编译器 项目管理
Dev-C++保姆级安装教程:Win10/Win11环境配置+避坑指南(附下载验证)
Dev-C++ 是一款专为 Windows 系统设计的轻量级 C/C++ 集成开发环境(IDE),内置 MinGW 编译器与调试器,支持代码高亮、项目管理等功能。4.9.9 版本作为经典稳定版,适合初学者和教学使用。本文详细介绍其安装流程、配置方法、功能验证及常见问题解决,同时提供进阶技巧和扩展学习资源,帮助用户快速上手并高效开发。
|
存储 人工智能 Serverless
10 分钟打造你的专属 AI 客服
10 分钟打造你的专属 AI 客服
817 9
|
人工智能 自然语言处理 搜索推荐
grok3 ai官网 _ Grok3官方网站入口 _ grok3网页版下载
人工智能领域风起云涌,xAI 近期重磅发布了其最新旗舰模型 Grok 3,同时推出了全新的 Grok iOS 及 Web 应用体验。此举标志着 xAI 正式向 AI 霸主地位发起冲击!
3557 6