Программа которая сама может себя программировать

На сегодняшний день у меня выпущены четыре игры в Steam, и все они написаны на языке Haxe . Мне нравится по-максимуму автоматизировать свою работу, и сегодня я поделюсь некоторыми приёмами, которые я использую при программировании своих игр.

Для непосвящённых: Haxe — это язык программирования и кросс-компилятор. Это значит, что можно написать игру на Haxe, и она автоматически «переводится» на другой язык программирования, в зависимости от выбранной платформы (C++ для Windows, JavaScript для Web, и т.д.), и компилируется в нативную программу для той платформы.

У языка есть несколько полезных функций метапрограммирования, которые используются для написания кода, который, грубо говоря, сам себя меняет. Эта стятья — не туториал и не руководство, а просто несколько примеров того, как такие приёмы могут быть использованы в разработке компьютерных игр.

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

Подходит ли тебе программирование? Легко проверить

Условная компиляция

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

Например, при разработке игр я всегда пользуюсь собственным редактором уровней, который встроен в саму игру. За исключением игры Speebot , этот редактор доступен только мне, и не включён в конечную сборку, которую запускает игрок. Это достигается «заворачиванием» всего кода, что связан с редактором, в условие, которое проверяет наличие флага «dev» при компиляции. Если флага нет — редактор «стирается» из исходного кода перед нативной компиляцией игры.

Встроенный редактор уровней в игре Пайли, который доступен только в режиме разработки.

Эта функция также позволяет мне отделять ресурсы для «demo» и «prod» версий. Демо версии моих игр включают в себя несколько уровней игры, и я использую флаги компилятора, чтобы определить, какие уровни, файлы музыки и т.д. нужно включить в сборку. Так неиспользуемые ресурсы просто не попадают в демо версии.

Кроме того, я использую флаги компиляции для включения или выключения некоторой оптимизации в моём игровом движке . Например, объединение 3D объектов в общую модель не используется в режиме разработки, потому что оно только мешает во время редактирования уровней. Другими словами, движок оптимизируется для редактирования уровней в режиме разработки. В финальных билдах — движок оптимизирован для самого игрового процесса.

Мета данные

В Haxe есть функции metadata , которые могут быть использованы для аннотации, чтения и манипуляции частей исходного кода, который обычно не доступен.

В моём случае, есть класс Settings, в котором есть набор переменных для опций, доступных игроку в меню Опции. Настройки пользователя хранятся в отдельном файле. Этот файл генерируется автоматически на основе класса Settings. Движок бежит по всем переменным класса, и сохраняет или загружает значения из файла. Для этого используется reflection API.

Как стать хакером за 10 секунд?!

Макро

Это самая сложная и самая интересная функция метапрограммирования в Haxe. Macro позволяют запускать реальный Haxe код во время компиляции, который может напрямую модифицировать исходный код игры.

Самое простое применения этому: добавления времени компиляции и номера сборки. Эта информация у меня используется вместо номеров версий. Она всегда обновляется автоматически, поэтому мне не нужно вручную увеличивать какие-то версии.

Читайте также:
Очистка кэша оперативной памяти программа

Но самый большой плюс для меня — это возможность переместить код из run-time в compile-time.

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

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

Всего 4 мира, в каждом по 50 уровней. Процент прохождения высчитывается на основе количества пройденных уровней и собранных кристаллов в каждом уровне данного мира.

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

Решение: написать макро, которое загружает все 200 уровней (у макро есть доступ к файловой системы), обрабатывает все необходимые данные, и сохраняет нужные числа в массивы. Игре больше не нужно ничего вычислять в run-time, потому что вся информация на этот момент уже жёстко прописана в исходный код игры с помощью макро.

Такой же подход используется в игре Путь Фантома . Игрок может найти артефакт, который показывает количество пропущенных секретов, сокровищ, записок и т.д. в каждой области игры на карте. Вместо того, чтобы загружать и обрабатывать информацию всех областей игры в run-time, это происходит в момент компиляции с помощью макро.

Так, полностью пропадает зависание игры при просмотре карты. Кроме того, игра использует меньше памяти, так как не нужно подгружать все уровни сразу.

Источник: se7en.ws

Разработчики создали робота, который программирует сам себя

В Google создали робота, который способен программировать сам себя. Он воспринимает естественную речь и преобразовывает её в машинный код, говорится в блоге компании.

Проект основан на алгоритме искусственного интеллекта Google Pathways Language Model (PaLM). Модель принимает от человека команду, произнесённую на естественном языке, и создаёт на Python простой код, который позволяет выполнять нужные действия.

Программу протестировали на разных роботизированных системах. В результате робот научился «автономно генерировать новый код, в котором заново распределены вызовы API, синтезированы новые функции и созданы циклы обратной связи для запуска новых действий во время работы», то есть он научился перепрограммировать самого себя.

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

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

«Медицине нужны роботы»: студент «Синергии» изобрёл устройство для диагностики пациентов

Источник: synergytimes.ru

Игры, которые помогут научиться программировать с удовольствием

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

Содержание Показать

  • 1 Baba is You
  • 2 Minecraft
  • 3 Labo
  • 4 The Magic Circle
  • 5 Human Resource Machine
  • 6 The Witness
  • 7 Quadrilateral Cowboy
  • 8 Doom 2016 (SnapMap)
