使用 AI 在 Visual Studio 中创建C++控制台应用程序

本教程介绍如何使用 GitHub Copilot 在 Visual Studio 中快速创建C++控制台应用程序。 你可以创建 Conway 的《生活游戏》的主机版本,这是一款经典的手机自动机。

康威的生活游戏是由数学家约翰·康威设计的。 它由可活或死的单元格网格组成。 游戏根据简单的规则自动演变,并产生复杂的不断演变的模式,这些模式演示了复杂行为如何从基本数学规则中浮出水面。

GitHub Copilot 是一种 AI 支持的编码助手,可帮助你更快地编写代码、减少错误并探索新解决方案。 在 C++ 中编码时使用 Copilot 的一些好处:

  • 键入时生成整个C++函数或类。
  • 根据自然语言注释或提示建议代码补全。
  • 获取有关复杂算法、数据结构和标准库使用的帮助。
  • 通过上下文示例了解新的 API 和新式C++模式。
  • 根据您的注释或代码获取上下文敏感的建议。
  • 解决代码中的调试错误。
  • 简化和重构现有代码。

先决条件

  • 安装了 桌面开发使用 C++ 工作负载 的 Visual Studio 2022 或更高版本。
  • GitHub Copilot。 有关详细信息,请参阅 GitHub Copilot 入门

若要验证是否已安装C++工作负载,

  1. 打开 Visual Studio 安装程序

  2. 选择 Visual Studio 安装旁边的 “修改

  3. 确保选中C++ 桌面开发选项。

    Visual Studio 安装程序的屏幕截图,其中选择了“工作负载”选项卡。已选择使用 c++ 的桌面开发。

  4. 如果未安装,请选择它,然后选择 “修改”。

有关安装 Copilot 的详细信息,请参阅管理 GitHub Copilot 安装和状态

创建项目

Visual Studio 使用 项目 来组织应用的代码,以及用于组织项目 的解决方案 。 项目包含用于生成应用的所有选项、配置和规则。 它管理所有项目文件和任何外部文件之间的关系。 若要创建应用,请先创建新的项目和解决方案。

  1. 打开 Visual Studio,然后选择创建新项目

  2. 搜索“控制台应用”,然后选择C++的 控制台应用 模板。

    “创建新项目”对话框的屏幕截图。

    将显示“创建新项目”对话框,其中选择了“控制台应用”模板。 模板显示:在 Windows 终端中运行代码。 默认情况下打印 hello world。 具有标签 c++、Windows 和控制台。

  3. 选择“下一步”。

  4. 将项目名称设置为 Life ,然后选择项目的位置。

  5. 选择 创建

  6. 项目打开后,在解决方案资源管理器中找到Life.cpp文件。

  7. 打开Life.cpp,删除默认的“Hello,World!”代码,以便从头开始。

使用 Copilot 创建应用

您可以通过描述所需功能来引导 Copilot。 在本部分中,你将了解如何指示 Copilot 生成 Conway 生命游戏的实现。

  1. 通过选择工具栏中的 Copilot 图标打开 Copilot 聊天窗口:

    GitHub 图标下拉列表的屏幕截图。已选择“打开聊天窗口”。

  2. 在聊天窗口中,输入以下提示:

    Create a C++ console application that implements Conway's Game of Life. The program should:
    - Use a 40x20 grid displayed with asterisks (*) for live cells and spaces for dead cells
    - Start with a random initial pattern
    - Display each generation for 500ms before showing the next
    - Allow the user to press any key to exit the program
    - Include proper headers and use standard C++ practices
    - Clear the console between generations to provide an animation effect
    
  3. Copilot 为康威的生命游戏生成 C++ 代码。

  4. 复制生成的代码并将其粘贴到空 Life.cpp 文件中。

  5. F6 键或选择 生成 > 生成解决方案 来生成项目。

  6. F5Ctrl+F5 运行程序。

注释

Copilot 生成的确切代码可能会因每次运行和不同模型而略有不同,但核心功能应保持一致。 如果生成的代码未立即编译,可以要求 Copilot 修复任何编译错误。 Copilot 由 AI 提供支持,因此可能会带来意外和错误。 有关详细信息,请参阅 Copilot 常见问题解答

典型生成的代码结构示例

生成的代码可能包含以下关键组件:

  • 控制台操作、随机数生成和定时的标头
  • 用于表示游戏网格的 2D 数组或向量
  • 用于初始化网格的函数、应用 Conway 的规则并显示当前状态
  • 在按下键之前继续的主循环

下面是 Copilot 使用上一提示生成的代码示例:

// Code generated by GitHub Copilot
#include <iostream>
#include <chrono>
#include <thread>
#include <conio.h> // for _kbhit and _getch

