Написание игры на c: Пишем игры на C++, Часть 1/3 — Написание мини-фреймворка / Хабр
Содержание
Введение в создание игры «SameGame» на C++/MFC | Уроки по С++
Обновл. 28 Дек 2020 |
В этой серии обучающих уроков мы, используя библиотеку MFC (сокр. от «Microsoft Foundation Classes»), с нуля создадим свой вариант всем известной игры-пазла SameGame. Мы добавим несколько дополнительных фич к этой игре, помимо простого удаления блоков, а также реализуем подсистему отмены/повтора действия и диалоговые окна конфигурации. Рассмотрим примеры не только «голого» исходного кода, но и поэтапную разработку вместе со скриншотами.
Правила игры SameGame
Правила SameGame предельно простые. Ваша задача — удалить все цветные блоки с игрового поля. Для того чтобы удалить блок, игрок должен кликнуть по любому блоку, который стоит рядом (вертикально или горизонтально) с другим блоком того же цвета. Таким образом уничтожится целая цепочка блоков одного цвета. Блоки, которые при этом находились сверху, упадут вниз, заполняя освободившееся пространство. При удалении всего столбца, стоящие справа столбцы сдвигаются влево, занимая пустое место. Игра заканчивается тогда, когда у игрока не остается больше возможных ходов. Цель игры состоит в том, чтобы как можно быстрее очистить доску от цветных блоков.
Стоит заметить, что некоторые реализации игры SameGame также могут дополняться использованием алгоритмов для подсчета очков игрока. Реализацию подобного функционала можно рассмотреть в качестве дополнительного урока.
Перед началом работы
Вам потребуются базовые знания в таких разделах языка C++ как функции, рекурсия, классы и наследование классов. В качестве среды разработки была выбрана бесплатная версия Microsoft Visual Studio 2017 Community Edition в операционной системе Windows 7 (детально об установке IDE). Если версии вашей операционной системы или среды разработки не совпадают с вышеуказанными версиями, то некоторые детали или внешний вид отдельных компонентов могут отличаться от тех, которые вы будете видеть на скриншотах данного туториала. Также не советую использовать Express-версии пакета Visual Studiо, т.к. в них не входит компонент MFC.
Чему вы научитесь?
В первую очередь, вы научитесь основным принципам создания своей собственной игры, узнаете о библиотеке MFC и о некоторых базовых методах её использования, а также познакомитесь с построением своего приложения с использованием архитектуры «Document/View».
Почему именно MFC?
MFC — это легкая в использовании библиотека, особенно для такой простой игры как наша. С её помощью не составит труда создать приложение с, так называемым «Windows look-and-feel», внешним видом. Стиль «Windows look-and-feel» имитирует особенности конкретной системы, на которой он используется: «Look» определяет внешний вид компонентов, а «Feel» — их поведение.
Создание проекта
Создавать нашу игру мы будем в Microsoft Visual Studio 2017. Все инструкции и описания, приведенные ниже, могут быть с легкостью адаптированы и для других версий Visual Studio. Итак, для начала запустите Visual Studio и создайте новый проект. Тип проекта "Visual C++" > "MFC/ATL" > "Приложение MFC"
:
Имя задайте SameGame
. Если вы задали другое имя, отличное от SameGame
, то имена ваших классов будут немного отличаться от тех, которые будут на этом уроке.
На следующем шаге вы увидите окно с большим набором различных опций, влияющих на итоговый исходный код, который будет автоматически сгенерирован по завершению работы мастера настройки. На следующем скриншоте показано, какие параметры необходимо выбрать, чтобы получить то, что нам нужно:
Выбирая опцию "Один документ"
мы указываем нашему будущему приложению на необходимость использования архитектуры «Document/View». Следующий интересующий нас параметр — "Использование MFC"
, который содержит две опции. Выбор опции "Использовать MFC в общей библиотеке"
подразумевает, что на компьютере конечного пользователя, который будет запускать наше приложение, уже имеются все необходимые для этого MFC-библиотеки. Если же мы выберем "Использовать MFC в статической библиотеке"
, то нужные MFC-библиотеки войдут в нашу программу на этапе компиляции, что в результате приведет к увеличению итогового размера нашей программы, но эта программа будет работать на любой машине с Windows.
Затем в следующих окнах оставляйте всё как есть, пока не доберетесь до окна:
Опция "Утолщенная граница фрейма"
позволяет пользователю изменить размер окна нашей программы. Но поскольку наша игра имеет фиксированный размер, то флажок с этой опции нужно будет снять. "Развернуть окно"
нам также не понадобится, как и "Начальная строка состояния"
.
Далее мы переходим на страницу "Дополнительные функции"
:
Отключите опции "Печать и предварительный просмотр"
, "Элементы управления ActiveX"
. Если есть возможность, то укажите 0
в опции "Число файлов в текущем списке файлов"
, поскольку мы не будем подгружать в нашу программу какие-либо дополнительные файлы.
Далее рассмотрим последнюю страницу мастера настройки MFC-приложений, на которой можно увидеть список созданных классов:
В результате будут автоматически сгенерированы 4 класса, которые станут основными классами в нашей игре.
К классу CSameGameView
мы вернемся немного позже. А пока рассмотрим класс CSameGameApp
, который является классом-обёрткой для всего нашего приложения и функции main() в том числе. Базовым для него всегда будет класс CWinApp
.
Следующим рассмотрим класс CSameGameDoc
, в котором будут храниться все данные нашего приложения. Для него базовым будет класс CDocument
.
И, наконец, класс CMainFrame
, базовым для которого будет CFrameWnd
. Он также является классом-обёрткой для окна нашей программы. Класс основного фрейма содержит меню и представление клиентской области. Клиентская область — это место, где отрисовывается наша игра.
Теперь возвратимся к пропущенному ранее классу CSameGameView
— базовый класс, который представляет собой раскрывающийся список с набором общедоступных представлений, каждое из которых имеет свои особенности в использовании и применении. Тип представления по умолчанию — CView
, который является общим представлением, где все отображения и взаимодействия с пользователем должны выполняться вручную. Это как раз то, что нам нужно.
Сейчас быстренько пройдемся по списку и поговорим, для чего используется каждый тип представления:
CEditView
— это общее представление, которое состоит из простого текстового поля.
CFormView
— позволяет разработчику вставлять в него другие основные элементы управления, т.е. поля редактирования, поля со списком, кнопки и т.д.
CHtmlEditView
— имеет HTML-редактор, встроенный в представление.
CHtmlView
— вставляет элемент управления — браузер Internet Explorer.
CListView
— имеет область, похожую на окно Проводника со списками и значками.
CRichEditView
— похож на редактор WordPad; позволяет не только вводить текст, но и форматировать его, изменять цвет и тому подобное.
CScrollView
— это общее представление, похожее на CView
, но допускающее прокрутку.
CTreeView
— вставляет элемент управления древовидной структурой.
Завершение работы мастера приложений MFC приведет к созданию и запуску приложения MFC. Поскольку мы еще не написали никакого кода, то увидим окно, в котором ничего нет, но все равно это полностью функционирующее приложение. Ниже приведен скриншот того, как должно выглядеть ваше базовое приложение (чтобы скомпилировать программу, нужно перейти в меню Visual Studio "Отладка" > "Запуск без отладки"
):
Обратите внимание, здесь есть стандартное меню ("Файл"
, "Правка"
и "Справка"
) и пустая клиентская область. Прежде, чем мы перейдем к непосредственному написанию кода, мы немного поговорим об архитектуре «Document/View», которая используется в приложениях MFC, и о том, как мы собираемся применять её в нашей игре.
Оценить статью:
Загрузка…
Поделиться в социальных сетях:
Видеоуроки по созданию игры на C++
Нашли для вас серию видео, в которой автор по шагам рассказывает, как написать свою игру на C++. Эти уроки не требуют каких-то продвинутых знаний, но базовые представления о программировании приветствуются.
Урок 0 — Введение и подготовка
В этом уроке автор расскажет, как пишутся игры. Также вы загрузите компилятор и напишите простой helloworld в Visual Studio, чтобы всё было готово для разработки игры.
Смотреть урок 0
Урок 1 — Окна и указатели
Здесь вы перейдёте к первому шагу на пути к игре: созданию окон. К концу урока у вас всё будет готово для отображения графики в окне.
Смотреть урок 1
Урок 2 — Графика
В этом уроке вы узнаете, как написать программу для отрисовки фигур на экране. Также по ходу дела автор объяснит некоторые важные вещи вроде того, что такое буфер и зачем он нужен, что есть куча и стек, как запросить у Windows больше памяти и не только.
Смотреть урок 2
Урок 3 — Ввод, движение и время
Этот урок про то, как создать систему ввода. Вы узнаете, как сохранять состояния кнопки, чтобы легко определять, нажата она или нет. Также речь зайдёт о том, как можно заставить игрока двигаться пока нажата клавиша и как сделать этот процесс независимым от частоты кадров.
Смотреть урок 3
Урок 4 — Геймплей, столкновения, улучшение передвижения
В этом уроке вы займётесь геймплеем игры. Вы добавите элементы вроде игроков, мяча и арены, а затем разберётесь, как заставить объекты двигаться и как обрабатывать их столкновения.
Смотреть урок 4
Урок 5 — Вражеский ИИ, подсчёт очков, завершаем геймплей
Из этого урока вы узнаете, как создать систему подсчёта очков. Также вы создадите ИИ противника и узнаете некоторые важные вещи об ИИ в играх.
Смотреть урок 5
Урок 6 — Завершаем игру
В последнем уроке вы завершите игру. Вы реализуете меню, систему отрисовки текста и немного отполируете результат.
Смотреть урок 6
Учебник 3. Создание игры «Подбери пару!» — Visual Studio (Windows)
-
- Чтение занимает 2 мин
В этой статье
В этом учебном руководстве вы создадите игру «Подбери пару!», в которой игрок должен подобрать пару скрытым значкам.
Примечание
В этом учебнике приведены примеры как на C#, так и на Visual Basic, поэтому обращайте внимание на информацию, которая относится к используемому вами языку программирования.
В этом учебнике выполняются перечисленные ниже задачи.
сохранять объекты, например значки, в объекте List<T>;
использовать цикл
foreach
в C# или циклFor Each
в Visual Basic для перебора элементов в списке;отслеживать состояние формы с помощью ссылочных переменных;
создавать обработчик событий, который можно использовать для нескольких объектов;
создавать таймер, который отсчитывает время и вызывает событие ровно один раз после запуска.
По завершении приложение должно выглядеть следующим образом.
Ссылки на руководства
Заголовок | Описание |
---|---|
Шаг 1. Создание проекта и добавление таблицы в форму | Начните с создания проекта и добавления элемента управления TableLayoutPanel , чтобы все элементы управления были правильно выровнены. |
Шаг 2. Добавление случайного объекта и списка значков | Добавление объектов Random и List для создания списка значков. |
Шаг 3. Назначение каждому элементу управления Label случайного значка | Случайным образом назначьте значки элементам управления Label , чтобы каждая игра отличалась от остальных. |
Шаг 4. Добавление обработчика событий Click к каждому элементу управления Label | Добавление обработчика события Click , изменяющего цвет метки, которую щелкнули. |
Шаг 5. Добавление ссылок на элементы управления Label | Добавление ссылочных переменных для отслеживания меток, которые щелкнули. |
Шаг 6. Добавление таймера | Добавьте таймер в форму, чтобы отслеживать время, прошедшее с начала игры. |
Шаг 7. Отмена исчезновения пар значков | Отмена исчезновения пар значков, если выбрана одинаковая пара. |
Шаг 8. Добавление метода для проверки того, выиграл ли игрок | Добавление метода CheckForWinner() для проверки, выиграл ли игрок. |
Шаг 9. Изучение других возможностей | Изучение других функций, таких как изменение значков и цветов, добавление сетки и добавление звуков. Увеличение игрового поля и изменение настроек таймера. |
Кроме того, вы можете найти отличные бесплатные учебные видеоматериалы. Дополнительные сведения о программировании на языке C# см. в разделе Основы C#. Разработка для начинающих. Дополнительные сведения о программировании на Visual Basic см. в руководстве по разработке на Visual Basic для начинающих.
Дальнейшие действия
Начните работу с руководством с шага 1: Создание проекта и добавление таблицы в форму .
См. также
Языки программирования для создания игр
Несмотря на постоянное развитие IT-индустрии, создание современных приложений и игр невозможно без программирования. Если раньше выбрать было особенно не из чего, то сейчас у программистов появился такой шанс. Да, вы можете сказать, что для разработки игр достаточно мощного конструктора (Unity или Unreal Engine). Однако на практике необходимость написания собственного кода была и остается важной частью для создания качественного продукта.
В этой статье преподаватели Высшей школы бизнес-информатики НИУ ВШЭ, авторы образовательных программ “Менеджмент игровых проектов” и “Основы создания игр”, расскажут про актуальные языки программирования, которые используются в разработке современных проектов для ПК, консолей и мобильных устройств.
Популярные языки для создания игр в GameDev
Однозначного ответа на это вопрос не существует. Выбор языка зависит от специфики проекта, поставленных целей и задач, а также необходимости создания кода с нуля или адаптации его под тот или иной игровой движок.
Сегодня для создания игр для ПК, консолей и мобильных устройств могут использоваться несколько языков одновременно. Самыми популярными среди разработчиков игр на сегодняшний день считаются следующие.
C++
-
Отличается многообразием и функциональностью, позволяет проводить операции по объектно-ориентированному, процедурному и обобщенному программированию. -
Основное преимущество С++ — обширная стандартная библиотека, содержащая такие функции, как ввод/вывод и многопоточность и обеспечивающая возможность удобной алгоритмизации и контейнирования. -
C++ одинаково эффективно применяется на самых различных платформах и успешно комбинируется с другими средствами создания игровых программ. -
Изучение С++ — процесс достаточно сложный и требующий от начинающих программистов больших усилий.
C#
-
Язык пользуется популярностью в геймдеве благодаря своей полной объектной ориентированности. -
Применяется для разработки игровых продуктов на ПК (в частности, на платформе .NET Framework). -
Хорошо работает с движками и программами для создания графического и звукового оформления. -
Обеспечивает поддержку полиморфизма, перезагрузки операторов и позволяет разработать все необходимые элементы, такие, как архитектура и логика, требуемые для создания полноценной игры.
Java
-
Язык используется для проработки логики и механики мобильных игр, особенно для продуктов, предназначенных для Android. -
Популярность этого языка обусловлена его многопоточностью и возможностью беспрепятственного взаимодействия с памятью мобильных устройств. -
Отличается хорошим взаимодействием с движками и программами графического и звукового оформления. -
На Java часто реализуют серверную структуру для многопользовательских игр.
Какой язык выбрать
Каждый языка хорош в определенных задачах. При создании игры профессиональные программисты редко ограничиваются одним вариантом. Тем не менее, самыми «ходовыми» в геймдеве языками программирования являются C# и Java.
Игры, созданные с использованием этих инструментов, имеют меньший объем, отличаются быстродействием, а также сбалансированностью производительности и системных требований игры.
Кроме того, в процессе создания игр могут быть использованы и другие языки программирования. Например, Python и PHP. Их часто используют для реализации отдельных элементов игрового кода.
Где учиться программированию в геймдеве
ВШБИ НИУ ВШЭ приглашает всех желающих пройти обучение по программе “Основы создания игр” и “Менеджмент игровых проектов”. Во время лекционных и практических занятий вы познакомитесь со всеми аспектами разработки, сможете создать с нуля свою игру и закрепить свои навыки написания программ с использованием самых популярных языков в индустрии компьютерных развлечений.
Еще больше информации вы найдете на канале
МИП ВШБИ на YouTube. Подписывайтесь и не пропускайте свежие записи с открытых мероприятий ВШБИ НИУ ВШЭ.
← Назад к списку
Разработка игр. С чего начать? | GeekBrains
Что должны учитывать будущие разработчики игр? С какого языка начать обучение? К чему стремиться?
https://gbcdn.mrgcdn.ru/uploads/post/25/og_cover_image/3fcc2b06afe428005c9026582ebcf7b2
Что должны учитывать будущие разработчики игр? С какого языка начать обучение? К чему стремиться? На кого равняться? И что необходимо сделать в первую очередь?
Большинство любителей рок-музыки рано или поздно берут в руки гитару. Фанаты спорта страстно мечтают о выходе на футбольное поле, баскетбольную площадку или теннисный корт. Ну а те, кто совершил сотни угонов в GTA, провел десятки часов в компьютерных клубах за Counter-Strike или достиг немалых успехов в MMORPG, наверняка задумываются о карьере разработчика игр.
Проблема в том, что данному направлению обучают в считанных учебных заведениях. Посему большинство разработчиков игр – самоучки, некогда сами составившие учебную программу. Но какие нюансы они учитывали? С чего начинали и к чему стремились? Какой язык учили в первую очередь? На эти и другие актуальные вопросы мы и постарались ответить.
К чему стремиться?
Перед походом в магазин вы составляете список покупок (хотя бы в голове). Перед поездкой в другой конец города – прокладываете маршрут. Ну а перед тем, как обучаться разработке игр, целесообразно задаться вопросом: чем именно вы хотите заниматься? Создавать мобильные приложения или браузерные игры? Трудиться в крупной компании или маленькой? Профессионально заниматься разработкой игр или посвящать этому свободное от работы время? И если первое, то что интересует вас больше: создание интерфейса, отшлифовка геймплея или написание скриптов?
Правильная постановка цели поможет сэкономить уйму времени и сил. Кроме того, позволит достичь конечного пункта кратчайшим путем. Без риска сойти с дороги или угодить в болото.
Какой язык учить?
Кроме того, от цели зависит и ответ на животрепещущий вопрос: с какого языка программирования стоит начинать?
Так, будущим разработчикам игр вроде Minecraft и мобильных приложений под Android стоит обратить пристальное внимание на Java. Для начала советуем пройти интенсив «Основы Java-программирования». Тем, кто заглядывается в сторону iOS – на Objective-C. Для браузерных игр порой хватает знания Ruby-On-Rails. Для совсем маленьких и простых временами достаточно HTML. В производстве Flash-игр используется ActionScript, а для написания скриптов любой сложности вам понадобится JavaScript или, возможно, не столь распространенная Lua. Для создания же небольших консольных игр требуется знание C#.
Что до наиболее крупнобюджетных игр (так называемого класса AAA), то большинство из них оснащены своим или заимствованным у коллег «движком». Нередко, впрочем, весь «движок» или его большая часть написана на C++. Именно этот язык использовался при создании множества известных «игрушек» – от Doom 3 и Call Of Duty до FIFA и The Sims. В то время как классика вроде Quake была написана на C.
Впрочем, в освоении C++ есть и загвоздка – чрезмерная сложность. Недаром ведь говорят, что браться за C++, не зная других языков, – все равно, что начинать изучение математики с линейных уравнений.
Достаточно ли одного языка?
Одна из прелестей программирования – возможность постоянного саморазвития. В разработке же игр (особенно крупных) самосовершенствование, в том числе изучение как можно большего количества языков, – не прихоть, а жизненная необходимость. Так, опытные разработчики, трудящиеся на благо гигантов игровой индустрии, нередко сталкиваются с необходимостью поочередно писать на 7-8 языках. При этом, помимо вышеуказанных языков, им приходится изучать, к примеру, Python либо и вовсе SQL (как вы понимаете, для создания баз данных).
Поэтому, если вы решили связать судьбу с производством крупных игр, будьте готовы стать «полиглотом». Кроме того, чем больше языков вы освоите, тем более интересные и разнообразные задачи перед вами поставят. Ну и, конечно, шансы на получение работы мечты заметно возрастут.
С ЧЕГО НАЧАТЬ?
Перед тем, как совершить кругосветное путешествие, нужно научиться ходить. Ну а перед серьезным игровым проектом необходимо попробовать силы в чем-то менее значимом.
Практически все опытные разработчики вне зависимости от регалий и таланта начинали с небольших приложений: настольных игр, вариаций известных «игрушек», простеньких «флэшек». Тогда они не думали о крупных выставках вроде E3, а накапливали бесценный опыт. Почему бы не последовать их примеру? При этом не обязательно писать архисложный код. Для дебюта достаточно использования специальных программ для создания игр (к примеру, Game Maker). Ведь даже благодаря несложному инструментарию вы значительно облегчите себе жизнь. Во-первых, в миниатюре поймете логику и структуру практически любого игрового приложения. Во-вторых, набьете шишки, которые заживут во время перехода к серьезным проектам. Наконец, в-третьих, обогатите портфолио. Ведь даже простая «игрушка» требует массу времени, терпения и творчества для выдумки концепции, написании кода и устранения багов. Кроме того, показывает, что с производством игр вы знакомы не только в сухой теории.
Что брать за ориентир?
Тот, кто мечтает стать писателем, прочитает сотни книг перед тем, как напишет хотя бы одно слово. Мастера игры на фортепиано на зубок знают лучшие произведения Штрауса, Шопена и Бетховена. Известные же художники перед крупными выставками наизусть заучивали историю искусств.
В разработке игр действует тот же принцип. Вы не сможете развиваться в вакууме. Поэтому играйте, вдохновляйтесь мастерами и, как губка, впитываете лучшее. При этом старайтесь смотреть на приложения не глазами «геймера», а взором разработчика. Иными словами: транспонируйте игру. Задумайтесь, почему в данный момент времени «бот» побежал налево, а не назад? Из-за каких факторов меняется сила и точность удара в спортивном симуляторе? Как создать «эффект усталости» при долгом беге персонажа? Как сделать так, чтобы во время дождя игрок слышал звук капель, а не свиной визг? В общем, проникайте в суть. Постарайтесь воссоздать в голове алгоритмы, с которыми сталкиваетесь во время игры. Поверьте, подобный конструктивный подход поможет вам в будущей нелегкой, но чертовски увлекательной карьере разработчика игр.
Автор: Александр Мороз
Как создать игру и ресурсы для нее
Введение в Unreal Engine 4*
Unreal Engine* принадлежит компании Epic Games*, которая применяет этот движок для разработки собственных игр, в числе которых Fortnite*, Gears of War* и Infinity Blade*. Этот игровой движок также использовался в разработке ряда самых крупных компьютерных игр прошлого года, например Ace Combat 7*: Skies Unknown*, Tropico 6* и Crackdown 3*. Unreal Engine 4* стал бесплатным для загрузки в 2015 году, однако компания Epic Games* требует выплаты отчислений в размере 5% от валового дохода с продажи игр и приложений, после того как он начинает превышать 3000 долларов США в квартал.2
Unreal Engine* повсеместно считается мощной платформой для создания графики, не уступающей по качеству графике в AAA-играх. Демонстрационный ролик, представленный на GDC 2018, говорит сам за себя. Движок способен на поистине впечатляющие вещи — от фотореалистичной анимации лиц до комплексной, физически точной прорисовки.
Как использовать Unreal Engine 4*
Unreal Engine* демонстрирует доступный, простой интерфейс пользователя и содержит несколько полезных шаблонов проектов, которые могут служить строительными блоками для вашей собственной игры или просто позволят ознакомиться с возможностями платформы. Так же, как и Unity*, Unreal Engine* оснащен всем необходимым для создания игры.
Однако чтобы использовать его, вам не нужно быть экспертом в программировании. В Unreal Engine* имеется подходящая для новичков система визуального создания сценариев под названием Blueprint Visual Scripting*, которая позволяет создавать прототипы и визуализации быстро и без единой строчки кода. Это особенно ценно, ведь обычно такие инструменты и процессы доступны лишь программистам. Благодаря Blueprint Visual Scripting* дизайнеры с различной подготовкой могут воплощать свои идеи посредством Unreal Engine*.
Система позволяет пользователям связывать «узлы» друг с другом для создания элементов геймплея. Каждый узел включает функцию, событие или переменную, которые могут соединяться с другими. Это полезно для новичков, так как позволяет понять принципы создания игр без необходимости разбираться с программным кодом.
Как только вы будете готовы к написанию собственных сценариев, знайте, что Unreal Engine* основан на языке программирования C++, для которого создано огромное количество различных учебных ресурсов. Также, как и Unity*, Unreal* имеет собственный магазин, где предлагаются различные ресурсы, плагины и другие инструменты.
Кроме того, в 2018 году Intel начала сотрудничать с Unreal*, чтобы оптимизировать движок для компьютерных игр. До этого разработчики часто создавали игры для приставок, в результате чего потенциал платформ на базе ПК оставался нереализованным. Теперь, благодаря Intel, Unreal Engine* позволяет создавать игры, в полной мере используя преимущества мощных процессоров для ПК. Это касается таких аспектов, как моделирование физической среды, искусственный интеллект (ИИ), освещение, звук и многое другое.
Unreal* способен расширить границы возможностей в части графики, оптимизации ЦП и общей производительности ПК. Поэтому стоит убедиться в совместимости модели визуального создания сценариев посредством системы Blueprint с вашим процессом разработки.
Подробнее о сотрудничестве Intel с Unreal Engine 4* ›
Разработка игры на C# (Mini RPG) Часть 1 из 5. Начало · Dmitriy Azarov
В цикле статей «Разработка игры на C# (Mini RPG) мы реализуем полноценную пошаговую игру на C#. Вся логика будет написана на C#, а в качестве интерфейса будем использовать консоль. Для начала составим план разработки.
План
- Определение логики (бизнес логика)
- Проектирование архитектуры
- Реализация игры
- Написание тестов
По хорошему пункты 4 и 3 нужно поменять, но т. к. мы захотим (а мы захотим) менять требования решено делать в таком порядке.
Для начала подумаем, что мы хотим получить от этой игры. Определимся с тем, что это будет пошаговая Role Playing Game. Большинство современных игр RPG предоставляют своим пользователям различные классы персонажей, деревья умений и др. Мы начнем с одного класса персонажа. NPC вводить не будем (это не влияет на общую архитектуру игры и упростит разработку). Также не будем реализовывать игровой мир, но в разработанной системе это сделать будет не сложно. А в качестве бонуса реализуем бота! Бот должен будет подсказывать игроку, какой ход он думает оптимальный. Опишем некоторые правила и информацию об игре.
Игрок
- Здоровье
- Максимальное здоровье
- Сила
- Монеты
- Предметы
Возможные действия
- Сразиться с монстром
- Покупка оружия
- Покупка брони
- Лечение
Попробуем разделить логику игры от логики представления. С оговоркой, что это не клиент серверное приложение и для упрощения некоторых моментов сознательно упрощаем реализацию. С характеристиками персонажа и возможными действиям разобрались, приступим к проектированию архитектуры. Общая архитектура сборок будет следующей:
Разделим логику на: представление и движок. Сборка для конфигурации игры вынесена отдельно. В следующей части мы рассмотрим разработку сборки GameConfig, как единственной сборки без зависимостей (да и одну из первых сборок в игре). В ней находятся модели настроек игры и некоторые адаптеры.
Небольшой спойлер, как будет выглядеть игра в конце:
Если у вас после прочтения и изучения исходного кода появились вопросы или комментарии буду очень признателен.
Разработка игры на C# (Mini RPG)
Скачать исходный код игры oxozle.minirpg.zip 46 Кб.
Почему индустрия перешла с C на C ++?
C ++ делает все, что делает C. Вы можете легко смешать C и C ++ в тех случаях, когда преимущества C перевешивают преимущества C ++. Это очень намеренное дизайнерское решение C ++.
C ++ делает то, чего не делает C. Это включает простой полиморфизм, а также простую генерацию кода времени компиляции с помощью шаблонов. Это действительно удобно для таких вещей, как контейнеры, которые, безусловно, являются самой большой слабостью C. Он также позволяет использовать определяемые пользователем типы, подобные указателям (интеллектуальные дескрипторы), которые экономят много времени, а также определяемые пользователем примитивные типы, такие как векторы и матрицы, с поддержкой оператора (также экономит много времени).
Виртуальные функции работают медленнее, чем невиртуальные функции. Однако вы должны выбрать виртуальные функции, и компетентный программист сделает это только тогда, когда они будут полезны. Программисты на C имеют указатели на функции и часто хранят их коллекции в структуре, на которую ссылаются другие структуры; Другими словами, они проделывают дополнительную работу, чтобы воссоздать то же самое, что и таблицы виртуальных функций. В случаях, когда требуется только один указатель на функцию и таблица не требуется, C ++ по-прежнему полностью позволяет это и эквивалентен C.С современным компилятором C ++ работает медленнее, чем C, только в тех конкретных случаях, когда программист выбирает функцию. Кроме того, накладные расходы виртуальных функций на модемных процессорах очень малы. Сегодняшнее оборудование спроектировано для шаблонов использования C ++ и даже все в большей степени предназначено для нужд высокоуровневых интерпретируемых языков.
Исключения C ++ исторически налагают много накладных расходов, делая C ++ медленнее, даже если вы их не используете. Исключения было ужасно добавлять в C ++, хотя бы по той причине, что огромное увеличение сложности, связанное с написанием безопасного для исключений кода, и на самом деле некоторые конструкции контейнеров буквально невозможно сделать безопасными для исключений.Игровые программисты часто игнорируют существование исключений и даже отключают их в компиляторе. В современных компиляторах есть исключения с нулевыми накладными расходами (то есть вы платите за них только те затраты, когда действительно их используете).
C все правила выучить проще. C ++ — очень большой и сложный язык. C ++ позволяет писать код более высокого уровня, создавая более простые и простые API. Кто-то хочет легче понимать язык, кто-то хочет проще писать сложный код. Это компромисс между простотой понимания того, что компилятор делает с конкретным фрагментом кода, и простотой написания больших сложных взаимосвязанных приложений.Некоторые люди ценят одно гораздо больше, чем другое, по разным причинам.
В конце концов, C ++ — это надмножество C. На мой взгляд, не существует такого, как высококвалифицированный программист на C ++, который также не был бы сносным программистом на C (хотя есть много программистов на C ++, которые ниже моего уровня. бар, который потерялся бы в чистом C). В то время как C ++ добавляет возможности, чтобы изолировать программиста от большей части C, нетривиальный код C ++ часто требует использования C для выполнения задач. Это одно из основных различий между C ++ и Java и C #.В конце концов, есть причина, по которой вы часто видите «C / C ++» вместе.
Мое личное убеждение, разделяемое с большинством других профессионалов игровой индустрии, с которыми я общался, заключается в том, что расширенная выразительность и возможности программирования высокого уровня C ++ перевешивают повышенную сложность языка по сравнению с C и большей частью других. частые заявления против C ++ просто устарели с точки зрения современных технологий.
c ++ — Написание сервера для многопользовательской игры
Одной из используемых библиотек является ENet, которая реализует общий сетевой API, подходящий для многих игр.Или даже libevent, который просто обрабатывает сетевые события низкого уровня.
На большинстве платформ нет прямой потребности в потоках, хотя Windows заставляет их использовать большое количество клиентов. Отдельные потоки могут быть полезны, когда вам нужно фиксированное время ответа или постоянная скорость отправки пакетов, в меньшей степени для менее динамичных игр.
Отправляйте необработанные данные до свидания, максимально сжатые / упакованные. Это позволяет клиентам с плохим подключением лучше играть, работает быстрее и снижает затраты на полосу пропускания вашего сервера.На некоторых платформах (скорее всего, не на вашей) есть требования, чтобы в игру можно было играть при некоторой низкой пропускной способности, например 128 кбит / с, поэтому эффективная упаковка пакетов — хороший навык для развития. Хорошие программисты игровых сетей, как правило, быстро нанимаются и получают зарплату в пользу разработчиков игр более высокого уровня, и знание того, как поддерживать низкий уровень использования полосы пропускания, является частью этого набора навыков. XML хорош по ряду причин, но маленький размер — не одна из них.
Упаковка в основном сводится к тому, чтобы использовать столько бит, сколько вам нужно, и не больше.Если все ваши плитки могут быть пронумерованы 4 битами, упакуйте две плитки на байт. Немного больше работы, когда что-то не ладится, но не намного. Если вы используете числа с плавающей запятой, подумайте о том, чтобы написать код для 16-битной половинной точности или настраиваемой точности и использовать его по мере необходимости (это всего несколько строк кода — у меня есть простой шаблон, который поддерживает произвольные размеры мантиссы и экспоненты, а также необязательный знаковый бит, который Я также могу использовать для половинной точности; преобразование в одинарную и двойную точность и обратно очень просто.)
Может быть полезно иметь буфер битового потока (по сравнению с обычным потоком байтов), в который вы можете читать и записывать значения.
На самом деле обработка сетевой части сильно зависит от платформы, поэтому libevent полезен. Лучшая рекомендация — не беспокоиться об этом, если вы не хотите стать профессиональным программистом для сетевых игр. Если вы так хотите учиться, лучше всего просто прочитать много книг и онлайн-документов о том, как работает сетевой стек каждой ОС и API. Например, заставить Linux работать хорошо, совсем не так, как XBox.
Отправляйте только значимые изменения. Если объект не движется, нет необходимости отправлять позицию. Точно так же, если клиенту ему уже был отправлен кусок, если мир и он не изменились, не отправляйте его снова.
Используйте некоторую форму фильтрации области интересов, чтобы отправлять каждому клиенту только релевантные вещи. Клиент не может видеть объект на расстоянии 10 миль, поэтому не отправляйте обновления об этом объекте. Просто отправьте обновления о близлежащих объектах.
Как всегда, прочтите статьи о сетевых играх в Gaffer on Games, чтобы получить хорошее легкое введение в сетевые игры.
Изучите C, написав простую игру
Я сам изучал программирование еще в начальной школе. Мои первые программы были на Apple II, но в конце концов я выучил C, читая книги и практикуясь. И лучший способ попрактиковаться в программировании — это написать примеры программ, которые помогут применить ваши новые знания.
Одна программа, которую я люблю писать на новом языке, — это простая игра «угадай число». Компьютер выбирает случайное число от 1 до 100, и вы должны вычислить его, делая предположения.В другой статье я показал, как написать эту игру «Угадай число» на Bash, а мои коллеги-авторы Opensource.com написали статьи о том, как написать ее на Java, Julia и других компьютерных языках.
В игре «Угадай число» замечательно то, что она реализует несколько концепций программирования: как использовать переменные, как сравнивать значения, как печатать вывод и как читать ввод.
Летом я записал серию видео, чтобы научить людей писать программы на языке программирования C.С тех пор я получил известия от многих людей, которые изучают программирование на C, следуя ему. Итак, я решил продолжить, написав игру «Угадай число» на C.
Выберите случайное число
Запустите игру «Угадай число», написав функцию для выбора случайного числа. При написании функций хорошие программисты стараются сделать их гибкими, чтобы они могли повторно использовать их для решения немного иных задач. Итак, вместо того, чтобы жестко кодировать функцию для выбора случайного числа от 1 до 100, напишите функцию для выбора случайного числа от 1 до некоторого целочисленного значения maxval
:
#include
#includeint
randnum (int maxval)
{
/ * выбираем случайное число от 1 до maxval * /int randval;
getrandom (& randval, sizeof (int), GRND_NONBLOCK);
/ * может быть отрицательным, поэтому убедитесь, что оно положительное * /
if (randval <0) {
return (-1 * randval% maxval + 1);
}
else {
return (randval% maxval + 1);
}
}
Функция использует системный вызов Linux getrandom
для генерации серии случайных битов.Вы можете узнать больше об этом системном вызове на странице руководства, но обратите внимание, что getrandom
заполнит переменную случайными нулями и единицами. Это означает, что окончательное значение может быть положительным или отрицательным, поэтому вам нужно будет потом провести тест, чтобы убедиться, что результат вашей функции randnum
является положительным значением.
Напишите программу
Вы можете использовать эту функцию для написания вашей программы «Угадай число»:
#include
#include
внутренний
randnum (int maxval)
{
...
}int
main (void)
{
int number;
int guess;число = randnum (100);
put («Угадай число от 1 до 100»);
сделать {
scanf ("% d", & предположить);if (guess
put ("Слишком низко");
}
else if (guess> number) {
put ("Слишком много");
}
} while (угадай! = Число);put («Верно!»);
возврат 0;
}
Программа начинается с выбора случайного числа от 1 до 100 с помощью функции randnum
.После печати приглашения для пользователя программа входит в цикл do-while
, чтобы пользователь мог угадать число.
На каждой итерации цикла программа проверяет предположение пользователя. Если предположение пользователя меньше случайного числа, программа печатает «Слишком мало», а если предположение больше случайного числа, программа печатает «Слишком высокое». Цикл продолжается до тех пор, пока предположение пользователя не станет таким же, как случайное число.
При выходе из цикла программа печатает «Верно!» а потом сразу заканчивается.
$ gcc -o guess -Wall guess.c$ ./guess
Угадайте число от 1 до 100
50
Слишком высокое
30
Слишком низкое
40
Слишком низкое
45
Слишком высокое
42
Слишком низкое
43
Слишком низко
44
Верно!
Попробовать
Эта игра «угадай число» — отличная вводная программа при изучении нового языка программирования, потому что в ней довольно просто отрабатываются некоторые общие концепции программирования.Реализуя эту простую игру на разных языках программирования, вы можете продемонстрировать некоторые основные концепции и сравнить детали на каждом языке.
У вас есть любимый язык программирования? Как бы вы написали в нем игру «угадай число»? Следуйте этой серии статей, чтобы увидеть примеры других языков программирования, которые могут вас заинтересовать.
Эти простые учебники должны помочь вам начать работу
У C ++ долгая история — история, которая началась около 45 лет назад, с появлением C.Язык C был изобретен человеком по имени Dennis Ritchie в Bell Labs в 1972 году.
C ++ возник как «подмножество» языка C. Он был разработан в 1979 году человеком по имени Бьярн Страуструп , который также работал в Bell Labs.
И C, и C ++ стандартизированы Международной организацией по стандартизации, также известной под аббревиатурой ISO. За всю историю стандартизации C ++ было одобрено и опубликовано всего четыре версии:
- Первая версия была ратифицирована в 1998 и называлась просто C ++
- Вторая версия была ратифицирована в 2003 и неофициально называлась C ++ 03
- Третья версия была ратифицирована в 2011 , известная как C ++ 11
- Четвертая и текущая (но ненадолго!) Версия была ратифицирована в 2014 , известная как C ++ 14 (см. Неформальный шаблон именования?)
ISO планирует ратифицировать пятую версию в этом году, в 2017 .Они называют это… .C ++ 17. Уже есть планы на шестую ратификацию в 2020 .
C ++ — это объектно-ориентированный язык программирования среднего уровня. Он быстрый, широко используемый и довольно простой в освоении, особенно с учетом ресурсов, доступных в наши дни.
Он довольно часто используется для программирования видеоигр, а также других программ, таких как Microsoft Office и Google Chrome.
В этом руководстве собрана коллекция вариантов обучения, в основном для начинающих — вы обязательно найдете тот, который вам понравится!
Узнать CPP
LearnCPP.com есть «учебные пособия, которые помогут вам освоить C ++ и объектно-ориентированное программирование». Звучит неплохо, правда? В конце концов, это… отчасти именно поэтому мы здесь…
В любом случае, это совершенно бесплатный веб-сайт, который проведет вас через программирование на C ++. На сайте прямо говорится, что никакого предварительного опыта программирования не требуется.
Когда вы заходите на сайт, вы обнаруживаете, что есть 18 глав, которые нужно пролистать, многие из которых содержат 10 или более уроков. Кажется, что они меняют порядок некоторых уроков, но это не должно создавать особых проблем.
Вы все равно захотите все это узнать в какой-то момент. Если вы обнаружите, что в уроке нет щелчков мышью, вы всегда можете пропустить его и вернуться.
Первая глава « Chapter 0 » — это полноценное введение в нечто большее, чем просто C ++. Есть урок по использованию руководств, урок под названием «: введение в языки программирования », урок по разработке, урок об общих проблемах C ++ и многое другое.
База данных обширна, что неудивительно для такого старого языка, как C ++.Это кажется хорошо продуманным, и есть множество примеров, которые помогут вам не сбиться с пути.
Как изучить C ++ в Интернете
YouTuber Дерек Банас
Дерек Банас — ютубер, у которого есть одно обучающее видео по программированию на C ++. Идея состоит в том, что он расскажет все, что вам нужно знать о C ++, в одном видео продолжительностью один час и десять минут.
За удобство и целесообразность «одного видео для всего» приходится платить: Banas не берет пленных.
Если у вас нет опыта программирования, это видео не для вас.
Но, если у вас был опыт работы с C ++, это видео могло бы стать отличным обновлением — и вы, возможно, даже узнаете кое-что новое по пути.
Новичкам следует держаться подальше, те, у кого есть некоторый опыт, могут попробовать и посмотреть, смогут ли они не отставать. Он показывает вам команды и быстро и просто объясняет, почему он делает то, что делает, но при этом не балуется.
Это не так похоже на то, что Банас держит тебя за руку, а больше похоже на то, что Банас определяет свое местонахождение, щелкая руками в темной комнате.Если вы знакомы с комнатой (или C ++), вам будет намного проще отслеживать его местоположение (или не отставать от руководства).
УчебникиPoint
Учебники по C ++ в Tutorials Point кажутся довольно солидными. Синтаксис местами немного нестабилен, но не настолько, чтобы усложнять понимание текстовых руководств.
Здесь или там отсутствует статья, или это перевернутая формулировка — типа промахов, которые возникают при изучении английского как второго языка и при очень близком приближении к овладению им.
Изящная функция включает в себя практические примеры, представленные в учебных пособиях. В большинстве примеров C ++ есть опция « Попробуйте ». Когда вы нажимаете на нее, открывается окно в браузере с полным кодом C ++ из примера вверху и выполненным кодом внизу.
Вы можете удалить код в верхнем поле и ввести код из примера самостоятельно. Затем вы можете нажать « выполнить », и окно запустит ваш код, показывая вам, правильно ли вы ввели код.Это удобно, если вы не пытаетесь сохранить или скомпилировать все завершенные примеры.
C программирование
На этом веб-сайте есть учебные пособия по началу работы с C и C ++. Если вы новичок в C ++, автор сайта рекомендует вам купить его электронную книгу под названием « Jumping into C ++ », поскольку он утверждает, что это более полное руководство, чем бесплатное руководство, которое он предоставляет в Интернете.
Возможно, вы захотите опробовать бесплатное руководство, прежде чем бросить деньги на электронную книгу.Или вернитесь и ознакомьтесь с учебным курсом LearnCPP в начале этого руководства, прежде чем переходить к руководству по программированию на C.
Помимо освещения различных тем о C ++, на сайте также есть раздел «Практика». Вы можете решать практические задачи и проходить тесты, чтобы проверить свои знания программирования на C ++.
Автор сайта также построил раздел « ресурсов, ». Здесь есть ссылки на страницу исходного кода, страницу фрагментов исходного кода, страницу советов по C ++ и даже страницу « find the job ».
В общем, здесь доступно большое количество информации, и есть некоторые ресурсы помимо стандартных руководств, которые помогут вам отточить свои навыки C ++. По мере того, как вы ближе познакомитесь с C ++, взгляните на этот сайт.
Удеми
Udemy предлагает бесплатный курс C ++ под названием «Учебник по C ++ для начинающих». Этот курс показывает, «как программировать на популярном (и сложном!) Языке программирования C ++ для начинающих».
Запись на этот курс бесплатна.Несмотря на отсутствие ценника, а может быть, из-за этого, он получил в среднем 4,5 звезды из 5 (из 5001 оценки). Более 75 800 студентов прошли курс истории этого конкретного курса.
Курс предполагает только базовые знания компьютера. Вы должны быть компьютерными грамотными, но вам не обязательно иметь опыт программирования.
Создатель курса, Джон Перселл , называет C ++ сложным языком, поэтому он призывает вас проявить терпение и настойчивость.
К концу курса вы сможете разрабатывать программы на C ++ и даже подавать заявки на вакансии на C ++ с некоторым потенциалом успеха. Никаких гарантий, но этот курс точно не повредит вашим шансам.
Узнайте, как программировать на C # для начинающих
Сценарий сообщает нашим GameObjects, как себя вести; именно скрипты и компоненты, прикрепленные к GameObject, и то, как они взаимодействуют друг с другом, создают ваш игровой процесс. Теперь создание сценариев в Unity отличается от чистого программирования.Если вы занимались чистым программированием, например вы создали работающее приложение, вы должны понимать, что в Unity вам не нужно создавать код, который запускает приложение, потому что Unity делает это за вас. Вместо этого вы сосредотачиваетесь на игровом процессе в своих сценариях.
Unity работает в большом цикле. Он считывает все данные, которые есть в игровой сцене. Например, он считывает источники света, сетки, поведение и обрабатывает всю эту информацию за вас.
Если вы думаете о телевидении, то, например, в Северной Америке у вас их 29.5 кадров в секунду, Unity должна делать то же самое. Он запускает один за другим отдельные дискретные кадры. Вы управляете Unity инструкциями, которые пишете в своих скриптах, и Unity выполняет их кадр за кадром так быстро, как только может.
Достижение высокой частоты кадров означает, что не только ваша игра будет выглядеть более плавно, но и ваши сценарии будут выполняться чаще, что сделает элементы управления более отзывчивыми.
Сценарий должен быть прикреплен к GameObject в сцене, чтобы его можно было вызвать из Unity.Скрипты написаны на специальном языке, понятном Unity. И именно на этом языке мы можем разговаривать с движком и давать ему наши инструкции.
Язык, который используется в Unity, называется C # (произносится до-диез). Все языки, с которыми работает Unity, являются объектно-ориентированными языками сценариев. Как и любой язык, языки сценариев имеют синтаксис или части речи, а основные части называются переменными, функциями и классами.
Если вы используете версию Unity до 2017 года.3, вы заметите, что у него есть текстовый редактор под названием MonoDevelop: он может помочь нам завершить наш код, он сообщит нам, если мы пишем неправильный фрагмент кода, и позволяет нам использовать ярлыки. Начиная с 2018.1, вы также можете использовать Visual Studio для Unity Community или другие текстовые редакторы, такие как Visual Studio, Notepad или Sublime text.
Вот сценарий с примерами кода в нем (на основе учебника «Кодирование в Unity для абсолютного новичка»):
Как видите, существуют переменные, функции и классы.
Переменные содержат значения и ссылки на объекты (вы можете рассматривать объекты как «большие» переменные). Они похожи на ящик, в котором что-то хранится. Переменные начинаются со строчной буквы.
Функции — это наборы кода, которые сравнивают эти переменные и управляют ими. Функции начинаются с заглавной буквы. Мы организовываем код в функции, чтобы их можно было легко повторно использовать несколько раз в разных частях программы.
Классы — это способ структурирования кода для объединения коллекций переменных и функций вместе для создания шаблона, определяющего свойства объекта.
Сценарий в первую очередь сравнивает эти объекты с их текущими состояниями и значениями. Он основан на логике, определяющей результат или решение.
В Unity сценарии начинаются с размещения необходимых вам инструментов вверху, и обычно это делается с объявления переменных.Здесь вы можете увидеть объявленные переменные с ключевым словом видимости «public» или «private» в начале, за которым следуют тип и имя.
Когда мы объявляем ваши переменные, существует несколько типов видимости, но два наиболее важных из них — публичный и частный.
Если вы создадите сценарий с указанным выше текстом в редакторе кода, а затем вернетесь в Unity и назначите сценарий GameObject, вы увидите, что вы можете получить доступ и увидеть переменную света, объявленную как общедоступную в Инспекторе, но вы не могу видеть частный.И это потому, что к тому, что определено как «частное», можно получить доступ только в этом конкретном скрипте, в этом конкретном классе.
Если вы сделаете это общедоступным, то он будет доступен для других скриптов и других классов и может быть изменен в Инспекторе из редактора Unity. Таким образом, это означает, что другие люди могут получить к нему доступ и изменить его ценность.
Есть много причин выбирать между частным или публичным. Частные переменные позволяют сделать ваш код более чистым, поскольку вы знаете, что значение этих переменных можно изменить только внутри этого класса.Это упрощает отладку и сопровождение кода.
Если вы выбрали «общедоступный» и у вас возникла проблема, вам нужно заглянуть внутрь своей кодовой базы, чтобы отследить источник, потому что любой другой объект имеет доступ к этой переменной. Однако, если вы хотите, чтобы объекты взаимодействовали между собой, вам нужно, чтобы некоторые переменные (или функции) были общедоступными.
Другой важный аспект переменных — это тип. Тип определяет, какое значение хранится в памяти переменной, например.грамм. это может быть число, текст или более сложные типы, как на изображении ниже: Transform, Light и Demo Script на изображении ниже на самом деле являются ссылками на Компоненты. Unity необходимо знать, какой это тип объекта, чтобы знать, как с ним обращаться.
Еще одна важная вещь о переменных — это имя. Главное, что вам нужно помнить об именах переменных, это то, что они не могут начинаться с числа и не могут содержать пробелов. Следовательно, есть стиль написания имен.В C # соглашение об именах — camelCase: вы начинаете со строчной буквы и добавляете слова без пробелов, начиная с заглавной буквы, например «мой свет».
Когда Unity компилирует скрипт, он делает общедоступные переменные видимыми в редакторе. Смотрите изображение ниже от инспектора.
Скрипты управляют переменными с помощью функций. Есть ряд функций, которые автоматически запускаются внутри Unity. См. Ниже:
Awake вызывается только один раз при создании экземпляра GameObject с этим компонентом.Если GameObject неактивен, он не будет вызываться, пока не станет активным. Однако Awake вызывается, даже если GameObject активен, но компонент не включен (с маленьким флажком рядом с его именем). Вы можете использовать Awake для инициализации всех переменных, которым нужно присвоить значение.
Start — как и Awake, Start будет вызываться, если GameObject активен, но только если компонент включен. Подробнее об отличиях от Awake смотрите в этом видео.
Обновление вызывается один раз за кадр. Здесь вы помещаете код для определения логики, которая работает непрерывно, например анимации, искусственного интеллекта и других частей игры, которые необходимо постоянно обновлять.
FixedUpdate — это когда вы хотите заниматься физикой.
Как видите, есть фиксированные обновления и обновления, а в нашем разделе руководств по написанию сценариев вы можете узнать, как вносить изменения в каждый кадр с помощью функций Update и FixedUpdate, а также их различия.
LateUpdate — это функция, аналогичная функции Update, но LateUpdate вызывается в конце кадра. Unity просмотрит все игровые объекты, найдет все обновления и вызовет LateUpdates. Это хорошо для таких вещей, как камера. Допустим, вы хотите переместить персонажа в игре. А потом он сталкивается с другим персонажем и оказывается в другом положении. Если мы переместим камеру одновременно с персонажем, произойдет покачивание, и камера окажется не там, где должна быть.Так что, по сути, это второй цикл, который очень пригодится.
При написании функции помните, что функции начинаются с возвращаемого типа функции в начале, за которым следует имя функции, а затем параметры в круглых скобках (если есть). Имена функций начинаются с заглавной буквы, а тело функции заключено в фигурные скобки. Вот пример написания функции:
Как вызвать эту функцию?
Функции могут выполнять вычисления, а затем возвращать значение.Вы можете попросить функцию сделать что-то, обработать информацию, а затем вернуть ответ. Если вы используете тип «void», они ничего не возвращают.
Классы — это наборы этих переменных и функций. Например, этот скрипт представляет собой класс:
Имейте в виду, что имя класса должно совпадать с именем файла сценария C #, чтобы он работал. А затем, чтобы быть прикрепленным к GameObject, он должен быть производным от другого класса с именем MonoBehaviour, который автоматически помещается туда для вас, когда вы впервые создаете скрипт.Классы также могут быть общедоступными или частными.
В Unity, если вы создаете собственный класс, как в примере ниже, вы должны попросить его сериализовать его. Это означает, что они будут преобразованы в простые данные, которые Unity сможет просматривать в инспекторе. Когда вы это сделаете, вы увидите, что у вас класс появится в инспекторе.
Переменные, функции и классы — это только основы написания кода в Unity. В разделе «Обучение» вы найдете множество полезных руководств по написанию сценариев, которые помогут вам изучить программирование с нуля, а затем перейти к созданию подробного кода для ваших проектов.
Как написать свой собственный игровой движок на C ++
В последнее время я писал игровой движок на C ++. Я использую его, чтобы сделать небольшую мобильную игру под названием Hop Out . Вот клип, снятый с моего iPhone 6. (Включите звук!)
Hop Out — это игра, в которую я хочу играть: ретро-аркадный геймплей с трехмерным мультяшным дизайном. Цель состоит в том, чтобы изменить цвет каждой панели, как в Q * Bert.
Hop Out все еще находится в разработке, но движок, на котором он работает, начинает становиться достаточно зрелым, поэтому я подумал, что могу поделиться здесь несколькими советами по разработке движка.
Зачем вам писать игровой движок? Возможных причин много:
- Вы мастерица. Вы любите строить системы с нуля и видеть, как они оживают.
- Вы хотите узнать больше о разработке игр. Я проработал 14 лет в игровой индустрии и все еще разбираюсь в этом. Я даже не был уверен, что смогу написать движок с нуля, поскольку это сильно отличается от повседневных обязанностей программиста в большой студии. Я хотел узнать.
- Вам нравится контроль. Приятно организовывать код именно так, как вы хотите, всегда зная, где что находится.
- Вы чувствуете себя вдохновленными классическими игровыми движками, такими как AGI (1984), id Tech 1 (1993), Build (1995), и такими гигантами индустрии, как Unity и Unreal.
- Вы считаете, что мы, игровая индустрия, должны попытаться демистифицировать процесс разработки движка. Не то чтобы мы овладели искусством создания игр. Отнюдь не! Чем больше мы исследуем этот процесс, тем больше у нас шансов улучшить его.
Игровые платформы 2017 года — мобильные, консольные и ПК — очень мощные и во многих отношениях очень похожи друг на друга. Разработка игрового движка — это не столько борьба со слабым и экзотическим оборудованием, как это было в прошлом. На мой взгляд, это больше о борьбе со сложностью , которую вы сами создаете, создавая . Создать монстра несложно! Вот почему советы в этом посте сосредоточены на том, чтобы все было управляемым. Я разбил его на три части:
- Используйте итерационный подход
- Подумайте дважды, прежде чем слишком много объединять
- Имейте в виду, что сериализация — важная тема
Этот совет применим к любому игровому движку.Я не собираюсь рассказывать вам, как написать шейдер, что такое октодерево или как добавить физику. Я полагаю, вы уже знаете, что вам следует знать такие вещи, и это во многом зависит от типа игры, которую вы хотите создать. Вместо этого я сознательно выбрал моменты, которые, кажется, не получили широкого признания или обсуждения — это те моменты, которые я нахожу наиболее интересными при попытке демистифицировать предмет.
Итерационный подход
Мой первый совет — быстро запустить что-нибудь (что угодно!), А затем повторить.
Если возможно, начните с примера приложения, которое инициализирует устройство и рисует что-нибудь на экране. В моем случае я загрузил SDL, открыл Xcode-iOS / Test / TestiPhoneOS.xcodeproj
, затем запустил образец testgles2
на своем iPhone.
Вуаля! У меня был прекрасный вращающийся куб, использующий OpenGL ES 2.0.
Следующим шагом было скачать 3D-модель Марио, которую кто-то сделал. Я написал быстрый и грязный загрузчик файлов OBJ — формат файла не такой уж и сложный — и взломал пример приложения, чтобы визуализировать Марио вместо куба.Я также интегрировал SDL_Image для загрузки текстур.
Затем я реализовал управление двумя джойстиками, чтобы перемещать Марио. (Вначале я подумывал о создании шутера с двумя джойстиками. Но не с Марио.)
Затем я хотел исследовать скелетную анимацию, поэтому я открыл Blender, смоделировал щупальце и оснастил его скелетом из двух костей, который покачивался взад и вперед.
На этом этапе я отказался от формата файла OBJ и написал сценарий Python для экспорта пользовательских файлов JSON из Blender.Эти файлы JSON описывают данные сетки, скелета и анимации со скелетом. Эти файлы я загрузил в игру с помощью библиотеки C ++ JSON.
Как только это сработало, я вернулся в Blender и сделал персонажа более сложным. (Это был первый сфальсифицированный трехмерный человек, которого я когда-либо создавал. Я очень им гордился.)
В течение следующих нескольких месяцев я предпринял следующие шаги:
- Начал разложение векторных и матричных функций в мою собственную трехмерную математическую библиотеку.
- Заменен
.xcodeproj
проектом CMake. - Движок работает как на Windows, так и на iOS, потому что мне нравится работать в Visual Studio.
- Начал перенос кода в отдельные библиотеки «движка» и «игры». Со временем я разделил их на еще более детализированные библиотеки.
- Написал отдельное приложение для преобразования моих файлов JSON в двоичные данные, которые игра может загружать напрямую.
- В конце концов удалил все библиотеки SDL из сборки iOS.(Сборка Windows по-прежнему использует SDL.)
Дело в том, что Я не планировал архитектуру движка до того, как начал программировать . Это был осознанный выбор. Вместо этого я просто написал простейший код, реализующий следующую функцию, а затем посмотрел на код, чтобы увидеть, какая архитектура возникла естественным образом. Под «архитектурой движка» я имею в виду набор модулей, составляющих движок игры, зависимости между этими модулями и API для взаимодействия с каждым модулем.
Это итеративный подход, поскольку он ориентирован на меньшие результаты. Он хорошо работает при написании игрового движка, потому что на каждом этапе у вас есть запущенная программа. Если что-то пойдет не так, когда вы вводите код в новый модуль, вы всегда можете сравнить свои изменения с кодом, который работал ранее. Очевидно, я предполагаю, что вы используете какой-то контроль версий.
Вы можете подумать, что такой подход тратится впустую, поскольку вы всегда пишете плохой код, который нужно исправить позже.Но большая часть очистки включает перемещение кода из одного файла .cpp
в другой, извлечение объявлений функций в файлы .h
или столь же простые изменения. Решить , куда должны идти вещи, — сложная часть, и это легче сделать, когда код уже существует.
Я бы сказал, что больше времени тратится впустую при противоположном подходе: слишком усердно пытаться придумать архитектуру, которая сделает все, что, как вы думаете, вам нужно, заранее. Две из моих любимых статей об опасностях чрезмерной инженерии — это «Порочный круг обобщения» Томаша Домбровски и «Не позволяйте архитектурным астронавтам пугать вас» Джоэла Спольски.
Я не говорю, что никогда не следует решать проблему на бумаге, прежде чем решать ее в коде. Я также не говорю, что вам не следует заранее решать, какие функции вам нужны. Например, я с самого начала знал, что хочу, чтобы мой движок загружал все ресурсы в фоновом потоке. Я просто не пытался спроектировать или реализовать эту функцию, пока мой движок не загрузил сначала некоторые ресурсы.
Итеративный подход дал мне гораздо более элегантную архитектуру, чем я когда-либо мог представить, глядя на чистый лист бумаги.Сборка моего движка для iOS теперь представляет собой 100% исходный код, включая настраиваемую математическую библиотеку, шаблоны контейнеров, систему отражения / сериализации, структуру рендеринга, физику и аудиомикшер. У меня были причины для написания каждого из этих модулей, но вы, возможно, не сочтете необходимым писать все это самостоятельно. Существует множество отличных библиотек с открытым исходным кодом с разрешительной лицензией, которые вы можете найти подходящими для своего движка. GLM, Bullet Physics и заголовки STB — лишь несколько интересных примеров.
Подумайте дважды, прежде чем объединять слишком много вещей
Как программисты, мы стараемся избегать дублирования кода, и нам нравится, когда наш код следует единому стилю. Однако я считаю хорошо не позволять этим инстинктам преобладать над каждым решением.
Время от времени не поддавайтесь принципу СУХОСТИ
В качестве примера, мой движок содержит несколько классов шаблонов «умных указателей», по духу схожих с std :: shared_ptr
. Каждый из них помогает предотвратить утечку памяти, служа оболочкой для необработанного указателя.
-
Владелец <>
предназначен для динамически выделяемых объектов, имеющих одного владельца. -
Ссылка <>
использует подсчет ссылок, чтобы объект мог иметь несколько владельцев. -
audio :: AppOwned <>
используется кодом вне аудиомикшера. Он позволяет игровым системам владеть объектами, которые использует аудиомикшер, например голосом, который воспроизводится в данный момент. -
audio :: AudioHandle <>
использует внутреннюю систему подсчета ссылок для аудиомикшера.
Может показаться, что некоторые из этих классов дублируют функциональность других в нарушение принципа DRY (Don’t Repeat Yourself). В самом деле, на ранних этапах разработки я пытался как можно больше повторно использовать существующий класс Reference <>
. Однако я обнаружил, что время жизни аудиообъекта регулируется особыми правилами: если звуковой голос завершил воспроизведение образца, а игра не содержит указателя на этот голос, голос может быть немедленно поставлен в очередь для удаления.Если в игре есть указатель, то голосовой объект не следует удалять. И если игра содержит указатель, но владелец указателя уничтожается до того, как голос закончился, голос должен быть отменен. Вместо того, чтобы усложнять Reference <>
, я решил, что будет более практичным вместо этого ввести отдельные классы шаблонов.
В 95% случаев можно использовать повторно существующий код. Но если вы начинаете чувствовать себя парализованным или обнаруживаете, что усложняете что-то, что когда-то было простым, спросите себя, должно ли что-то в кодовой базе действительно состоять из двух вещей.
Можно использовать разные соглашения о вызовах
В Java мне не нравится то, что она заставляет вас определять каждую функцию внутри класса. По-моему, это чушь. Это может сделать ваш код более последовательным, но также поощряет чрезмерную инженерию и не поддается итерационному подходу, который я описал ранее.
В моем движке C ++ некоторые функции принадлежат классам, а некоторые нет. Например, каждый враг в игре — это класс, и большая часть поведения врага реализуется внутри этого класса, как и следовало ожидать.С другой стороны, приведение сфер в моем движке выполняется путем вызова SphereCast ()
, функции в пространстве имен Physics
. SphereCast ()
не принадлежит ни к какому классу — это просто часть модуля по физике
. У меня есть система сборки, которая управляет зависимостями между модулями, что позволяет мне организовать код достаточно хорошо. Обертывание этой функции внутри произвольного класса не улучшит организацию кода каким-либо значимым образом.
Затем есть динамическая отправка, которая является формой полиморфизма.Нам часто требуется вызвать функцию для объекта, не зная точного типа этого объекта. Первым инстинктом программиста на C ++ является определение абстрактного базового класса с виртуальными функциями, а затем переопределение этих функций в производном классе. Это верно, но это всего лишь одна из техник. Существуют и другие методы динамической диспетчеризации, которые не вводят столько дополнительного кода или приносят другие преимущества:
- C ++ 11 представил
std :: function
, который является удобным способом хранения функций обратного вызова.Также можно написать свою собственную версиюstd :: function
, в которую будет проще войти в отладчик. - Многие функции обратного вызова могут быть реализованы с помощью пары указателей: указателя функции и непрозрачного аргумента. Для этого просто требуется явное приведение внутри функции обратного вызова. Вы часто видите это в чистых библиотеках C.
- Иногда базовый тип действительно известен во время компиляции, и вы можете связать вызов функции без каких-либо дополнительных затрат времени выполнения.Turf, библиотека, которую я использую в своем игровом движке, во многом полагается на эту технику. См., Например,
turf :: Mutex
. Это простоtypedef
по классу, зависящему от платформы. - Иногда самый простой подход — создать и поддерживать таблицу необработанных указателей на функции самостоятельно. Я использовал этот подход в своем аудиомикшере и системе сериализации. Интерпретатор Python также активно использует эту технику, как упоминается ниже.
- Вы даже можете хранить указатели функций в хэш-таблице, используя имена функций в качестве ключей.Я использую эту технику для отправки событий ввода, таких как события мультитач. Это часть стратегии, чтобы записывать игровые данные и воспроизводить их с помощью системы воспроизведения.
Динамическая отправка — важная тема. Я лишь поверхностно хочу показать, что есть много способов добиться этого. Чем больше вы пишете расширяемый низкоуровневый код, что является обычным явлением в игровом движке, тем больше вы обнаружите, что исследуете альтернативы. Если вы не привыкли к такому программированию, интерпретатор Python, написанный на C, станет отличным ресурсом для обучения.Он реализует мощную объектную модель: каждый PyObject
указывает на PyTypeObject
, а каждый PyTypeObject
содержит таблицу указателей функций для динамической диспетчеризации. Документ «Определение новых типов» — хорошая отправная точка, если вы хотите сразу приступить к делу.
Имейте в виду, что сериализация — важная тема
Сериализация — это процесс преобразования объектов среды выполнения в последовательность байтов и обратно. Другими словами, сохранение и загрузка данных.
Для многих, если не большинства игровых движков, игровой контент создается в различных редактируемых форматах, таких как .png
, .json
, .blend
или проприетарных форматах, а затем в конечном итоге конвертируется в игровые форматы, зависящие от платформы, которые движок может загружается быстро. Последнее приложение в этом конвейере часто называют «плита». Плита может быть интегрирована в другой инструмент или даже распределена по нескольким машинам. Обычно Cooker и ряд инструментов разрабатываются и обслуживаются в тандеме с самим игровым движком.
При настройке такого конвейера выбор формата файла на каждом этапе остается за вами. Вы можете определить некоторые собственные форматы файлов, и эти форматы могут развиваться по мере добавления функций движка. По мере их развития вам может потребоваться поддерживать совместимость определенных программ с ранее сохраненными файлами. Независимо от формата, вам в конечном итоге потребуется сериализовать его на C ++.
Существует бесчисленное множество способов реализовать сериализацию в C ++. Один довольно очевидный способ — добавить функции load
и save
к классам C ++, которые вы хотите сериализовать.Вы можете достичь обратной совместимости, сохранив номер версии в заголовке файла, а затем передав этот номер в каждую функцию load
. Это работает, хотя код может стать громоздким в обслуживании.
void load (InStream & in, u32 fileVersion) { in >> m_position; в >> m_direction; if (fileVersion> = 2) { in >> m_velocity; } }
Можно написать более гибкий, менее подверженный ошибкам код сериализации, используя преимущества отражения, в частности, создавая данные времени выполнения, которые описывают структуру ваших типов C ++.Чтобы быстро понять, как отражение может помочь в сериализации, взгляните на то, как это делает Blender, проект с открытым исходным кодом.
Когда вы собираете Blender из исходного кода, происходит много шагов. Сначала компилируется и запускается специальная утилита с именем madedna
. Эта утилита анализирует набор файлов заголовков C в дереве исходных текстов Blender, а затем выводит краткую сводку всех типов C, определенных внутри, в настраиваемом формате, известном как SDNA. Эти данные SDNA служат в качестве данных отражения .Затем SDNA связывается с самим Blender и сохраняется с каждым файлом .blend
, который записывает Blender. С этого момента, всякий раз, когда Blender загружает файл .blend
, он сравнивает SDNA файла .blend
с SDNA, связанной с текущей версией во время выполнения, и использует общий код сериализации для обработки любых различий. Эта стратегия дает Blender впечатляющую степень обратной и прямой совместимости. Вы все еще можете загружать файлы 1.0 в последней версии Blender и новой версии .Файлы blend
могут быть загружены в более старых версиях.
Как и Blender, многие игровые движки и связанные с ними инструменты генерируют и используют свои собственные данные отражения. Есть много способов сделать это: вы можете проанализировать свой собственный исходный код C / C ++ для извлечения информации о типе, как это делает Blender. Вы можете создать отдельный язык описания данных и написать инструмент для генерации определений типов C ++ и данных отражения на этом языке. Вы можете использовать макросы препроцессора и шаблоны C ++ для создания данных отражения во время выполнения.И как только у вас есть данные отражения, есть бесчисленное множество способов написать на их основе универсальный сериализатор.
Ясно, что я опускаю много деталей. В этом посте я только хочу показать, что существует множество различных способов сериализации данных, некоторые из которых очень сложны. Программисты просто не обсуждают сериализацию так много, как другие системы движка, хотя большинство других систем полагаются на нее. Например, из 96 выступлений по программированию, представленных на GDC 2017, я насчитал 31 доклад о графике, 11 — об онлайн, 10 — об инструментах, 4 — об ИИ, 3 — о физике, 2 — об аудио — но только один, который касался непосредственно сериализации.
Как минимум, постарайтесь представить себе, насколько сложными будут ваши потребности. Если вы делаете крошечную игру, такую как Flappy Bird, всего с несколькими активами, вам, вероятно, не нужно слишком много думать о сериализации. Вы, вероятно, можете загружать текстуры прямо из PNG, и все будет хорошо. Если вам нужен компактный двоичный формат с обратной совместимостью, но вы не хотите разрабатывать свой собственный, обратите внимание на сторонние библиотеки, такие как Cereal или Boost.Serialization. Я не думаю, что буферы протокола Google идеально подходят для сериализации игровых ресурсов, но тем не менее их стоит изучить.
Написать игровой движок, даже небольшой, — это большое дело. Я мог бы сказать об этом гораздо больше, но для сообщения такой длины это, честно говоря, самый полезный совет, который я могу придумать: работайте итеративно, сопротивляйтесь желанию немного унифицировать код и знайте, что сериализация — это большая проблема. предмет, чтобы вы могли выбрать подходящую стратегию. По моему опыту, каждая из этих вещей может стать камнем преткновения, если ее игнорировать.
Мне нравится сравнивать заметки по этому поводу, поэтому мне было бы очень интересно услышать мнение других разработчиков.Если вы написали движок, привел ли вас ваш опыт к такому же выводу? И если вы не написали ни одного или просто думаете об этом, меня тоже интересуют ваши мысли. Что вы считаете хорошим источником для обучения? Какие части все еще кажутся вам загадочными? Не стесняйтесь оставлять комментарии ниже или пишите мне в Twitter!
Как создать видеоигру с нуля: пошаговое руководство
Изучение того, как создать видеоигру с нуля, может быть очень увлекательным и полезным процессом. С развитием мобильных игр люди во всем мире пользуются огромным рынком видеоигр, создавая и продавая свои игры . Естественно, число людей, которые изучают разработки игр, также увеличилось.
Различные видеоигры для разных платформ и операционных систем создаются немного по-разному, но все они основаны на одних и тех же общих концепциях.
Вам нужно научиться кодировать хотя бы на одном языке , прежде чем вы сможете создавать свою собственную игру, особенно если вы хотите иметь возможность настраивать ее внешний вид и работу. Программирование — это основа разработки видеоигр , а обучение созданию игры с нуля включает в себя обучение программированию .
В этом руководстве я познакомлю вас с основными принципами разработки видеоигр . Я покажу вам общие шаги, которые вам нужно выполнить, когда вы узнаете, как создавать свою собственную игру, и я познакомлю вас с различными языками программирования, которые используются для создания игр на разных платформах .
Наконец, я дам вам краткое представление о некоторых других вещах, которые вам нужно будет изучить, если вы серьезно относитесь к тому, чтобы научиться создавать видеоигры с нуля , вместо того, чтобы просто следовать шаблон.
Разработка игр против игрового дизайна
Прежде чем перейти к основным шагам, которые вам нужно будет выполнить, чтобы создать свою первую игру с нуля, важно рассмотреть разницу между разработкой видеоигр и дизайном игры. Обратите внимание, что вам понадобятся и то, и другое, если вы хотите научиться создавать игру самостоятельно.
Найден последний купон Udacity:
Выбор проверенного персонала
ЭКСКЛЮЗИВНО: СКИДКА 65%
На курсы Udacity
Начните весну с новыми навыками — поторопитесь и выберите курс Udacity своей мечты с огромной скидкой 65%! Этот эксклюзивный код купона Udacity активен в течение ограниченного времени.
Срок годности: 12.09.2021
Использовано 2948 человек
Осталось всего 37
×
ЭКСКЛЮЗИВНО: СКИДКА 65%
На курсах Udacity
Начните весну с новыми навыками — поторопитесь и выберите свой курс Dream Udacity с огромной скидкой 65%! Этот эксклюзивный код купона Udacity активен в течение ограниченного времени.
Идите и покупайте со скидкой!
REDEEM DEAL
Срок годности: 12.09.2021
2,948 Пользователей
Только 37 Осталось
×
ЭКСКЛЮЗИВ: СКИДКА 65%
На курсах Udacity
Начни весну с новыми навыками — поспеши и выбери курс Udacity своей мечты с огромной скидкой 65%! Этот эксклюзивный код купона Udacity активен в течение ограниченного времени.
Иди и делай покупки со скидкой!
ВЫПОЛНИТЬ СДЕЛКУ
Срок годности: 09.12.2021
2948 Пользователей
Только 37 Левый
Проще говоря, дизайн видеоигры относится к фактическому художественному дизайну видеоигры .Гейм-дизайнеры тратят время на осмысление новых аспектов своих игр.
Они определяют, что должна включать игра, как игра должна реагировать на определенные условия, и именно они определяют, что необходимо создать, чтобы сделать игру настолько хорошей, насколько это возможно.
С другой стороны, разработчики игр — или программисты игр — — это люди, которые лучше всего знают, как создать видеоигру, написав код , чтобы игра делала то, что должна.
В оставшейся части этого руководства, , я сосредоточусь на разработке, — обучении кодированию видеоигры, но для вас важно понимать, что вам придется спроектировать свою игру, прежде чем вы сможете ее программировать.
Обратите внимание, что дизайнер игры и разработчик игры могут быть одним и тем же человеком. Если вы создаете простые игры, дизайн и процесс разработки могут выполняться параллельно.
Самые популярные результаты
Ищете более подробную информацию по связанным темам? Мы собрали похожие статьи, чтобы вы сэкономили время. Взглянем!
Как создать видеоигру: 5 шагов
Поначалу изучение того, как создавать свою собственную игру , может показаться очень трудным.У вас может возникнуть соблазн отступить и оставить разработку игры экспертам. Однако я бы не рекомендовал это делать! Вместо этого вам следует немного поработать, чтобы изучить основы создания видеоигр. Это не так сложно, как вы думаете.
Имея это в виду, вот очень общее пошаговое руководство, которое поможет вам научиться создавать видеоигры. Обратите внимание, что для точный процесс зависит от типа игры, которую вы создаете, и платформы, на которой вы хотите ее выпустить на , но это даст вам представление о том, что в ней задействовано.
Шаг 1. Проведите небольшое исследование и концептуализируйте свою игру
Первое, что вам нужно сделать, когда вы пытаетесь создать свою первую игру, — это подумать о том, какую именно игру вы планируете создать . Проведите небольшое исследование и выясните, какие именно навыки вам понадобятся для создания этой игры и какими функциями она должна обладать.
Если вы серьезно относитесь к тому, чтобы научиться создавать видеоигры, то вам следует пройти пару вводных курсов , прежде чем двигаться дальше.Например, если вы заинтересованы в создании 2D-ролевой игры, я бы порекомендовал взглянуть на что-то вроде Курс «Научитесь создавать 2D-игру в Unity».
В качестве альтернативы, если вы серьезно относитесь к созданию продвинутой видеоигры, вам может потребоваться приложить больше усилий. Эта учебная программа подойдет вам лучше всего, так как она предлагает два разных курса, чтобы вы получили всестороннее образование.
Шаг 2: Работа над проектным документом
После того, как вы выяснили, как создать видеоигру, концептуализировали ее и начали думать о том, как вы хотите, чтобы она выглядела, вам нужно составить проектный документ .Для большинства людей проектный документ — это краткое описание игры, как она должна выглядеть и что вам нужно сделать для ее создания.
При составлении проектной документации учитывайте следующие моменты:
- Навыки в вашем распоряжении . Вещи могут стать дорогими, если вам придется нанимать людей для выполнения дел из-за того, что у вас нет нужных навыков. Также не забывайте, что вы всегда можете улучшить свои навыки онлайн!
- Какой язык / языки вы собираетесь использовать .Это поможет вам сузить круг построения вещей.
- Как он должен выглядеть / вести себя.
- Хотите ли вы включать обновления и новые выпуски в будущем. Если да, то вам следует подумать о том, как вы собираетесь их реализовать.
После того, как вы составили проектную документацию, почти пора начинать программировать!
Шаг 3. Решите, нужно ли вам программное обеспечение
Последнее, что вам нужно сделать, прежде чем вы начнете узнавать, как создавать видеоигры, — это решить, какое программное обеспечение вам нужно .Для разработки простых мобильных игр не требуется много модного программного обеспечения — во многих случаях вы можете обойтись редактором кода и компилятором .
Однако для более продвинутых игр может потребоваться очень мощное и специфическое программное обеспечение, такое как программы 3D-моделирования и редакторы изображений . Это продвинутое программное обеспечение может стоить дорого, а это значит, что вам нужно внимательно следить за своим бюджетом.
Обратите внимание, что вам также понадобится компьютер с высококачественным процессором и большим объемом оперативной памяти для запуска большей части программного обеспечения, необходимого для создания сложных игр.
Шаг 4: Начало программирования
После того, как вы загрузили необходимое программное обеспечение, пришло время начать кодирование ! Хотя для более сложных игр требуются игровые движки, для простых мобильных игр ничего подобного не требуется. Просто решите, на каком языке вы собираетесь писать свою игру, и сразу приступайте к делу!
Если вы хотите узнать, как создать видеоигру с множеством вариаций, например, ролевую игру, то вам следует обратиться к Unity Video Game Creation Tutorial .Этот курс содержит невероятные 28 часов видеолекций. Он научит вас всему, что вам нужно знать, чтобы начать использовать редактор Unity.
Шаг 5: Проверьте свою игру и начните маркетинг!
Знание того, как сделать видеоигру, не сделает ее успешной, вам понадобится маркетинг . Первое, что вам нужно сделать, это убедиться, что вы проверили все о нем, чтобы вы могли удалить любые ошибки . Это может занять очень много времени, поэтому убедитесь, что вы готовы часами сидеть, тестируя .
Маркетинг — это относительно простой . Я бы порекомендовал нанять консультанта по маркетингу, по крайней мере, для начала, особенно если у вас нет опыта в маркетинге. Сделать вашу игру доступной для покупки людьми немного сложнее, и у вас есть несколько вариантов:
- Создайте веб-сайт, на котором люди могут приобрести вашу игру для загрузки.
- Создавайте бумажные копии своей игры и распространяйте их через различные игровые магазины и других розничных продавцов.
- Если вы создали мобильную игру, убедитесь, что вы разместили ее в магазине приложений Apple и магазине Google Play.
Это лишь некоторые из ваших возможностей. Опять же, поговорите со специалистом, если вы не уверены, как лучше всего продать свою игру.
Какие языки я могу использовать для создания видеоигры?
Простые мобильные игры могут быть созданы с использованием широкого набора языков программирования . Если вы владеете одним языком, у вас, вероятно, достаточно знаний, чтобы научиться создавать видеоигры для мобильных устройств .
Однако более сложные игры, разработанные для компьютеров или консолей , потребуют гораздо более глубокого понимания языков программирования и того, как их можно использовать для разработки игр. Вот несколько языков, которые вы можете использовать для создания своей собственной игры:
JavaScript
Изучить , как создать игру с помощью JavaScript, довольно просто . Как отмечалось выше, вы можете создавать простые мобильные приложения и игры, сочетая JavaScript, HTML и CSS с платформой PhoneGap .
Миллионы людей во всем мире уже имеют рабочие знания JavaScript , что означает, что у них уже есть большинство навыков, которые им необходимы, чтобы начать создавать свои игры.
Однако не стоит беспокоиться, если у вас еще нет серьезных практических знаний в области JavaScript — на самом деле, научиться создавать свою собственную игру может быть еще проще, если у вас нет никаких вредных привычек .
Я бы порекомендовал начать с простого курса JavaScript, такого как , этот учебник по JavaScript , прежде чем переходить к чему-то особенному для создания игр, например, PhoneGap, который также можно найти в разделе наших курсов.
Если ваших знаний после завершения этого курса недостаточно, вам следует продолжить обучение. После завершения курса вы можете пройти курс Intermediate JavaScript course , чтобы еще больше расширить свои знания.
Ява
Java — самый популярный язык программирования для создания игр для Android . В сочетании с Android Studio Java может использоваться для создания игр, полностью адаптированных к внешнему виду и поведению .Игры, построенные на Java, быстрые, эффективные и очень простые в настройке.
Если вы серьезно относитесь к тому, чтобы научиться создавать видеоигры для устройства Android, первое, что вам нужно сделать, это научиться программировать на Java. К счастью, Java — довольно простой язык для изучения. Я бы порекомендовал начать с обширного курса Java .
Swift
Swift — это относительно новый язык программирования , разработанный для использования в операционной системе iOS.Он был создан, чтобы упростить разработку приложений и игр для iOS , чем раньше, , и быстро стал фаворитом среди программистов, впервые изучающих создание игры.
Если вы хотите научиться создавать видеоигры для устройств iOS, я бы рекомендовал научиться писать код на Swift . Конечно, можно создать игру или приложение для iOS вообще без каких-либо знаний в области программирования, но программирование собственной игры дает вам гораздо больше свободы и гибкости, когда дело доходит до настройки.
Если вы хотите узнать больше о Swift и о том, как вы можете использовать его для создания своих приложений для iOS, ознакомьтесь с Beginner Friendly Swift Tutorial.
Языки C
Языки C — C, C # и C ++ — являются наиболее часто используемыми языками , когда речь идет о продвинутой разработке игр и программного обеспечения . Большинство консольных и настольных компьютерных игр построены с использованием одного или нескольких языков C.
Однако это очень сложные и трудные для изучения .Я бы не рекомендовал начинать с них, если вы не очень серьезно относитесь к тому, чтобы научиться делать видеоигры и превратить это в карьеру.
Если вы хотите изучить , как создать игру на языке C , я бы посоветовал взглянуть на курс Как создать игру в Unity. Этот курс обучает основам C # с особым упором на разработку игр.
Какие еще навыки мне нужно освоить?
Если вы серьезно относитесь к обучению программированию игры, вам нужно будет выучить больше, чем просто язык программирования .Вам нужно будет узнать, как использовать различные типы программного обеспечения, фреймворков и библиотек кода для создания даже самых простых игр.
Ниже приведены лишь нескольких наиболее важных навыков, которым нужно научиться, чтобы начать работу.
Как всегда, помните, что разные типы игр требуют разных навыков и знаний.
Как использовать различные типы программного обеспечения
Как я уже отмечал, программное обеспечение является ключевым элементом создания видеоигры. Это особенно верно, если вы надеетесь создать консольную игру .
Одним из наиболее распространенных программных продуктов, которые вы будете использовать, когда учитесь кодировать видеоигры, является Unity — кроссплатформенный игровой движок , который ляжет в основу множества различных типов игр . Вот список программ для создания игр , чтобы облегчить вам выбор.
Если вы хотите узнать больше об использовании Unity для создания вашей первой игры, ознакомьтесь с руководством Как создать игру в Unity .
Также можно зайти на сайт Unity и осмотреться. Проведите небольшое исследование относительно типа игры, которую вы хотите создать, и узнайте, с каким программным обеспечением вам нужно ознакомиться в соответствии с вашими выводами.
Некоторые навыки дизайна
Если вы планируете научиться создавать видеоигры самостоятельно, вам понадобятся хотя бы некоторые навыки дизайна. Собирать видеоигру — это примерно на больше, чем просто кодировать — на самом деле, кодирование даже не начинается, пока вы не концептуализируете и не начнете проектировать свою игру !
Если у вас нет дизайнерских навыков, подумайте о том, чтобы либо попросить друга стать вашим партнером, либо нанять дизайнера, с которым вы можете работать.
Однако не забывайте, что вы можете научиться чему угодно, если у вас есть время и силы, чтобы сэкономить . Ознакомьтесь с некоторыми курсами проектирования на edX , Coursera или Udacity .
Самые популярные результаты
Просмотрите нашу коллекцию наиболее подробных статей, руководств и учебных пособий, связанных с платформой онлайн-обучения. Всегда будьте в курсе и принимайте взвешенные решения!
Что теперь?
Научиться создавать свою игру с нуля может быть весело, полезно и чрезвычайно сложно .Однако, если вы интересуетесь программированием, играми или просто предпринимательством в целом, этим стоит заняться.
Начните с понимания общего процесса , который должен иметь место для создания игры. Даже самую простую игру нужно придумать и осмыслить . Эту концепцию необходимо преобразовать в подробный проектный документ, а затем этот документ необходимо использовать для написания кода игры, которую вы хотите.
Если вы еще не знаете, как программировать хотя бы на одном языке , вам нужно потратить несколько месяцев на изучение этого , прежде чем думать о создании игры.
Вам также потребуется ознакомиться с игровыми движками, такими как Unity . Кроме того, вам нужно будет убедиться, что вы работаете с кем-то, у кого есть хотя бы некоторые дизайнерские навыки.
Прежде всего, не позволяйте большой картине пугать вас. Начни с малого . Сделайте карточную игру, игру в слова или что-нибудь столь же упрощенное. Просмотрите более курсов разработки игр edX и начните один.
Помните, научиться создавать видеоигры с нуля — это не то, чем вы можете заниматься за один уик-энд, но это окупится, если вы приложите достаточно усилий!
Оставьте свой честный отзыв
Оставьте свое искреннее мнение и помогите тысячам людей выбрать лучшую платформу для онлайн-обучения.Все отзывы, как положительные, так и отрицательные, принимаются, если они честны. Мы не публикуем предвзятые отзывы или спам.