前面写了一篇 使用AI IDE轻松搞定C语言学习和刷题 得到许多同学们的喜欢,今天我们来讲解一下如何使用InsCode AI IDE进行C++的开发。
在实际工作中,C++比C相对要广泛一些,而且因为门槛较高,所以薪资也会高一些,所谓门槛较高,主要在于C++开发讲究性能优化和内存的使用,经常会用到指针,类型转换、内存操作的处理,需要对内存分配和各类算法有较深理解,一旦发生代码编写的考虑不周,就容易引起系统的严重问题,如崩溃、内存泄露等。
AI的使用,可以帮助C++程序员生成高质量代码,并可以帮助程序对代码时进行语法和内存优化,大大的提升代码的质量和安全性,所以基于AI来进行C++的开发,是非常有用,且有必要的,本文就以一个游戏中常用的A星寻路算法为例,基于InsCode AI IDE 来讲解如何基于AI进行高性能安全开发,毕竟,A星寻路本身在性能和内存碎片问题算是一个典型的追求极致问题,具有一定的复杂度。
一、安装与环境配置
首先,下载安装 InsCode AI IDE | InsCode AI IDE,安装好之后,我们启动InsCode AI IDE,会进入到欢迎界面。
点击右边侧栏的“扩展”,在弹出的插件商店里输入关键字"C",就可以看到许多的插件支持,其中华为云有提供“Cpp Project Wizard”。
点击安装后,这时再“新建工程”,就可以看到可以创建C或C++的工程了。
创建完成后,工程会生成一个工程文件夹,以及一个main.cpp,并按照我们指定的编译器生成对应的CMakeLists.txt,我们暂时还无法运行。
想要编译运行,则需要安装相应的C编译器,比如MinGM。
MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.nethttps://sourceforge.net/projects/mingw-w64/files/ 在MinGM的下载页里,依次点击 ToolChains targetting Win64 -》Personal Builds -》mingw builds -》8.1.0 -》threads-posix -》x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z
下载完后,我们将其解压并取出mingw64文件夹,在电脑的系统变量里找到Path变量,设置到mingw64文件夹的bin目录。
在cmd命令行中输入gcc -v,能够输出信息,就说明安装好了。
我们在刚才的工程目录里进入到cmd命令行,输入g++ main.cpp -o main,如果能正确执行无报错,就说明g++可以正常编译,然后我们再输入main.exe回车,则可以看到输出“Hello,World!"),说明g++把cpp源文件编译输出成为了main.exe。
重新启动InsCode AI IDE确保加载了环境变量,然后点击右上角的下拉框中的“编辑配置”项,在弹出的运行/调试配置对话框中点击+号,找一个能执行命令的配置项,比如JavaScript调试配置,然后在配置面板里改Name项的值为我们的工程名,Command项里输入"g++ .\main.cpp -g -o .\main.exe | .\main.exe",这样当我们运行时,就会调用这个命令对main.c进行编译并运行了。
现在点击右上角的绿色三角按钮,就可以看到在终端中调用gcc对文件进行编译并运行了。
不过此时还不能进行debug调试,那如何才能进行调试呢?
别急,我们先进入.arts的launch.json中。然后点击"添加配置",这时会弹出一个下拉列表框,选择GDB:Launch Program这一项。
在生成的配置信息中,将target这一项,改为当前编译后的exe,并在下面的command中为gcc命令加上-g选项,让gcc编译出可以调试的exe。
在完成配置后,就可以在代码中加入断点,然后选择刚创建的配置“Launch Program”,点击小虫子图标进行调试运行了,断点响应后,我们就可以用F10进行逐行的调试了,上面会列出常用的调试按钮,左边的变量、监视、堆栈则可以显示当前的局部和全局变量值、监视变量值以及函数堆栈。
二、代码生成与修改
环境配置好后,我们下面来做一下代码生成,在AI对话框里就可以找一些小案例进行练习了。
比如写一个复杂一点的算法:编写一个采用A星寻路算法类,能够对64x64的格子中的两个位置点进行最短路径点计算。要求格子数据从一个txt文件中读取出的整数数组,0代表可通过,1代表不可通过,执行后按64x64的方阵打印出格子数据,要求处在路径上的格子显示为2.
点击右侧的AI图标,在弹出的对话框面板里,保持“改写”状态,输入上述需求并点击“发送”。
AI完成回复后,会列出了说明,看着没什么问题,点击AI回复尾部的“全部接受”按钮,采纳生成结果。
这里他让我们创建一个grid.txt,我们干脆直接将需求提给AI,复制“创建一个名为grid.txt的文件,要求文件中存储64行64列的格子数据。每个数据用0或1表示,0代表可通过,1代表不可通过,要求格子外圈用1,不要空格。”并放置到对话框中继续对话。
可以看到,模型在生成数据时,因为token限制,做了截断,不过格式给我们了,我们可以自已复制粘贴补全一下,顺便用1在格子里做一些阻挡。
因为工程生成了AStar.cpp和AStar.h,涉及到多个文件的编译,如果我们不知道怎么编译,也可以问一下AI。
编译时,有时会因为AI生成C++代码的语法标准与编译器支持的语法标准不一致,这时我们只需要一句话就可以将代码更换为兼容的标准或更早一些的标准。
最终我们会将代码编译出来,并运行后,可能会提示找不到路径。
我们可以打开grid.txt,考虑一下起点和终点,比如起点为红色圈附近位置,终点为蓝色圈附近位置。
我们在main函数中设置起点和终点为上图的位置点,然后重新编译和运行,可以发现寻路算法会找到路径,并将路径点位置打印出来。
虽然读懂结果不难,但最好还是在地图格子里显示路径更直观,咱们在AI对话框里输入:“修改main函数,在找到路径后,按照64行64列打印出地图格子的数据,要求为0的字符打印空格,寻路点位置数据用星星字符来表示、并在最后打印出寻路算法消耗的时间。”
回车后,待待AI修改代码,完成后,全部接受、然后编译、运行,这时我们可以看到,它打印出了寻路的路径,是不是非常酷呀!
最后我们再来对代码进行一下优化,因为寻路算法在游戏项目中经常用到,要求运行效率要很高,而且内存这块的使用如果不当,也会产生大量的碎片内存,而现在这个算法,耗时达到了惊人的10秒,这也是不可能被接受的。所以我们必须要优化一下,才能用于项目。
在AI对话框里输入:“修改寻路算法文件,要求不用STL,不要用C++11之后的标准,在内存使用上根据地图大小预先生成一块足够大的内存供结点结构通过指针来分配和使用,将寻路耗时优化到0.0001秒,不要修改main函数功能。”
稍等片刻,我们再次对生成后的代码进行编译,运行,令人惊讶的一幕出现了:64x64格子的两点寻路算法测试从10秒优化到了0.0025秒,共走了52步找到终点。
三、测试用例
寻路算法是写出来了,但测试还不够,我们能不能让AI去构思出足够的测试用例来对算法进行测试呢?
答案肯定是可以的,我们可以跟AI对话“仿照grid.txt的格式生成一些用于测试的格子数组,要求测试的数组复杂度逐步提升,但起点和终点是确保有路径的,然后在main函数里做一个循环来对这些格子数组进行寻路测试,并在寻路完成后打印出消耗的时长,寻路的步数,调用printGridWithPath打印寻路路径结果。”
运行后,程序就快速的生成了一些测试地图,并循环对算法进行了测试。
四、写在最后
作为一个十多年C++开发经验的老程序员,我深知今天的案例在实际项目中花费了多少精力开发和人月测试,而通过AI,我们在短时间内就生成出了较高代码质量的C++代码,这在我看来,对于C++程序员的帮助是巨大的,特别是在一些具有较高复杂度的算法和较多内存操作的处理上,使用AI,可以极大的为我们安全开发提供保驾护航。希望各位C++的开发小伙伴们,早点动起来,使用AI来提升我们的工作效率。加油!