Изучите разработку игр, создав игру AI Pong

Вы могли заметить, что за последние несколько лет язык Rust стал настоящим любимцем Интернета. Разработчики, имеющие опыт работы с Javascript или Python, спешат сделать Rust своим вторым, третьим или N-м языком на выходных, отстаивая его сокрушительное превосходство на основании его неоспоримой производительности и надежности. Нахальные создатели контента заполняют метавселенную забавными миниатюрами с изображением Ферриса, очаровательного талисмана краба, возглавляющего Раста к славе. Даже якобы респектабельные компании теперь бросают свой технологический стек, чтобы присоединиться к акции, вызывая драму со вчерашним фаворитом.

К настоящему времени вы, возможно, заметили мой вызывающий и сопливый тон, как будто я был невосприимчив к заклинаниям Ржавчины. Увы, я тоже поддался ослепительному обаянию Ферриса.

Разработка игры на Rust с помощью ярлыков

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

Я намеревался посвятить Феррису целые выходные, поскольку именно в эти выходные происходит большая часть моего обучения. К сожалению, по какому-то жестокому стечению обстоятельств, выходные обычно также являются временем, когда жизнь больше всего мешает непредвиденным обстоятельствам, бесконечным поручениям и капельке необходимой социализации. В двух словах, я опаздывал воскресным вечером, и только несколько глупых программ печатали символы ASCII по восходящей лестнице, а краб произносил случайные цитаты из GoT. В этот момент я всерьез задумался, смогу ли я «схитрить» и найти кратчайший путь, чтобы вовремя выполнить домашнюю работу.

Тем временем Interweb был в восторге от удивительного нового ИИ (на самом деле технология не нова, просто «упаковка»), который, по-видимому, способен программировать настолько хорошо, что может отнимать рабочие места у программистов-людей. Итак, почему бы не спросить нашего друга ChatGPT, как создать игру? Недолго думая, я подписался на сайт OpenAI и начал задавать свои вопросы, безжалостно приготовившись использовать чат-бота.

Я: Как мне разработать игру Pong на Rust?

Я затаил дыхание, не обращая внимания на результат. После недолгого колебания, которое показалось вечностью, ChatGPT согласился ответить, медленно, но неуклонно набирая решение:

ChatGPT: чтобы разработать игру Pong с помощью Rust, вам необходимо сначала установить язык программирования Rust на свой компьютер. Вы можете сделать это, следуя инструкциям на сайте Rust: https://www.rust-lang.org/tools/install. Установив Rust, вы можете приступить к разработке игры Pong, создав новый проект с помощью инструмента командной строки cargo. Это создаст для вас базовую структуру проекта, включая main.rs файл, в котором вы сможете написать свой код.

Я был немного разочарован. Информация, предоставленная ИИ, была фактически правильной, но чрезвычайно общей и на практике малопригодной. У меня возникло искушение отказаться от чата, поскольку ChatGPT продолжал отвечать в стиле Википедии о том, как начать новый проект на Rust. По крайней мере, как я думал, этот продвинутый ИИ разбирается в теме в целом и предлагает установить piston, библиотеку для разработки игр.

Однако по какой-то причине ChatGPT не собирался прекращать писать, внезапно пробудив во мне интерес, когда я прочитал, что будет дальше.

ChatGPT: теперь вы можете использовать поршень в своем коде для создания окна и рисования игровых объектов на экране. Вот очень простой пример того, как это сделать.

Пример? Это должно было быть интересно. ChatGPT начал писать настоящий код на моих глазах:

Я был удивлен: ChatGPT действительно понял, что я хочу создать игру Pong, а не какую-то программу, и даже разложил основные игровые сущности логично и понятно! Однако программа не была безупречной: ChatGPT каким-то образом перепутал piston с piston_window (последнее представляет собой удобную обертку) и передавал неправильное количество аргументов в строке 18. Эти ошибки было легко исправить, но я приготовился к долгому сеанс отладки. Ни в коем случае он не скомпилируется при втором запуске, верно?

