【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}
相关文章
|
3月前
|
人工智能 数据可视化 API
10 分钟构建 AI 客服并应用到网站、钉钉或微信中测试评
10 分钟构建 AI 客服并应用到网站、钉钉或微信中测试评
117 2
|
13天前
|
编解码 人工智能 监控
VISION XL:支持四倍超分辨率的 AI 视频修复处理工具,提供去除模糊、修复缺失等功能
VISION XL是一款基于潜在扩散模型的高效视频修复和超分辨率工具,能够修复视频缺失部分、去除模糊,并支持四倍超分辨率。该工具优化了处理效率,适合快速处理视频的应用场景。
60 6
VISION XL:支持四倍超分辨率的 AI 视频修复处理工具,提供去除模糊、修复缺失等功能
|
5天前
|
人工智能 关系型数据库 OLAP
通义百炼融合AnalyticDB,10分钟创建网站AI助手
本文介绍了如何在百炼平台上创建和配置AI助手,使其能够准确回答公司产品的相关问题。主要步骤包括:开通管理控制台、创建应用并部署示例网站、配置知识库、上传产品介绍数据、创建AnalyticDB PostgreSQL实例、导入知识文件、启用知识检索增强功能,并最终测试AI助手的回答效果。通过这些步骤,AI助手可以从提供通用信息转变为精准回答特定产品问题。实操完成后,还可以释放实例以节省费用。
|
24天前
|
机器学习/深度学习 人工智能 语音技术
Fugatto:英伟达推出的多功能AI音频生成模型
Fugatto是由英伟达推出的多功能AI音频生成模型,能够根据文本提示生成音频或视频,并修改现有音频文件。该模型基于增强型的Transformer模型,支持复杂的组合指令,具有强大的音频生成与转换能力,广泛应用于音乐创作、声音设计、语音合成等领域。
65 1
Fugatto:英伟达推出的多功能AI音频生成模型
|
14天前
|
存储 人工智能 Serverless
方案测评 | 10分钟上手主动式智能导购AI助手构建
本文介绍了一种基于Multi-Agent架构的智能导购系统方案,利用百炼的Assistant API快速构建,旨在10分钟内完成搭建并实现精准的商品推荐。通过详细的操作指南,展示了从获取API Key、创建函数计算应用、部署示例网站、验证导购效果到集成商品检索应用等全过程,最后提出了关于文档完善、功能优化等方面的体验反馈。
|
26天前
|
人工智能 JavaScript 数据可视化
深入探索 Flux Tools 在 AI 图像创作中的强大功能
Flux Tools 是由 Black Forest Labs 开发的一套先进 AI 图像编辑工具,集成了修补、扩展、深度映射和边缘检测等功能,为用户提供高精度的图像控制能力,广泛应用于照片编辑、数字艺术创作和设计工作等领域,极大提升了创作效率与自由度。
|
7天前
|
人工智能 Serverless API
10 分钟打造你的专属 AI 客服
在这个数字化时代,提供卓越的客户服务已成为企业脱颖而出的关键。为了满足这一需求,越来越多的企业开始探索人工智能(AI)助手的应用,以实现全天候(7x24)的客户咨询响应,全面提升用户体验和业务竞争力。本解决方案通过函数计算FC 和大模型服务平台百炼,为您提供一个高效便捷构建 AI 助手思路。
|
2月前
|
人工智能 自动驾驶 搜索推荐
【通义】AI视界|苹果AI本周正式上线,将引入四大功能
本文由【通义】自动生成,涵盖苹果AI上线、特斯拉被华尔街重新评估、谷歌开发控制计算机的AI、Meta与路透社合作及Waymo获56亿美元融资等科技动态。点击链接或扫描二维码获取更多信息。
|
2月前
|
人工智能 IDE 开发工具
C++中的AI编程助手添加
【10月更文挑战第16天】AI 对我们来说就是一个可靠的编程助手,给我们提供了实时的建议和解决方案,无论是快速修复错误、提升代码质量,或者查找关键文档和资源,AI 作为编程助手都能让你事半功倍。
|
2月前
|
Serverless 数据安全/隐私保护 前端开发
大模型代码能力体验报告之贪吃蛇小游戏《一》:Claude.ai篇 - 生成、预览和快速部署的serverless一条龙
本文介绍了通过Claude.ai生成并优化Web版贪吃蛇游戏的过程,展示了其强大的代码生成功能及用户友好的界面设计。从初始版本的快速生成到根据用户反馈调整游戏速度,再到提供多种实用工具如文件管理、版本控制和一键部署,Claude.ai不仅是一个代码助手,更像是一个全面的serverless开发平台。文中还呼吁国内厂商关注此类技术的发展。