using namespace std;

int step = 0;
const int rows = 20;
const int cols = 40;

void printGrid(int grid[rows][cols])
{
   cout << "Step: " << step << endl;
   for (int i = 0; i < rows; ++i)
   {
         for (int j = 0; j < cols; ++j)
         {
            cout << (grid[i][j] ? '*' : ' ');
         }
         cout << endl;
   }
}

int countNeighbors(int grid[rows][cols], int x, int y)
{
   int count = 0;
   for (int i = -1; i <= 1; ++i)
   {
         for (int j = -1; j <= 1; ++j)
         {
            if (i == 0 && j == 0)
            {
               continue;
            }

            int ni = x + i;
            int nj = y + j;
            if (ni >= 0 && ni < rows && nj >= 0 && nj < cols)
            {
               count += grid[ni][nj];
            }
         }
   }
   return count;
}

void updateGrid(int grid[rows][cols])
{
   int newGrid[rows][cols] = { 0 };
   for (int i = 0; i < rows; ++i)
   {
         for (int j = 0; j < cols; ++j)
         {
            int neighbors = countNeighbors(grid, i, j);
            if (grid[i][j] == 1)
            {
               newGrid[i][j] = (neighbors < 2 || neighbors > 3) ? 0 : 1;
            }
            else
            {
               newGrid[i][j] = (neighbors == 3) ? 1 : 0;
            }
         }
   }
   // Copy newGrid back to grid
   for (int i = 0; i < rows; ++i)
   {
         for (int j = 0; j < cols; ++j)
         {
            grid[i][j] = newGrid[i][j];
         }
   }
}

int main()
{
   int grid[rows][cols] = { 0 };

   // Initial configuration (a simple glider)
   grid[1][2] = 1;
   grid[2][3] = 1;
   grid[3][1] = 1;
   grid[3][2] = 1;
   grid[3][3] = 1;

   while (true)
   {
         if (_kbhit()) // Check if a key has been pressed
         {
            _getch(); // Consume the key
            break;   // Exit the loop
         }
         printGrid(grid);
         updateGrid(grid);
         std::this_thread::sleep_for(std::chrono::milliseconds(100));
         cout << "\033[H\033[J"; // Clear the screen
         step++;
   }

   return 0;
}

运行应用程序时,应会看到 Conway 的“生活游戏”的动画显示,模式会随着时间推移而演变。 若要退出程序,请按键。

Conway Life 在命令窗口中运行的屏幕截图,其中显示了不断演变的单元格网格。

在前面的代码示例中,该代码生成警告: Return value ignored: '_getch'。 你可以要求科皮洛特修复它。 选择代码编辑器并按 Alt+/ (Windows)打开 Copilot 聊天,然后输入:

Copilot 聊天窗口的屏幕截图。文本:修复警告 C6031 位于聊天窗口中。

Copilot 建议修复以正确处理返回值。 若要接受更改,请选择 Tab

Copilot 建议更改的屏幕截图。按 Tab 键以接受。按 Alt+Del 键以放弃。

祝贺! 你已成功使用 GitHub Copilot 在 C++ 中创建功能齐全的 Conway Life 游戏控制台应用程序。 你已了解如何执行以下操作:

  • 创建用于生成C++代码的高效提示词
  • 使用 Copilot 的聊天界面从头开始创建整个应用程序
  • 在 AI 的协助下修复编译时的警告

提高提示技能

有关 Copilot 的更好结果,请参阅以下提示资源:

Troubleshooting

缺少控制台应用模板

新建项目”对话框应显示具有C++Windows控制台标记的控制台应用模板。 如果未看到它,它可能会被从列表中筛选出来,或者它可能未安装。 首先,检查模板列表顶部的筛选器下拉列表。 将其设置为 C++Windows控制台。 应显示C++ 控制台应用 模板;否则,不会安装 具有C++工作负荷的桌面开发

若要 使用 C++ 安装桌面开发,可以直接从“ 创建新项目 ”对话框运行安装程序。 选择“创建新项目”对话框底部的“安装更多工具和功能”链接,位于模板列表下方。 如果 用户帐户控制 对话框请求权限,请选择 “是”。 在安装程序中,确保选中C++桌面应用开发工作负载。 然后选择 “修改” 以更新 Visual Studio 安装。

Copilot 未响应

  • 确保拥有有效的 GitHub Copilot 订阅。
  • 尝试注销并在 Visual Studio 中重新登录到 GitHub 帐户

生成的代码未编译

  • 将错误消息粘贴到 Copilot 聊天中,要求 Copilot 修复特定的编译错误。
  • 请尝试优化你的提示,以具体说明你希望应用程序执行的工作。

后续步骤