C# — А давайте делать игру!


Содержание

Двумерная графика. Проектирование игр

Начала анимации. Движение шара на бильярдном столе

Постановка задачи. Требуется запрограммировать движение шара или шаров на бильярдном столе без учета трения, но с учетом упругого отражения от стенок бильярда. Границы стола — прямоугольник, без луз. Начнем проектирование приложения с определения объектов и классов. Объектами являются бильярдный стол (пусть это будет форма) и шар(ы), для описания которых объявим класс Sharik, эти объекты взаимодействуют …

Кривая Безье и метод де Кастельжо

Впервые кривые были представлены в 1962 году французским инженером Пьером Безье (Рено), который, разработав независимо от де Кастельжо (Ситроен), использовал их для компьютерного проектирования автомобильных кузовов. Кривые были названы именем Безье, а именем де Кастельжо назван разработанный им рекурсивный способ определения кривых. Впоследствии это открытие стало одним из полезных инструментов компьютерной графики. Четыре опорные точки P0 …

Игра «Вторжение НЛО»

Итак, вы уже готовы (идейно и технически) к созданию игры с использованием 2D-графики и идей объектно-ориентированного программирования в среде Visual Studio C#. Начнем с создания достаточно простого шутера «Вторжение НЛО» («UFO Invasion»), в котором придется отражать нашествие на Землю армады НЛО. Дальнейшее ее развитие вы сможете выполнить самостоятельно. Проектирование шутера начинается с разработки сценария, после …

Луна за забором

Типичная задача анимации, когда движущийся объект (например, Луна) становится невидимым за неподвижными объектами (горами, домами, забором). Используем наш опыт зашиты областей холста (пример с парапланами) с анимацией. Установку забора свяжем с одним событием — кликом на форме, а анимацию — с другим событием — нажатием кнопки «Ночь».

Анимация-шутка «Заход Луны»

