Создание консольного приложения C++ в Visual Studio с помощью ИИ

В этом руководстве показано, как использовать GitHub Copilot для быстрого создания консольного приложения C++ в Visual Studio. Вы создаете консольную версию игры "Жизнь" Конвея, классического клеточного автомата.

Игра жизни Конуэя была разработана математиком Джоном Конуэем. Он состоит из сетки ячеек, которые могут быть живыми или мертвыми. Игра развивается автоматически на основе простых правил и создает сложные, развивающиеся шаблоны, демонстрирующие, как сложное поведение может возникать из основных математических правил.

GitHub Copilot — это помощник по программированию на основе искусственного интеллекта, который помогает быстрее писать код, уменьшать ошибки и изучать новые решения. Некоторые преимущества использования Copilot при написании кода в C++:

  • Генерируйте целые функции или классы C++ по мере ввода текста.
  • Предложить завершение кода на основе комментариев или запросов обычного языка.
  • Получите справку по сложным алгоритмам, структурам данных и использованию стандартной библиотеки.
  • Узнайте о новых API и современных шаблонах C++ с помощью примеров в контексте.
  • Получайте предложения, учитывающие контекст ваших комментариев или кода.
  • Отладка ошибок в коде.
  • Упрощение и рефакторинг существующего кода.

Предпосылки

Чтобы проверить, установлена ли рабочая нагрузка C++:

  1. Открытие установщика Visual Studio

  2. Выберите "Изменить " рядом с установкой Visual Studio

  3. Убедитесь, что для разработки приложений на C++ установлен флажок:

    Снимок экрана: установщик Visual Studio с выбранной вкладкой

  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 для создания реализации Игры жизни Конуэя.

  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. Запустите программу, нажав клавишу F5 или CTRL+F5.

Замечание

Точный код, созданный Copilot, может немного отличаться от запуска к запуску и модели к модели, но основной функционал должен оставаться неизменным. Если созданный код не компилируется немедленно, можно попросить Copilot исправить ошибки компиляции. Copilot работает на основе искусственного интеллекта, поэтому возможны сюрпризы и ошибки. Дополнительные сведения см. в Часто задаваемые вопросы по Copilot.

Пример типичной созданной структуры кода

Созданный код, скорее всего, будет включать следующие ключевые компоненты:

  • Заголовки для управления консолью, случайного создания чисел и времени
  • двумерный массив или вектор для представления игровой сетки
  • Функции для инициализации сетки, применения правил 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 Life, выполняющийся в командном окне, отображающий развивающуюся сетку ячеек.

В приведенном выше примере кода код создает предупреждение: Return value ignored: '_getch' Вы можете попросить Copilot исправить его. Выберите редактор кода и нажмите клавиши ALT+/ (Windows), чтобы открыть чат Copilot, а затем введите:

Снимок экрана: окно чата Copilot. Текст: исправление предупреждения C6031 находится в окне чата.

Copilot предлагает исправление для правильной обработки возвращаемого значения. Чтобы принять изменения, нажмите клавишу TAB:

Снимок экрана: предложенные изменения в Copilot. Вкладка для принятия. Alt+Del, чтобы отменить.

Поздравляю! Вы успешно использовали GitHub Copilot для создания полнофункционального консольного приложения "Жизнь" Конвея на C++. Вы узнали, как:

  • Создание эффективного запроса на создание кода C++
  • Использование интерфейса чата Copilot для создания всего приложения с нуля
  • Устранение предупреждений компиляции с помощью ИИ

Улучшение навыков работы с подсказками

Для лучших результатов с Copilot ознакомьтесь с следующими ресурсами подсказок.

Устранение неполадок

Отсутствующий шаблон консольного приложения

В диалоговом окне "Новый проект" должен отображаться шаблон консольного приложения с тегами C++, Windows и консоли . Если он не отображается, он может быть отфильтрован из списка или не установлен. Сначала проверьте раскрывающийся список фильтров в верхней части списка шаблонов. Задайте для них значение C++, Windows и Консоль. Шаблон консольного приложения C++ должен появиться; в противном случае рабочая нагрузка разработка классических приложений на C++ не установлена.

Чтобы установить разработку настольных приложений с C++, можно запустить установщик прямо из диалогового окна "Создание нового проекта". Выберите ссылку "Установить дополнительные средства и компоненты " в нижней части диалогового окна "Создание проекта " под списком шаблонов. Если диалоговое окно управления учетными записями запрашивает разрешения, нажмите кнопку "Да". Убедитесь, что в установщике установлен флажок для рабочей нагрузки Разработка настольных приложений с C++. Затем выберите "Изменить", чтобы обновить установку Visual Studio.

Copilot не отвечает

  • Убедитесь, что у вас есть активная подписка на GitHub Copilot.
  • Попробуйте выйти и вернуться в учетную запись GitHub в Visual Studio

Созданный код не компилируется

  • Попросите Copilot исправить определенные ошибки компиляции, вставив сообщение об ошибке в чат Copilot.
  • Попробуйте уточнить свой запрос, чтобы точнее указать, что вы хотите, чтобы приложение выполняло.

Дальнейшие шаги