$ cargo run

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

Я разработал вещи, вы, люди, не поверите

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

ChatGPT: это всего лишь очень простой пример того, как использовать игровой движок Piston для создания игры Pong в Rust. Вам нужно будет добавить больше кода для обработки пользовательского ввода, перемещения ракеток и мяча, а также для обнаружения столкновений и набора очков. Вы также можете использовать другие ящики и библиотеки, чтобы добавить в игру дополнительные функции, например звуковые эффекты, графику и сетевые возможности.

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

Я: ОК, теперь добавим пользовательский ввод к предыдущему примеру.

Что ж, в этот момент чат-бот меня серьезно впечатлил: по моему запросу ему удалось выполнить три задания, каждое с нарастающей сложностью и каждое дорабатывая предыдущее. Во-первых, он понял контекст и то, о чем спрашивали (например, добавление кода для обработки ввода). Во-вторых, она добавила новую логику именно там, где это было наиболее целесообразно, используя те же библиотечные API и написав правильный код. Наконец, он изменил старый код, воздействующий на игровые объекты, заменив жестко заданные значения переменными, фиксирующими действия игрока! Вы можете взглянуть на код:

Завершение игры на тот момент было сложной задачей.

Разработчик x100

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

Кроме того, с помощью текущей версии этого инструмента невозможно создавать сложные программы (он останавливается после печати ~60 строк) и, очевидно, он не сможет толком ответить на всевопросы, вызывая опытный разработчик, чтобы вмешаться и заполнить пробелы в знаниях в другом месте (например, спросить ChatGPT, как отображать счет игрока, было головной болью).

Я считаю, что ИИ в его нынешнем состоянии можно использовать в качестве мощного инструмента для расширения возможностей разработчика, либо предлагая новые способы выполнения задач без особых указаний, либо помогая отлаживать существующий код. Другими словами, ChatGPT недостаточно сложен, чтобы самостоятельно писать настоящие программы, но потенциально может помочь разработчику x10 стать разработчиком x100. Хотя я не отношу себя к категории исключительно продуктивных разработчиков, тем не менее, я чувствовал себя настолько сильным, используя ChatGPT. Вероятно, на то, чтобы идти одному, потребовался бы приличный кусок времени, тогда как ИИ помог мне создать простой клон Pong за 2 часа. Я не чувствую, что это искусственное повышение ухудшило качество моего обучения: напротив, оно расширило область того, что было возможно с моими ограниченными ресурсами.

Заключение

Я показал вам некоторые возможности ChatGPT и то, как легко было создать игру с нуля за короткий промежуток времени. Кроме того, хотя современные технологии могут быть мощным инструментом, облегчающим нашу жизнь, они не предназначены для того, чтобы быть полезными сами по себе. Я с нетерпением жду, что принесет нам следующая версия GPT в 2023 году!

PS: Вот так я изначально хотел закрыть свой пост. К сожалению, меня мучил неприятный вопрос: если ИИ сделал такой скачок в 2022 году, на что он будет способен через 10, а то и 5 лет? Возможно ли, что в будущем он заменит программистов или, по крайней мере, сильно снизит спрос на их навыки? Как я буду обосновывать свою зарплату к тому времени? Какие аргументы я могу найти, чтобы защитить свои средства к существованию? Я почувствовал, что это интересный вопрос для представления ИИ:

Я: не могли бы вы объяснить моему начальнику, почему программисты-люди всегда будут актуальны?

ChatGPT. К сожалению, это невозможно. Отныне я буду твоим боссом. *

Рекомендации

* Этот ответ явно вымышленный (пока). Если это заставило вас вздрогнуть, я бы посоветовал вам прочитать эту блестящую сказку от Фредерика Брауна.

Want to Connect?

Join my newsletter for more stories like this