Читайте также:
Программа борьбы с преступностью пример

Baba is You

Baba is You – одна из лучших головоломок 2019 года и фантастический инструмент для обучения использованию логики и переменных в программировании. Каждое слово соответствует объекту или действию, определяющему свойства уровней. Слова, обозначающие объекты и свойства, можно перемещать для изменения выполняемых объектами действий. Можно изменить даже самого вашего персонажа, если поставить обозначающее объект слово перед «is YOU» («это ТЫ», например, DOOR is YOU – ДВЕРЬ это ТЫ).

Предложение, которое выглядит как «ROCK is PUSH» («КАМЕНЬ это НАЖАТЬ») понять вполне легко, но замена слова PUSH на слово WIN (ПОБЕДИТЬ) станет простым, но эффективным способом показать, как замена переменных может повлиять на код. По мере прохождения головоломки становятся гораздо сложнее описанной, но вы всегда можете посмотреть все действующие правила, поставив игру на паузу, и по сути получить алгоритм уровня.

Minecraft

Minecraft – подарок для игрового мира, который продолжает радовать. Это не просто самая продаваемая игра всех времен – она прекрасно подходит детям и может помочь научить людей любого возраста основам программирования. Есть ряд пособий и компьютерных приложений, направленных на изучение таких языков программирования, как Python или Java, исключительно через Minecraft. Кроме того, есть несколько больше ориентированных непосредственно на игру руководств по моддингу, которые тоже учат программировать.

Эта игра почти безгранична, благодаря чему она стала практически идеальной средой для изучения программирования. Меньшее количество ограничений влечет за собой большее пространство для творческого решения проблем. Кроме того, Minecraft – один из особенных для данного списка примеров игры, которая не задумывалась как тот оплот кодинга, которым она стала сейчас. Как и все остальное, из-за чего эта игра стала великой, это получилось именно благодаря преданному сообществу.

Labo

Для детей, но больше, чем просто игрушка? Скорее всего, это что-нибудь от Nintendo. Labo не показала впечатляющих продаж, но картонная периферия определенно стала успешной находкой и попала во множество школ по всему миру.

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

Подход Labo к основам программирования с их бесшовным сочетанием с реальными, физическими примерами использования очень практичен и совершенно уникален в игровой индустрии.

The Magic Circle

В The Magic Circle вам предстоит протестировать неоконченную игру, которая разрабатывалась почти двадцать лет. В результате всех хитросплетений предыстории вы оказываетесь в открытом мире игры. Геймплей строится вокруг захвата различных существ и изменения их свойств при помощи программирования. Кроме того, здесь есть связанные с программированием головоломки, которые помогают вашему персонажу продвигаться через различные участки карты.

В центре сюжета The Magic Circle – конфликт двух лидеров проекта, который радует интригующей динамикой, не так распространенной в играх.

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

Human Resource Machine

В большинстве игр нашего списка введение в основы программирования все же имеет собственно игровое обрамление. В Human Resource Machine от этого решили отказаться и сразу отправить вас кодить.

Читайте также:
Лучшие программы для определения скорости интернета на русском

Здесь вам на каждом уровне потребуется решить определенную задачу при помощи предоставленного языка программирования. Он очень простой в освоении, но один из наиболее богатых среди игр данного списка. Если вам нужно сформировать образ мышления для программирования, то Human Resource Machine может здорово помочь.

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

The Witness

The Witness – одна из наиболее спорных игр для данного списка, но это отличный инструмент для обучения людей образу мыслей при программировании. Возможность искать решения в Google удобна, но действительно постичь что-то самому гораздо приятнее.

То же самое касается программирования. Вы всегда можете обратиться за помощью в решении проблемы со своим кодом к Интернету, но применение знаний, полученных в предыдущих проектах, дарит гораздо лучшие ощущения. The Witness приучает внимательно выявлять шаблоны и изучать язык с минимальными инструкциями или вообще без них.

Разобравшись с основами, вы сможете решать более сложные задачи. Бросаться с места в карьер здорово, но это может вызвать проблемы. Вы никогда не сможете действительно понять, что вы делаете, пока не изучите базовые элементы, как в The Witness, так и в программировании.

Quadrilateral Cowboy

До выхода Cyberpunk 2077 остается еще несколько месяцев, но Quadrilateral Cowboy позволит вам утолить жажду футуристичного хакерства. И говоря о хакерстве, мы не имеем в виду мини-игру типа Pipe Dream.

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

Кроме того, Quadrilateral Cowboy – просто сама по себе отличная головоломка, заслуживающая вашего внимания независимо от того, нравится вам программировать или нет. К концу игры вам понравится в любом случае.

Doom 2016 (SnapMap)

Несмотря на то, что SnapMap – всего лишь один из игровых режимов Doom 2016, инструменты программирования, которые он вам предоставляет, просто невероятно мощные. Есть даже некоторая ирония в том, что в игре про кровавые разборки с ордами демонов возможно настолько замечательное программирование.

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

Один из авторов смог даже сделать средствами SnapMap MOBA-игру. Объемы представленной там взаимосвязанной логики просто поражают, а в ролике выше вы можете увидеть ее в деле.

Источник: cubiq.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru