Как с помощью ChatGPT разработать игру и выложить ее на Яндекс.Игры

Как с помощью ChatGPT разработать игру и выложить ее на Яндекс.Игры

Привет всем! Меня зовут Роман, я с недавних пор нахожусь в релокации в другой стране. В новой среде я обнаружил свободное время и решил смахнуть пыль со своего старого ноутбука и сделать то, что всегда хотел — разрабатывать игры. Именно поэтому я вам сегодня хочу рассказать о пути, который я пройду, используя ChatGPT и другие нейросети, для разработки игры и ее публикации на Яндекс.Игры.

Это будет интересным проектом для меня и возможностью разделить свой gamedev-опыт и полученные знания с вами.

В данной статье мы рассмотрим, как использовать ChatGPT и другие нейросети в сочетании с движком Construct 2 (я знаю, что он устарел, но мой ноутбук 2012 года не иные варианты не согласен), а также JavaScript и YandexSDK, для создания и публикации игры на платформе Яндекс.Игры.

  • Шаг 1: Знакомство с ChatGPT и настройка promt

Для нашей игры мы можем использовать ChatGPT для создания кода на JavaScript и логики игровых персонажей. Важно настроить наш promt (начальный запрос) таким образом, чтобы получать желаемые результаты от ChatGPT. Это может потребовать некоторых экспериментов и итераций, чтобы достичь желаемого результата.

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

После генерации должны получить лабиринт в виде двухмерного массива:

■■■■■, ■□□X■, ■O■□■, ■□□■■, ■■■■■,

Где «■» - стена, «□» - пол, «X» - точка старта, вход в лабиринт, «O» - точка финиша, выход из лабиринта.

Немного постаравшись (и пострадав) мы получили желаемый результат:

let mazeString = ''; function generateMaze(size) { mazeString = ''; let maze = new Array(size).fill(null).map(() => new Array(size).fill("W")); let visited = new Array(size).fill(null).map(() => new Array(size).fill(false)); let dirs = [[-1,0], [1,0], [0,-1], [0,1]]; let currentCell = [1, 1]; visited[currentCell[0]][currentCell[1]] = true; while (true) { let unvisitedNeighbors = []; for (let dir of dirs) { let ni = currentCell[0] + dir[0], nj = currentCell[1] + dir[1]; if(ni > 0 && ni < size-1 && nj > 0 && nj < size-1 && !visited[ni][nj]) { unvisitedNeighbors.push([ni,nj]); } } if (unvisitedNeighbors.length === 0) { let backtracked = false for (let i = 0; i < size; i++) { for (let j = 0; j < size; j++) { if (!visited[i][j]) { currentCell = [i, j]; visited[i][j] = true; backtracked = true; break; } } if (backtracked) break; } if (!backtracked) break; } else { let nextCell = unvisitedNeighbors[Math.floor(Math.random()*unvisitedNeighbors.length)]; // Break the wall between the current cell and the chosen neighboring cell. let wallX = currentCell[0] + (nextCell[0] - currentCell[0]) / 2; let wallY = currentCell[1] + (nextCell[1] - currentCell[1]) / 2; maze[Math.floor(wallY)][Math.floor(wallX)] = "□"; currentCell = nextCell; visited[currentCell[0]][currentCell[1]] = true; } } for (let i = 0; i < size; i++) { for (let j = 0; j < size; j++) { if(i === 0 || j === 0 || i === size - 1 || j === size - 1) { maze[i][j] = "■"; } } } //Generating entry and exit let entranceX = 1; let entranceY = Math.floor(Math.random() * (size - 2) + 1); let exitX = size - 2; let exitY = Math.floor(Math.random() * (size - 2) + 1); maze[entranceY][entranceX] = "O"; maze[exitY][exitX] = "X"; for (let i = 0; i < size; i++) { //для работы алгоритма mazeString += maze[i].join("") + ","; } //console.log(mazeString); return mazeString; } //форматируем массив под Construct 2 function jsnSTR(maze) { let json = { "c2array": true, "size": [maze[0].length, maze[0].length, 1], "data": [] }; for (let i = 0; i < maze.length; i++) { let row = []; for (let j = 0; j < maze[i].length; j++) { row.push([maze[i][j]]); } json.data.push(row); } return json; } function startGenerateMaze(size) { let mazeString = generateMaze(size); let json = jsnSTR(mazeString.split(",")); //console.log(JSON.stringify(json)); return JSON.stringify(json); }
  • Шаг 2: Использование Construct 2 для разработки игры

Construct 2 - это мощный и интуитивно понятный инструмент для создания игр без необходимости программирования с нуля. Он предоставляет набор готовых блоков и ресурсов, которые можно легко настроить для создания различных игровых механик и уровней. В свое время был преподавателем курса создания 2D-игр на Construct 2 для детей, по этому дальше оставалось только запустить игровые механики и подготовить графику. Т.к. это моя первая «тренировочная» игра на Яндекс.Игры, то, как завещали классики, тренироваться мы будем на ком? Правильно!

<p> Я давно заприметил ассет с воксельными котами от автора <a href="https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Ftribusgamesindie.itch.io%2F&postId=720560" rel="nofollow noreferrer noopener" target="_blank">TribusGamesIndie</a> (Спасибо)</p><p>Ссылка на ассет: <a href="https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Ftribusgamesindie.itch.io%2Fcats-voxel&postId=720560" rel="nofollow noreferrer noopener" target="_blank">https://tribusgamesindie.itch.io/cats-voxel</a></p>

Я давно заприметил ассет с воксельными котами от автора TribusGamesIndie (Спасибо)

Ссылка на ассет: https://tribusgamesindie.itch.io/cats-voxel

Для Construct 2 я давно заприметил плагин «skymen_slicedObject», который позволяет отображать на двухмерной плоскости воксельные объекты по слоям, для эмитации трехмерности.

Сделали пару скриншотов и вуаля!
Сделали пару скриншотов и вуаля!

Промо материал был готов, оставалось только подключить YandexSDK и пройти мадерацию

  • Шаг 3: Подключение YandexSDK и публикация игры на Яндекс.Игры

YandexSDK предоставляет набор инструментов и API для интеграции и публикации игр на платформе Яндекс.Игры. Мы можем использовать YandexSDK для подключения нашей игры к социальным функциям, таким как рейтинги игроков, достижения и многопользовательский режим. Здесь нам снова помог ChatGPT.

После нескольких итераций на почту пришло заветное сообщение:

Как с помощью ChatGPT разработать игру и выложить ее на Яндекс.Игры

Есть нюанс:

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

ССЫЛКА НА ИГРУ "КОТ В ЛАБИРИНТЕ": https://yandex.ru/games/app/215088?lang=ru

В заключение могу сказать, что использование нейросетей в разработке игр открывает большие возможности для разработчиков и может значительно сэкономить ваше время и силы. Надеюсь, что данная статья станет полезным руководством для тех, кто хочет использовать AI в разработке своих собственных игр. Удачи в вашем творческом процессе и разработке игр!

Telegram "FAMSTUDIO", в котором пишу о разработке моих игр: https://t.me/famstudiogames

11
9 комментариев

А вы раньше делали игры уже?

1

Да, я имел опыт создания игр в прошлом. Я был преподавателем курса по созданию игр на движке Construct 2 для детей, где я помогал им изучать основы разработки игр и создавать свои собственные проекты. Я сам также создавал собственные игры, но до сих пор не публиковал их в публичных платформах.

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

Надеюсь, что мой опыт в создании игр и знания, которыми я делюсь в этой статье, будут полезными.

Заголовок кликбейт, где вообще в статье рассказ как и чем помог chatGPT

Спасибо за ваш комментарий и обратную связь!
Не кидайтесь сразу дизлайками, это моя первая статья. Разработка названия статьи может быть сложным процессом, и я стремился выбрать заголовок, который заинтересует читателей и подчеркнет основные темы статьи. В статье я рассказываю о своем опыте использования ChatGPT в разработке игры и ее публикации на Яндекс.Игры.

В статье я рассмотрел одно из применение ChatGPT в разработки игры: создание функций на JavaScript, генерацию уровней в игре и подключение YandexSDK. ChatGPT играет важную роль в этом процессе, предоставляя возможность генерировать код и логику игровых элементов на основе предоставленного контекста.

Мы я описываю возможные трудности, с которыми разработчик может столкнуться при использовании ChatGPT. Я надеюсь, что в статье вы найдете полезную информацию о том, как ChatGPT может быть использован в разработке игр и какие преимущества он может принести.