Иногда бывает полезна психологическая разгрузка. Добавим в класс Form1 метод, который будет вызываться при возникновении некоторого события, например, клика на форме. Тогда в течении некоторого времени в окне формы можно будет наблюдать заход Луны. Первая реакция пользователя — компьютерный вирус. Однако все последствия от его действия — перекраска фона формы (добавка двух операторов позволит избежать …

Двумерная графика. Проектирование игр

Двумерная графика на C#, классы Graphics, Pen и Brush Пример рисования в C#. «Кораблик» Рисование контура и закраска области, ограниченной ломаной прямой Рисование сплайнами и кривыми Безье Кривая Безье и метод де Кастельжо Рисование и защита произвольных областей на холсте Начала анимации. Движение шара на бильярдном столе Спрайтовая анимация Анимация-шутка «Заход Луны» Луна за забором …

Спрайтовая анимация

Цель примера — показать способ рисования спрайтов в динамике. Спрайт (англ. Sprite — фея; эльф) — графический объект в компьютерной графике, чаще всего — растровое изображение, которое можно отобразить на экране. Предварительные действия. Создадим в Paint три изображения на белом фоне, каждый размером 100х100 пикселей. Нарисуем (без рамок) в первом квадрате красный круг, во втором …

Рисование и защита произвольных областей на холсте

Постановка задачи. Часто бывает необходимо изображение разделить на две составляющие: предметы (движущиеся) и фон (неподвижный), или наоборот, неподвижный забор с дырками в нем и некоторые предметы, двигающиеся за ним. Форма дырок в заборе может быть произвольная, как и форма движущихся предметов. В предыдущем примере была продемонстрирована возможность задания произвольных контуров предметов, теперь мы перейдем к …

Рисование сплайнами и кривыми Безье

Постановка задачи. Требуется рисовать объекты 2d-графики, используя плавные кривые. Обсуждение. В примере с корабликом мы уже рисовали окружности и сектора, хотя очевидно они не исчерпывают все необходимые нам графические объекты. В этом примере мы продемонстрируем другие варианты решения этой задачи. Ключевыми понятиями будут сплайн и кривая Безье.

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

В предыдущем примере («Кораблик») мы использовали простые и очевидные методы рисования графических объектов класса Graphics, такие как FillRectangle() — закрасить прямоугольник, FillPie() — закрасить сектор и DrawEllipse() — нарисовать эллипс. Чуть более сложный метод FillPolygon() — закрашенный полигон. Постановка задачи: «Требуется нарисовать в небе несколько парапланов, имеющих разные цвета и размеры».

Учебник 3. Создание игры «Подбери пару!» Tutorial 3: Create a matching game

В этом учебном руководстве вы создадите игру «Подбери пару!», в которой игрок должен подобрать пару скрытым значкам. In this tutorial, you build a matching game, where the player must match pairs of hidden icons.

В этом учебнике приведены примеры как на C#, так и на Visual Basic, поэтому обращайте внимание на информацию, которая относится к используемому вами языку программирования. This tutorial covers both C# and Visual Basic, so focus on the information that’s specific to the programming language that you’re using.

В этом учебнике выполняются перечисленные ниже задачи. This tutorial walks you through the following tasks:

сохранять объекты, например значки, в объекте List ; Store objects, such as icons, in a List object.

использовать цикл foreach в C# или цикл For Each в Visual Basic для перебора элементов в списке; Use a foreach loop in C# or a For Each loop in Visual Basic to iterate through items in a list.

отслеживать состояние формы с помощью ссылочных переменных; Keep track of a form’s state by using reference variables.

создавать обработчик событий, который можно использовать для нескольких объектов; Build an event handler to respond to events that you can use with multiple objects.

создавать таймер, который отсчитывает время и вызывает событие ровно один раз после запуска. Make a timer that counts down and then fires an event exactly once after being started.

По завершении приложение должно выглядеть следующим образом. When you finish, your app should look similar to the following image:

Заголовок Title ОПИСАНИЕ Description
Шаг 1. Создание проекта и добавление таблицы в форму Step 1: Create a project and add a table to your form Начните с создания проекта и добавления элемента управления TableLayoutPanel , чтобы все элементы управления были правильно выровнены. Begin by creating the project and adding a TableLayoutPanel control to keep the controls aligned properly.
Шаг 2. Добавление случайного объекта и списка значков Step 2: Add a random object and a list of icons Добавление объектов Random и List для создания списка значков. Add a Random object and a List object, to create a list of icons.
Шаг 3. Назначение каждому элементу управления Label случайного значка Step 3: Assign a random icon to each label Случайным образом назначьте значки элементам управления Label , чтобы каждая игра отличалась от остальных. Assign the icons randomly to the Label controls, so that each game is different.
Шаг 4. Добавление обработчика событий Click к каждому элементу управления Label Step 4: Add a click event handler to each label Добавление обработчика события Click , изменяющего цвет метки, которую щелкнули. Add a Click event handler that changes the color of the label that is clicked.
Шаг 5. Добавление ссылок на элементы управления Label Step 5: Add label references Добавление ссылочных переменных для отслеживания меток, которые щелкнули. Add reference variables to keep track of which labels are clicked.
Шаг 6. Добавление таймера Step 6: Add a timer Добавьте таймер в форму, чтобы отслеживать время, прошедшее с начала игры. Add a timer to the form to keep track of the time that has passed in the game.
Шаг 7. Отмена исчезновения пар значков Step 7: Keep pairs visible Отмена исчезновения пар значков, если выбрана одинаковая пара. Keep pairs of icons visible, if a matching pair is selected.
Шаг 8. Добавление метода для проверки того, выиграл ли игрок Step 8: Add a method to verify whether the player won Добавление метода CheckForWinner() для проверки, выиграл ли игрок. Add a CheckForWinner() method to verify whether the player won.
Шаг 9. Изучение других возможностей Step 9: Try other features Изучение других функций, таких как изменение значков и цветов, добавление сетки и добавление звуков. Try other features, such as changing icons and colors, adding a grid, and adding sounds. Увеличение игрового поля и изменение настроек таймера. Try making the board bigger and adjusting the timer.

Кроме того, вы можете найти отличные бесплатные учебные видеоматериалы. There are also great, free video learning resources available to you. Дополнительные сведения о программировании на языке C# см. в разделе Основы C#. Разработка для начинающих. To learn more about programming in C#, see C# fundamentals: Development for absolute beginners. Дополнительные сведения о программировании на Visual Basic см. в руководстве Основы Visual Basic. Разработка для начинающих. To learn more about programming in Visual Basic, see Visual Basic fundamentals: Development for absolute beginners.

Следующие шаги Next steps

Начните работу с руководством с шага 1: Создание проекта и добавление таблицы в форму . To begin the tutorial, start with Step 1: Create a project and add a table to your form.

Выбор редакции

Суперспойлер 7. «Войны миров.

Что посмотреть из фильмов.

Т-4 – самолет, опередивший.

Рецепт: Как сделать игру и стать инди разработчиком

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

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

1. Умения

Стоит начать с простого осознания, что кроме мечты и идеи вы должны уметь делать игры, или хотя бы обладать базовыми знаниям в программировании или геймдизайне. Это подразумевает, что вам нужно выучить как работать в С++,Objective-C, или C#. Умение «баловаться» с такими известными движками как Unity, Unreal Engine или Source. Этот тот пакет знаний, который поможет вам непросто написать свою игру, а пойти работать в любую студию. Практиковаться также можно в написании скриптов, создании уровней в тех же RPG Maker, Unity или попытаться сделать моды, например, для Skyrim.

Благо можно найти много курсов по изучению языка программирования – поэтому все зависит от желания. Если вам уже трудно принять этот факт, то вспомните Дина Додрилла, создателя Dust. Он так горел желанием сделать игру, что начал самостоятельно изучать программирование, совершенно не зная математики, но посещая курсы.

2. Сюжет и Геймплей

Обладая умениями, вы должны сконцентрироваться на идее. Она должна быть свежей, которой мир раньше не видел. Однако искать источники вдохновения не всегда можно лишь в голове. Посмотрев вокруг, на свою жизнь, вам может прийти идея, которую вы воплотите в своей игре. Вспомните Лукаса Поупа и Papers, Please – создатель взял за основу свой скучный опыт прохождения проверки документов на КПП, летая из страны в страну, и сделал на ее основе напряженную историю.

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

3. Заимствуйте, наследуйте, но не бойтесь менять все на корню

Не забывайте, что многие механики, геймплейные особенности, скорее всего, давно придумали до вас, и не бойтесь использовать их. Яркий пример Дайскэ Амаей , который создал свою Cave Story наследуя принципы Castalvania и Metroid, разбавив ее интересным сетингом и прописанными персонажами. Он просто хотел создать хорошую игру на свой лад, на основе тех, которые ему нравились.

Точно также поступил Эрик Барон, взявший казуальный жанр фермы и превратил его в новый интересный проект, поменяв механики, и подарил миру Stardew Vallеy.

Или идите дальше – меняйте жанр. Когда Тоби Фокс создавал Undertale, он поменял в принципе понятия боев в RPG и дал возможность вместо драки говорить с врагами, искать пути как не убить противника. Он взял механику боя из Покемонов и ранних RPG, сделав акцент на другом.

4. Делайте упор не на графику, а на атмосферу

Да, сегодня некоторые могут сказать, что любой возомнивший себя инди разработчиком делает ретроподобуную меинстримную игру, которая теряется на фоне таких же. Однако если вы не обладаете умениями рисовать это не страшно. Маркусу Персону это не помешало создать Minecraft. Главное – это ваша идея, ее глубина и посыл.

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


5. Рассказывайте, что вы разработчик – делитесь этим

Так вы можете найти тех, кто поддержит вас, ваших единомышленников. Вот пара примеров.

80-тые. Молодой программист Сид Мейер. Занимается тем, что программирует кассовые аппараты. Однажды он знакомится с бывшим летчиком ВВС США, который играл на аркадном автомате в симулятор пилота Red Baron Биллом Стилем. Они разговорились, и в тот вечер Сид не один раз уделал его в этой игре. Бил поразился, как такое возможно, что он, бывший летчик, ему проигрывает. На что Сид ответил, что как программист понял слабые места игры и вообще, может сделать игру в сто раз лучше. Как оказалось Бил был бизнесменом, и так началось их сотрудничество: Сид – студия Билл – издатель. Сегодня это сотрудничество привело к тому, что все вы знает, кто такой Сид Мейер.

Эдмунд МакМиллен всегда любил рисовать. В нулевых занимался тем, что делал своеобразные анимации и флеш игры, одной из которых стала Meat Boy. На одной из выставок он познакомился с таким же своеобразным одиночкой разработчиком Томми Рефенесем. Они подружились, организовали дуэт Team Meat, и объединив свои умения выкатили культовую Super Meat Boy.

6. Продакшн, пиар, финансы и еще раз продакшн

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

  • Выставляйте игру на Kickstarter, Green Light Steam
  • Делайте бета тесты
  • Выкладывайте демо версии в свободный доступ
  • Посещайте с проектом игровые выставки

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

И запомните главное: Не бросайте игру, а делайте до самого конца, не обращая внимание на пустую критику.

На каких языках программирования пишут игры

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

Игру можно написать на чем угодно:

У каждого языка свои преимущества, поэтому не стоит думать, что какой-то один будет лучше остальных — они используются для решения разных задач. А вот чтобы выбрать, какой подойдет вам, давайте разберемся в нескольких моментах.

Что из себя представляет игра

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

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

«В таверне вам рассказали о пещере с сокровищами, из которой никто не возвращался живым. Откройте страницу 6, чтобы продолжить выпивать, или страницу 312, если хотите пойти в пещеру.»

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

Реализовать такое можно на чем угодно, потому что все языки могут обрабатывать действия пользователя, но лучше всего подойдет HTML (хотя это даже не язык программирования) — на нем можно создать подобную игру за 10–15 минут.

Браузерные игры

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

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

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

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

Так игрок всё больше и больше втягивается, а потом осознает, что достиг9000 уровня в «Ультра-фермер Одноклассников онлайн», потратив несколько тысяч рублей.

Многие из таких игр создаются на Flash, который работает на языке ActionScript. Мы не рекомендуем изучать эту технологию, потому что скоро ее поддержка будет прекращена, а на HTML5 появится еще больше возможностей, чтобы полностью ее заменить.

Примеры браузерных приложений

Игры для мобильных устройств

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

Это компенсируется относительной простотой разработки. Можно скачать какой-нибудь популярный движок и за несколько недель выпустить готовое приложение — это программы, которые предоставляют готовые решения для работы с графикой и физикой. Разработчику остается только добавить спрайты или модели, а потом прописать несколько скриптов на одном из предложенных языков. Можно даже не заморачиваться из-за всех ресурсов, потому что их можно скачать или купить в интернете.

Unity, один из самых популярных движков, дает возможность писать на C# и JavaScript, а до пятой версии поддерживался и Boo. Подключаете скачанные файлы, пишете несколько команд — и простенькая игра готова.

  • Живая обратная связь с преподавателями
  • Неограниченный доступ к материалам курса
  • Стажировка в компаниях-партнёрах
  • Дипломный проект от реального заказчика
  • Гарантия трудоустройства в компании-партнёры для выпускников, защитивших дипломные работы

Примеры мобильных игр

Компьютерные и консольные игры

Тут настоящий размах. Невероятно реалистичная графика, VR, большой игровой мир, поддержка огромного количества игроков онлайн и так далее. Можно создавать небольшие проекты вроде Limbo или Super Meat Boy в одиночку, а можно в команде разрабатывать новый Fortnite.

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

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

Без движков тоже можно обойтись: World of Warcraft был написан на C++. Также можно сделать всё самому: Minecraft был создан одним человеком на Java, а после игру купила компания Microsoft за 2,5 миллиарда долларов.

Что уж говорить, если даже Super Mario написали на Ассемблере, когда о движках никто и не задумывался.

Примеры компьютерных игр

Какую роль в гейм-разработке играют языки

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

Представьте, что у вас есть 3D-модель персонажа. Пока от нее нет толка. Если вы хотите, чтобы она начала двигаться, нужно написать код. Этот скрипт должен отлавливать действия игрока, а потом передавать команду модели персонажа.

Например, вы ловите все нажатия, а потом определяете, что это была за кнопка. Если это стрелочка влево — персонаж должен идти налево. Рассмотрим на примере JavaScript.

player.x++; //Меняем координаты

playerAnimate(player.x); //Вызываем функцию анимации

case 38: //У каждой кнопки есть свой код.38 — стрелочка влево

playerMove(“left”); //Вызываем функцию движения


case 39: //Стрелочка вправо

playerMove(“right”); //Вызываем функцию движения

Если пользователь нажмет нужную кнопку, то его персонаж передвинется на другие координаты, а потом будет вызвана функция анимации. На JavaScript в основном работают с 2D или псевдо-3D, поэтому останавливаться на моделях мы не будем.

Программный код также запускает музыку в нужный момент:

audio.play(); //Запустить аудио

Или вызывает какое-то развитие событий. Например, если пользователь нажмет клавишу E, указав мышью на NPC, то откроется диалоговое окно, в котором можно поторговать или узнать слухи.

В играх почти все завязано на скриптах:

  • NPC нападет, если увидит вас, а до тех пор он будет патрулировать местность по заданному маршруту.
  • Мина взорвется, если вы на нее наступите.
  • Веревочный мост начнет раскачиваться, если по нему пробежать.
  • Враги включат тревогу, если услышат выстрел.
  • Кат-сцена запустится, если вы войдете в какую-то область.

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

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

Какой язык выбрать для разработки игры

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

  • Swift — игры на iOS или MacOS.
  • PHP и JavaScript — браузерные игры.
  • C# — игры на Unity.
  • С или C++ — большие требовательные игры.

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

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

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

Если вы создаете игру впервые, воспользуйтесь каким-нибудь движком:

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

А давайте создадим игру своей мечты ..

Что должен содержать диздок зависит от жанра игры и от личных предпочтений. Например, если создаётся РПГ (не важно какая), то в диздоке должно быть:
1) ролевая система. Должно быть полностью расписано какими характеристиками обладает любой персонаж/сущесво, как именно влияют характеристики на показатели и навыки (если влияют), как именно применяются навыки, что они конкретно делают. Если РПГ классическая, то как в неё происходит действие: по ходам, по очкам действия? и т.д. Если экшн-РПГ, то нужно расписывать какие действия насколько быстро происходят относительно друг друга, как они будут управляться с контоллера.
Конкретные числа сначала писать не стоит, так как при создании игры их всё равно придётся изменять и подгонять.
Иными словами, ролевая система представляет собой законы и принципы действия игровой механики. Ну, например, Master’s + Player’s Handbook D&D — готовая ролевая система, «бери и пользуйся».
2)сеттинг. Мир происходящего, желательно расписан не только в словах, но и в артах (история, мифология, населяющие мир существа, основные места, телогия, философия, культура, архитектура).
3) как происходит перемещение по миру (по локациям, открытый мир, где происходят подгрузки и так далее)
4) сюжет. Описан основной сюжет, помесено есть ли где-то возможные ответвления, связанные с наборами навыков.
5) предметы. Какие предметы/аммуниция есть в игре.
6) стиль и дизайн персонажей, их одежды (опять же лучше, а вернее — обязательно, в артах

Это основные положения для РПГ. Что касается квестов и самого мира, расписанного «от полюса до полюса», то это сначала придумывать вовсе не обязательно, так как это очень большая работа и делать её лучше во время непосредственно разработки.
Ещё нужно придумать какая будет музыка и звуковое оформление, но, опять же в диздок это писать вовсе не обязательно — это можно и так, на словах, объяснить.

Создание 2D и 3D игр на C#

C# («си шарп») – востребованный и многофункциональный язык программирования. Hа нем пишутся самые разные приложения: от небольших десктопных программ до крупных веб-порталов и веб-сервисов, обслуживающих ежедневно миллионы пользователей.

Чтобы создать свою первую игру на C#, совсем не обязательно знать язык досконально. На занятиях курса ваш ребенок овладеет набором несложных приемов, познакомится с основными принципами создания игры и сумеет быстро достичь результата — создаст собственную 2D или 3D-игру на C#!

Курс «Создание 2D и 3D игр на C#» рекомендован каждому коддику от 12 лет, потому, что он:

  • освоит универсальный, применяющийся во многих языках программирования, синтаксис;
  • познакомится с редактором визуальных компонент wysiwig;
  • создаст с нуля свою первую 2D-игру или 3D-игру.

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

Еще немного о преимуществах C#:

  • Современность. Асинхронное программирование, анонимные типы, лямбда выражения, type inference, функциональное программирование и LINQ – все это позволяют писать выразительный и легко поддерживаемый код и превращает скучное, монотонное и щедрое на ошибки программирование в простое и приятное занятие.
  • Мощные возможности. C# сочетает простоту и выразительность современных объектно-ориентированных языков (вроде Java) c богатством возможностей и мощью C++.
  • Автоматическое управление памятью. Разработчику не нужно управлять памятью вручную и он может сосредоточится на реальных задачах.
  • Надежность. C#-разработчики не ждут падения программы после запуска для поиска очевидных ошибок, компилятор делает это за них.
  • Простота изучения. Научиться программировать на C# очень просто – огромное количество доступной документации поможет разобраться с любой проблемой.
  • Скорость. C# сочетает высокую продуктивность с производительностью низкоуровневого языка.
  • Кросс-платформенность. На C# пишут под iOS и Android, а также для многих встраиваемых, десктопных и серверных платформ. Суперпопулярный игровой движок Unity поддерживает C#.

Объектно-ориентированное мышление (2014)
Автор: Мэтт Вайсфельд
Скачать книгу на английском — здесь.

Как мы понимаем, что учащийся освоил программу?

Во время обучения мы оцениваем как практическую сторону вопроса (как это сделать?), так и понимание темы (почему и зачем).

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

С помощью чего писать игру на c#?

Я в программировании новичок и хочу сделать какую-нибудь примитивную 2d игру не на unity, а с нуля, просто для себя (хочу изобрести велосипед).

Так вот, на WinForms нашла такой способ: по таймеру постоянно повторяется перерисование карты, карта рисуется в picturebox. Ну и сама карта — массив ячеек 300 на 300, в picturebox легко можно в квадрате любого размера и в любом месте добавить картинку или залить цветом. Так вот, оно то работает, карта рисуется и видно, как персонаж ходит, но я понятия не имею, на сколько это рационально. Ну и есть WPF, где говорят, что окошки рисуются с помощью видеокарты и все вроде бы круто и можно было бы там все сделать, вот только picturebox там нету. А то, что есть, не подходит.

Мне нужно, чтобы можно было создать цикл и внутри цикла высчитывать координаты и размер квадрата, и в данном квадрате залить цветом или нарисовать определенную картинку. Есть ли в WPF что нибудь, где можно так сделать? И рационально ли использовать WPF для такого? Если нет, то где можно писать мелкие 2d игры (с нуля, не на готовом движке)?

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

Чуть меньше недели назад я выпустил игру. Если делать обзор в одно предложение, то можно описать, как «то еще говно, но хотя бы не гринлайт».

О чем буду тут писать?

Кратенько, но с подробностями от момента «Бля, ЯЖПРОГРАМИСТ» до момента «МНЕ НУЖНЫ ВАШИ ДЕНЬГИ».

Как все началось.

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

Вы спросите, как же ты пришел к тому, чтобы сидеть и работать по 8 часов день над куском дерьма?

Почти ровно год назад, я увидел на канале Юзи(тот, который бесполезный рот) видео, где он создал какую-то херню на движке UE4(Unreal Engine 4). Это была комната, с парой дверей, которые открывались, когда внутри триггера находилось что-то. В этот момент я подумал что-то вроде «О, а это прикольно. Учитывая, что он даже не программист».

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

Ну это легко, просто идешь в ютубесы и пишешь «Туториал по EU4». Все, что я делал следующие 4-5 месяцев это учился по туториалам, и поглощал инфу связанную с геймдевом.

Знаете, как мудрые мира сего говорят «Найди такую работу, чтобы уставать, но не заебываться, но при этом хотеть работать еще»?

Я живу этим чувством уже год. UE4 работает на плюсах(С++) и блюпринтах. Я изучал именно их. Слава богу что UE очень дружелюбная среда для новичков. Там уже есть прекрасный контроллер и уже можно побегать как в шутере. Мой пик тогда был пару выставленных на сцене кубиков, типа комнаты, и лампа, которая включалась когда ты проходишь в триггер.

Еще было не похоже на игру, но уже что-то. Потом я перешел к тому что хотел попробовать сделать что-то похожее на игру. Купил моделек закинул в движок, пытаюсь поменять стандартного белого чувака на мою модельку — Краш. Два дня попыток фикса ни к чему не привели, разве что к разочарованию в своем компьютере. Это еще не раз станет краеугольным камнем. Если что проблема была в видео карте.

Что же я сделал? Сменил движок.

Юнити работал гораздо лучше. Летальных крашей, которые хер пойми, как фиксить, за пол года пользования было 2, в сравнении с 5 UE4 за 3 месяца это очень круто. Юнити работает на решетке(через е). Вообще С#, но это слишком не интересно. Для меня лично большой плюс, ибо там все работает на стандартном коде, а не табличке. Единственное отличие только в том, что с ним ты чувствуешь себя супер пиздатым уникальным хацкером(даже при учете, что некоторые скрипты буквально по 4 строчки).

Снова идем в ютуб, снова ищем туторы, снова сидим по 5 часов делая хер пойми что. НО! Теперь то я знаю все основы. Так что я нашел самый простейший пример тутора, где делалась реально игра.

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


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

Но мне нужна была цель. Дедлайн. К концу года я должен был сделать игру.

И тут началось самое интересное. Сентябрь. Я собираюсь делать игру. На мне сложное универное задание по программированию, плюс еще и собираются отправлять в Астану на четверть финал чемпионата мира по программированию. Ничего того, меня выбрали с расчетом на «ну он же чето тыкает по клаве, пусть едет». Если что я там просто день писюны попинал да и все. Доделав за две недели задание, я узнал, что я должен сделать еще одно задание, которое еще сложнее. Так что мне пришлось придумывать и программировать игру и делать программу для тестирования одновременно.

Ладно приступим к идеи игры. Итак что у нас по бюджету? Пару бутеров с колбасой. Хватит.

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

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

Почему мне нужен был сюжет?

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

Итак, как сделать историю про ничто, нигде, но чтобы с простым но сюжетом?

Да легко. Итак у нас есть портал. В него надо проходить. Как нам подавать текст? У нас же не будет катсцен и персонажей. Поэтому только черный экран и белый текст. Отлично. Черный экран это будет якобы пустота между уровнями. Тогда получается что уровни это миры? Видимо да. И игрок путешествует через миры. Круто. Что объединяет миры? Какой-то персонаж. Пусть он будет обитать в пустоте между мирами. И создавать эти миры. Что его может волновать? Чего же он хочет? Все это надо придумать и связать. А какая будет мысль у всего произведения? Это тоже нужно придумать. Ах да, нужно еще понапихать параллелей, которые никто не увидит, только потому что я могу. Итак у нас получился персонаж Сознание. Эфемерное существо, которое озабоченно своим существованием.

Думаете это легко? Чтобы придумать это и написать 4.5 страницы текста я потратил 2 недели.

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

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

А че у нас там по левел дизайну?

Ну как сказать. То что я прочитал с десяток статей по геймдизайну и левелдизайну меня мастером не сделало. Но еле как придумать 7 уровней я смог(столько уровней нужно было для истории). Они все получились более менее разнообразные. Более менее интересные. Если конечно это вообще можно говорить о проекте такого уровня.

Рубрика: Создание игр

Научились делать модели? Все – все можете? А давайте делать игры! Нас будут интересовать FPS – игры, то есть first person shooters или шутеры от первого лица.

Displacement шейдеры. Тесселяция.

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

Shader Forge. Продвинутые шейдеры.

Всем доброго времени суток. Основа по использованию шейдеров и материалов у нас уже есть. Осталось только научиться делать более умные шейдеры со всякими плюшками. В Asset Store сейчас есть немало редакторов для этих целей. Например, Strumpy Shader Editor. Им не пользовался, но видел примерную структуру – логика там немного непонятна с первого взора. Но по нему в интернете уже достаточно уроков, так что мы попытаем счастье в Shader Forge.

Шейдеры и материалы.

Привет всем! С освещением мы разобрались, так что можно перейти к материалам, чтобы было, что освещать. [По пути я буду обращаться к документации]

У нас есть два понятия: шейдер и материал.

Шейдер – код на далеком для нас языке, но, даже увидев его, вы поймете, что по большей части это перечисление свойств: какой цвет у объекта, текстура, как сильно он отражает свет, отражает ли он окружение и прочее. Разумеется, мы можем изменить все эти характеристики на уровне кода, но зачем? Проще создать некий инструмент для манипуляции этим кодом. Вот такой инструмент и называется материалом. Создать его просто: в коне Project -> Create -> Material. Его можно переименовать. Назначить материал можно просто перетащив его на окно Inspector при выделенном объекте или же прямо на объект. Но мы пойдем более сложным путем.

Lightmapping. 2 часть.

Всем привет! В прошлом уроке мы разобрались с режимом расчета Lightmapping. Теперь рассмотрим все остальные настройки. Благо, что для всех режимов они одинаковы.
Читать далее Lightmapping. 2 часть.

Lightmapping. Запекание теней.

Всем привет! Мы постепенно делаем игру привлекательнее, и одним из факторов создания красивой сцены является запекание теней. Это процесс несложный и представляет собой расчет непрямого освещения в среде разработки проекта, т.е. не Real-time.

Motion Blur Эффект. Unity3D.

Всем привет. Думаю, что эффект Motion Blur вам известен. Он возникает по время быстрого движения предметов, ну или камеры (относительность движения сохраняется). Выглядит он просто – все смазывается. А работает это путем наложения рендера предыдущих кадров и текущего. Эффект наблюдается только во время игры.

Свет. Источники света.

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

Unity3D. Физика. Урок 2. Коллайдеры.

Здравствуйте.
В этом уроке мы закрепим имеющиеся знания о коллайдерах.
Во-первых, это неотображаемый компонент объекта, который составляет физическое присутствие по отношению к другим коллайдерам, то есть, тела, имеющие коллайдеры взаимодействуют между собой физически. Например, персонаж не может пройти сквозь стену. Если на стене не будет висеть коллайдер, то мы сможем проникать сквозь модель. Коллайдеры бывают различные по форме. Базовые это: куб, сфера, капсула.

Unity3D. Физика. Урок 1. Rigidbody.

Всем привет. Этот урок я хочу посвятить физике в нашем любимом игровом движке.
Компоненты физики находятся в Components -> Physics.
Читать далее Unity3D. Физика. Урок 1. Rigidbody.

C# — А давайте делать игру!

Приветствую всех жителей и гостей этого замечательного ресурса.

Позвольте начать свою авторскую серию статей и уроков по теме разработки игр на C#. Я изначально предполагаю, что с языком вы знакомы. Рассматривать мы будем DirectX. От вас потребуется внимание, желание, а также следование принципу «доверяй, но проверяй».

Для начала небольшая вводная про C# и .NET. Как известно, этот язык стал в некоем смысле «козырем» новой платформы от Microsoft. Язык статически типизирован[1], реализует все принципы ООП, и если честно, со временем вызывает ООП головного мозга. Вся работа языка основана на инфраструктуре, которую предоставляет .NET. Соответственно, язык попросту не существует без .NET, как и в некотором смысле .NET не существует без C#.

Язык, который «завязан» на платформе .NET и без нее не существует, называется управляемым (от англ. managed) языком. По аналогии, программа, написанная на управляемом языке, называется управляемой программой.

Инфраструктура .NET это:

  • Среда исполнения[2] — виртуальная машина, благодаря которой работают все (без исключения) приложения, написанные на управляемом языке
  • Библиотека классов[3] — стандартная библиотека, которая доступна любому управляемому языку

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

Когда на ресурсе gamedev.ru возникают споры о языке и платформе в частности, некоторые одиозные личности утверждают, что такой подход ставит «нет» на использовании языка в сферах, где требуется высокая производительность. Очевидно, что такие люди просто не в курсе, как работает исполняемая среда. В любом случае, так однозначно утверждать про производительность нельзя. Давайте разберемся, почему.

Действительно, ваш код, в процессе компиляции, переводится в промежуточный, так называемый IL-код. Затем этот код интерпретируется исполняющей средой. В этом смысле любой управляемый язык считается интерпретируемым. Но что именно происходит во время интерпретации кода? Промежуточный код, который является платформонезависимым, превращается в платформозависимые машинные инструкции[5].

Соответственно, скорость работы приложения напрямую зависит от того, как эффективно работает механизм перевода IL-кода в инструкции. Этим, в инфраструктуре .NET, занимается так называемый JIT-компилятор. В момент исполнения приложения, среде исполнения (пардон за тавтологию) известно, какая конфигурация у компьютера. Среда исполнения знает, какой установлен процессор, сколько оперативной памяти на целевой машине, а также некоторую другую информацию. По сути, это и есть так называемая «киллер-фича» .NET, благодаря которой JIT-компилятор может одержать победу над сгенерированным машинным кодом какого-нибудь компилятора к компилируемому языку* (ха, снова тавтология!).

Вот уже прошло 10 лет (первая версия .NET вышла в 2002-ом году), а мнение насчет низкой производительности все еще присутствует в сознании людей. И неспроста. Компания-миллиардер, которая воротит миллионами, так и не смогла найти адекватных людей, которые написали бы вменяемый компилятор. В сети можно найти тесты, где, по сути, сравнивается работа JIT-компилятора и других. Правда не спутайте с тестами, где так же учитывается работа с памятью. Я приведу самый вопиющий случай: сравнение JIT-компилятора и студийного, от Microsoft. Здесь демонстрируется, как детище Microsoft (я про компилятор для C++ ) рвет еще одно детище того же Microsoft, JIT-компилятор.

Особую боль в районе пятой точки вызывает тест, где компилятор для C++, не используя SSE[6], рвет JIT-компилятор, который на целевом процессоре, наверняка, использовал SIMD-инструкции[7]. То есть, заранее зная, что там-то и там-то можно сгенерировать сверхоптимальный, заточенный под конкретный процессор, код, JIT-компилятор либо этого не сделал вовсе, либо сделал это не правильно. В такие моменты очень трудно оторвать ладонь от лица, но надо. Поскольку отставание не велико, а слово «рвет» я использовал для провокации

Здесь можно разводить бесконечный спор, приводя аргументы как за JIT-компилятор, так и за его оппонентов, но суть одна: JIT-компилятор, не смотря на преимущества, всегда генерирует унифицированный код, хоть и под конкретный процессор. Как это понимать? Дело в том, что он не всегда понимает, что от него требуется. Такое бывает и там, на стороне компилируемых языков. Но «там», в случае, если вы видите, что сгенерированный код неоптимален, вы имеете возможности для оптимизации. Возможности разные, вплоть до того, что вы явно можете описать, какие машинные инструкции выполнять в каждом конкретном месте.

Такие возможности в самом .NET отсутствуют, поскольку идеология не позволяет. Но такое все-таки отчасти возможно, например, в Mono[8] (это свободная реализация .NET) можно использовать SIMD[9][10]. Короче говоря, отдавая полномочия среде исполнения, вы в некоторой степени теряете возможность контролировать происходящее.

Правда в C# есть малюсенькая лазейка, позволяющая спасти производительность в узкоспециализированных местах. Там присутствует так называемый unsafe-контекст, который позволяет вытворять небезопасные (с точки зрения идеологии .NET) вещи: использовать указатели. Обращение к элементу массива по указателю, например, позволяет избежать проверки на выход за пределы массива. На такой мелочи в общем итоге можно сэкономить значительное количество тактов процессора. Но в том же C++, доступ к элементам массива всегда осуществляется по указателю, без проверок. (Лень было вставлять троллфейс второй раз).

Оптимизация в .NET это штука мелочная, порой напоминающая сплошные извращения. И я еще не затрагивал тему сборки мусора. Не затрагивал…и не затрону, а то совсем запугаю новичков, которые хотят делать игры на управляемом языке. Главное, сделать один вывод: производительность .NET вещь неоднозначная, иногда она может быть не хуже, чем производительность приложения, написанного на компилируемом языке. Эта тема крайне сложная, синтетические тесты здесь не всегда объективны, но позволяют увидеть основную тенденцию: JIT-компилятор еще далек от идеала.

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

Отвечая на вопрос, а стоит ли использовать .NET, я обычно говорю следующее: «Выбирая .NET, вы теряете производительность. Выбирая .NET, вы получаете производительность».

И здесь нет опечатки, просто производительность разных порядков. Если в первом случае идет речь о производительности самого приложения, то во втором о вашей собственной. Дело в том, что синтаксически, C# гораздо чище и проще C++, а код на нем иногда получается короче, чем аналогичный на C++. А если взять в расчет еще и удобство среды разработки, в которой приходится работать, то начинаешь задумываться, а что лучше использовать: C# или C++? Как бы там ни было, я здесь буду писать для тех, кто свой выбор сделал в пользу первого.

Итак, есть .NET, есть знание C#, есть желание делать игры. С чего начать? Я познакомился с программированием году в 2003-ем, когда в моем городе практически не было нормального доступа к Интернет. В наличии были лишь диал-ап модемы и, следовательно, диал-ап-интернет. В эти времена и речи не шло о скачивании каких-нибудь там видеоуроков, крутых движков (а их, собственно, в открытом доступе и не было) и тому подобному. В наличии были лишь легковесные решения, типа Blitz3D, DarkBasic, PureBasic. Тогда, все вопросы решались самостоятельно (форумы тоже были актуальны, но как по мне, рассматриваемые вопросы были в разы интереснее и сложнее), а книги — во-первых, покупались, во-вторых — изучались. Скажу честно, было круто!

Теперь же все резко поменялось: книжки покупать больше не надо, количество книг по разной тематике зашкаливает за все мыслимые и немыслимые пределы. Но кто их читает? Пройдешься по форумам в сети, видишь, что там, в основном, задаются вопросы, которые освещены на каждом программерском сайте, описаны в каждой книге по языку программирования. Новое поколение либо на самом деле какое-то несостоятельное (в смысле, шагу сделать без наставлений не могут), либо притворяются. Информация, которая буквально валяется под ногами, почему-то игнорируется. С движками тоже все круто поменялось: как сейчас помню актуальность шуток, когда новичку предлагалось игру писать не с нуля, а воспользоваться крутым движком типа Unreal Engine. (Молодым бойцам на заметку: раньше достать движок было невозможно, только лицензируя. Сейчас же — любой желающий может делать на нем игры). Апофеозом нынешнего поколения для меня стало одно открытие. В последний мой визит в книжный магазин, я заметил шедевр, несущий название «Как найти работу?». Книга эта, на глаз, страниц на 150-200, и я просто не представляю, что там внутри. Видимо из-за того, что классическая схема «составил резюме → разослал в интересующие компании → прошел собеседование» не работает, там, по всей видимости, представлены секретные техники минета и прочие прелести обольщения для девушек, чтобы успешно пройти собеседование.

Поэтому, возвращаясь к вопросу, даю элементарный ответ: начать разработку игр надо с разработки игр. Не с поглощения тонн книг по программированию, математике, физике, игровому дизайну, по графике в целом; не с написания универсального движка, который не понятно для кого создается, и непонятно где будет использоваться, а с разработки игр. И в этой тавтологии заключен «сакральный» смысл. Ваша цель — это создание игры. Задумайтесь, бесконечное поглощение книг, которые якобы могут пригодиться, двигает вас к цели? А написание движка, который якобы потом будет использоваться для создания игры, опять-таки, двигает ли вас к цели, то есть к созданию игры? В обоих случаях ответ отрицательный. Никто не спорит, что для создания игры потребуются определенные знания. Но знания эти фундаментальные, и скорее всего, ими вы уже и так обладаете. Единственная проблема здесь в знании языка, который вы будете использовать. Здесь действительно не обойтись без литературы. Дальше, можно подсматривать в поисковике, или самому предлагать решения. Движок без игры — пустая трата времени, он ничего не стоит. Но если вы будете писать игру, параллельно «вырисовывая» что-то на подобии фреймворка, из этого может получиться что-то безумно удобное, по крайней мере, для вас лично.

Главный принцип, который, как мне кажется, нужно практиковать — делать только то, что необходимо и всегда применять комплексный подход. То есть, нет смысла зацикливаться на какой-то одной составляющей, если она и так неплохо работает, есть смысл делать то, что игре сейчас действительно не хватает. Игра должна быть «играбельной» с первых дней разработки. В случае с C#, этого можно добиться уже в первые часы разработки. Здесь уместно вспомнить и о такой замечательной проблеме новичков (и не только), как стремление к идеальной архитектуре. Самый оптимальный ответ на данном этапе звучит примерно так: идеальная архитектура — это химера, мираж. То, что идеально для одного, может показаться элементарным говнокодом для другого. Вообще, правильная архитектура — это опыт. Так что на первых порах на нее необходимо забить. Полностью. В следующих статьях я представлю достаточно эффективную технику написания программ, которую можно использовать в случае, если испытываете неуверенность в процессе написания кода и постоянно ловите себя на стремлении к идеальной архитектуре. Стремление это бесплодное, вам все равно не удастся все заранее идеально спланировать. Особенно когда вы еще никогда не писали игр.

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

Цукерберг рекомендует:  Программирование - Какой язык программирования учить для микросхем
Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих