Ответы пользователя по тегу C++
  • Переход с C++ на C#?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    С C++ на C# будет гораздо проще, чем было бы наоборот. Не переживайте, у вас получится, через месяц-другой вы будете знать шарп не хуже, чем сейчас плюсы.
    Я рекомендую книгу Троелсена, потому что он подробнейшим образом пишет само описание языка, как писать код на c#, а не учит программированию, насколько я понял, вам это не нужно - алгоритмы, ООП и пр. вы уже знаете.
    Ответ написан
    Комментировать
  • Какой уровень математики нужен в GameDev (Unity, UE4)?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Математика в gamedev нужна в любом случае. Даже если делается маленькая игрушка, то нужно хотя бы понимать, как работает пропорция...
    Но вот вопрос - какой уровень математики нужен в gamedev.
    TL;DR: очень желателен средний уровень (хотя бы уровень 11 класса).
    Долгое объяснение:
    1) Игру можно делать вообще без математики - движок берёт на себя сложную математику. Но чем больше игра, тем больше будет нужно понимание математики - математика может пригодиться при расчёте выстрелов, при расчёте "хитрого" поиска пути, обязательно пригодится в при разработке ИИ, и уж точно пригодится при расчёте баланса (но это работа гейм-дизайнера, а не программиста).
    2) Причём, нужно именно понимание - не столько умение решать типовые задачки, сколько способность анализировать формулы придумывать свои. Например, какую-то фишку можно сделать несколькими способами, и вероятнее всего, более производительным будет тот способ, который лучше использует математику. Помимо обычной математики, может пригодиться геометрия. И уж точно пригодится булева алгебра.
    3) Начиная с восьмого класса, в школе учат не только считать тривиальные задачки, но и развивают так называемое "математическое мышление". Особенно этому учат "задачки со звёздочкой" (более сложные, но необязательные, не знаю, во всех ли учебниках есть такие). Именно математическое мышление позволяет лучше продумывать алгоритмы. (N.B. рекомендую почитать Я.И.Перельмана с его "Занимательной математикой")
    4) ААА-игры делаются не одним-двумя программистами, при разработке ААА-игр программистов используются десятки (а всего разработчиков может быть сотни, от гейм-дизайнеров до композиторов). Все из них не обязательно должны знать математику хорошо. Но если не знать, то вероятность развиться "повыше" - то сложнее.
    5) При некоторых играх математика почти не нужна (при использовании приличного движка), а в некоторых играх математика точно нужна.
    6) Программирование - техническая наука. Да, "гуманитарии" тоже могут стать программистами, но им будет сложнее. Ещё Ломоносов сказал: "Математика ум в порядок приводит" - в нашем классе математики в школе была такая картинка на стене. И я как учитель могу подтвердить эту мысль.

    Итог.
    Можно ли сделать игру без математики? Можно.
    Математика поможет разработке игры? Почти наверняка.
    Хочется развиваться хотя бы до сениора? Учи математику.
    Ответ написан
    Комментировать
  • Можно ли откомпилировать код в Visual Studio 2015/2017 без создания проекта?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Можно использовать онлайн-компилятор, например
    https://www.tutorialspoint.com/compile_csharp_onli...
    Ответ написан
    Комментировать
  • Что выбрать для игр?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Если вы уже знаете c++, то подумайте о UnrealEngine.
    Если вы хотите ещё освоить c#, то Unity3d - тоже прекрасный вариант.
    Xamarin - это платформа для разработки кросс-платформенных программ, пишется на c#. Обычно используется для не-игровых программ, а игровые лучше делать в юнити.
    Для игр попроще можно использовать платформы типа Marmalade или Corona, да даже GameMaker.
    Также может быть отличным решением делать программу на html+css+js с помощью Cordova.

    UnrealEngine и Unity3d примерно одинаковы по мощности, традиционно UnrealEngine имеет лучшую графику Unity3d, но язык c# в Unity3d удобнее и заметно проще, чем в UnrealEngine.

    Лично моё мнение - начните работать с Unity3d. Мощный, быстрый, имеет хорошее сообщество, быстро развивается. Плюс, c# - это плюс :)

    Насколько хорошо вы знаете программирование вообще и c++/c# в частности? Поищите здесь вопросы, с чего начать изучать языки.

    Какие движки/фрейворки я буду использовать в дальнейшем?
    А вот это вопрос к вам, а не к нам :)
    Ответ написан
    Комментировать
  • Как написать реал-тайм онлайн игру? Методология, паттерны, статьи?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    По части вопросов и общих моментов - присоединяюсь к @kazmiruk и @dplsoft, они всё правильно сказали. Их советы на самом деле хороши.

    Добавлю только несколько ссылок, которые вам могут пригодиться:
    0fps.net - ресурс по созданию реалтаймовых сетевых движков (на англ.)

    Что должен знать каждый участник крупного MMO-проекта - отличный список вопросов, ответы на которые нужно знать для создания движков. Чем лучше понимаешь ответы на эти вопросы, тем лучше получится проект.

    Две статьи от Маилру по созданию сервера: Базы данных в онлайн-играх. От Аллодов Онлайн до S... и
    Архитектура сервера онлайн-игры на примере Skyforge. Подробно и качественно рассматривают создание сервера игры.

    Сетевое программирование для разработчиков игр:
    Часть 1: UDP vs. TCP
    Часть 2: прием и передача пакетов данных
    Часть 3: виртуальные соединения поверх UDP

    Ещё полезные статьи с хабра:
    Высоконагруженные системы: решение основных проблем
    Создание многопользовательской realtime игры на node.js
    Как не нужно писать большие сервера - на java
    Ответ написан
    Комментировать
  • Какую книжку почитать об организации классов для игрушек?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Чаще всего, если название класса не приходит на ум, то он спроектирован неверно, содержит слишком разрозненные функции. Не бойтесь делать больше классов, по классу на одну задачу/функцию - не класс, который содержит одну функцию (метод), а класс, который реализует выполнение какой-то одной задачи в программе.
    Обязательно прочите Приёмы объектно-ориентированного проектирования. П.... Это одна из лучших книг по архитектуре систем. Можно сказать, классический труд. Книга не самая простая, но даст вам необходимую базу для дальнейшего роста.
    Ответ написан
    Комментировать
  • Какой велосипед написать на с++ для закрепления изученного?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Сделайте какую-нибудь простую игру, с минимумом действий, но с задействованием всего вашего арсенала с c++, особенно ООП.
    Например, напишите rogue-like игру, типа того, что описана в этом топике.
    Тут у вас будет и работа с графикой, и хранение данных в файлах с конфигами (предметы, монстры, уровни), и игровая механика (перемещение, удары), и искусственный интеллект (поиск пути).
    Графику можно сделать как консольной (в текстовом режиме), так и освоить какую-нибудь графическую библиотеку (Qt, например). А можно написать два разных интерфейса и выбирать - запустить в консоли или в окне.
    Позже можно будет добавить работу с сетью и режим игры вдвоём.
    Этот проект (относительно) не сложный, но даст вам очень много практического опыта. Ведь одно дело писать классы в учебных целях, когда заранее известна конечная иерархия, а другое дело - полностью разработать иерархию, реализовать её, увидеть, что вышло не очень (так часто бывает, нужен опыт), найти способ как провести рефакторинг, обнаружить ценность интерфейсов, переписать классы на использование интерфейсов (или общие абстрактные предки), увидеть, что это гораздо лучше, порадоваться за себя, дать поиграть друзьям, получить багрепорты, исправить все баги, и так далее.
    Ответ написан
    Комментировать
  • Почему программа зацикливается (легкая)?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    while (abs(IntegPrev - integ) > 0,000000001);
    Запятая вместо точки справа от знака "больше". Нужно написать
    while (abs(IntegPrev - integ) > 0.000000001);
    Ответ написан