Изучаем C++ через программирование игр

    Привет, Хабрахабр.

    В этом посте мы хотим вам рассказать о хорошей книге Майкла Доусона «Beginning C++ Through Game Programming». Многие знакомы с творчеством Майкла по книге «Программируем на Python», которая многим пришлась по вкусу. Когда-то мы рассказывали о ней в нашем блоге. Мы еще не приняли окончательное решение по поводу издания книги, поэтому решили в очередной раз посоветоваться с вами. В качестве рецензии мы перевели мнение сайта www.gamedev.net. По содержанию книга по С++ напоминает Python, так как в ней выдержан такой же стиль — обучение через программирование игр.



    Книга «Beginning C++ Through Game Programming» — значительно более глубокая работа, чем аналогичные книги по программированию игр на динамических языках, например, Python, ActionScript или Java — и это неудивительно. В книгах по программированию игр на динамических языках многие важные темы — например, управление памятью рассматриваются практически мельком. Они обсуждаются в заключительных главах на тему «оптимизации», причем авторы зачастую обсуждают лишь такие частности, как пореже вызывать сборщик мусора. Но язык C++ известен своим прикладным подходом к управлению памятью, и здесь такие темы, как расстановка указателей и ссылок и управление памятью как таковое выходят на передний план. Поэтому книга «Beginning C++ Through Game Programming» охватывает несколько иной круг тем, нежели другие книги о программировании игр, авторы которых рассказывают о динамических языках. Например, в 400-страничной книге по ActionScript вполне можно описать разработку 10 полноценных игр, а в книге по C++ на 400-й странице еще будут рассматриваться теоретические темы например, операторы перегрузки и глубокое копирование объектов. Все дело в том, что C++ один из самых фундаментальных и сложных языков программирования, которые широко используются сегодня. Для создания объекта недостаточно просто «объявить о его существовании» — хотя в большинстве динамических языков от вас больше ничего не требуется. А чтобы объект в C++ исчез, недостаточно просто «забыть о нем» на некоторое время.

    Боюсь, что именно такие сложности отпугивают от C++ многих разработчиков. В книге «C++ Through Game Programming» вы не найдете сколь-либо сложных полнофункциональных игр. Здесь вы научитесь писать игры, управляемые через командную строку — в частности, «крестики-нолики» и «виселица». Но (и это важно!) такие игры будут выстроены в строгом соответствии с объектно-ориентированным проектированием. Может быть, такая строгость и является излишней в столь тривиальной игре как «виселица», но в тех играх, которые вы станете писать после прочтения этой книги, приобретенные знания и навыки будут весьма кстати.

    Несомненно, игру «Виселица» можно написать на Python — она будет состоять примерно из 100 строк, а вся работа потребует у вас не более получаса. Однако многие приемы, которые вы усвоите при быстром написании такой игры, окажутся неприменимы в игре, код которой насчитывает 100 000 строк. Или миллион строк. Суть книги «Beginning C++ Through Game Programming» заключается не в том, чтобы научить вас программировать «Виселицу» в ста строках, чтобы после этого вы могли ощутить себя заправским разработчиком игр. В этой книге вы научитесь реализовывать надежные проекты, которые будут хорошо масштабироваться, оставаясь при этом удобными в поддержке. Приемы, которые вы усвоите в этой книге, пригодятся вам при работе и над более крупными проектами.

    Книга «Beginning C++ Through Game Programming» будет полезна читателю, который хочет сделать первый шаг к разработке крупных проектов. Проблема в том, что этот первый шаг получится далеко не таким интересным, как в других подобных книгах. Проработав эту книгу, вы не сможете написать на С++ классную игру, а потом козырнуть ею перед друзьями. Но вы можете вынести из этой книги такие идеи, которые впоследствии пригодятся вам при реализации просто потрясающих проектов.

    Основная проблема, которая возникла у меня с книгой «Beginning C++ Through Game Programming» такая же, как и с другими книгами подобного рода — операционные системы Mac и Linux рассматриваются в ней на уровне: «поверьте, в них весь этот код сработает, но мы не будем на этом останавливаться». Учитывая, что в книге целых пять страниц посвящено настройке Visual C++ Express и компиляции проекта, пять страниц – Xcode и пять страниц – IDE для Linux на ваш выбор, на это стоит обратить внимание. Если вы сможете прочитать эту книгу как кроссплатформенную то, пожалуй, именно так и стоит ее читать.

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

    Какое ваше мнение?

    • 62.3%Отличная книга381
    • 1.6%Книга не нравится10
    • 21.4%Лучше прочитать классическое руководство по С++131
    • 14.5%Я не читаю книги89
    Издательский дом «Питер»
    147,43
    Компания
    Поделиться публикацией

    Комментарии 35

      +23
      Привет, Хабра.
      Привет Питера
        +4
        Привета-привета.
          +1
          Спасибо) Исправил.
        +1
        Спасибо, не встречал ничего подобного. Обязательно прочту, потом скажу свое мнение.
        P.s Почему ссылка никуда не ведет?
          0
          Исправил.
          +1
          На русском уже есть? Где купить?
            0
            Так поэтому же и советуются, переводить/издавать или нет :)
            +14
            «Изучаем вождение через вождение вертолета»
              –2
              Ну после «вертолета» сложно не сообразить, как машиной управлять.
            +4
            рентген сломанной руки на обложке, должно быть, хорошо характеризует книгу
              +8
              Не канонично. Должен быть рентген простреленной ноги.
              +1
              Рекомендую блог Vittorio Romeo. Пишет игрушки на C++11/C++14 (OpenHexagon самая известная, пожалуй), выступал на cppcon2014. Лично меня вдохновляет.
                +3
                Взял бы переведенное PDF издание, читать бумажные книги стало сложно :).
                  0
                  Хороший способ научиться писать на С++ — реализовать правила какой-нибудь компьютерной CCG. Уже через несколько дней поймете что ООП не работает :)
                    0
                    Что еще за CCG? Гугл выдает несколько определений даже в игровой тематике.
                      0
                      CCG — это карточная игра, по типу Magic The Gathering или Heartstone и других.
                        +1
                        Ясно, спасибо. Это одно из определений, которые я нашел. Только неясно, почему тут не будет работать ООП. Вроде как нормально все ложится на эту парадигму.
                          0
                          Я думаю если очень много карт, свойств у этих карт и так далее, можно просто запутаться и ничего не выйдет.
                            +1
                            Похоже, что ООП наоборот идеальная штука для таких игр. Множество карт и свойств выглядит как похожим на то, зачем ООП и делали;)
                              +1
                              Немного я об этом говорил тут, но если углубиться, то ООП не работает ну вообще никак. Одна из причин — ООП напрочь не умеет учитывать влияние объекта А на объект В (парадигмы есть, но они очень слабы).

                              Но вы попробуйте! Я не могу сказать что это невозможно (все такие игры сделаны с помощью именно этой парадигмы), просто это неэффективно.
                                0
                                Добротный у вас канал на YouTube, пожалуй подпишусь.
                                  0
                                  Data-oriented design нас спасёт :)
                                    0
                                    Не велика беда сохранять не по значению, в противовес отказу от ООП.
                                      0
                                      Немного посмотрел. Мне кажется, вы просто неправильно моделируете на C++, пытаясь использовать подходы из C#, но языки очень различаются.

                                      В вашем случае карты вообще функциональные объекты, у них нет состояния, их очень легко копировать, и потому хранить по значению, используя pimpl, так что с самого начала все пошло не в ту степь.

                                      Все dynamic_cast в вашем случае вообще не нужны, потому что заменяются на Visitor, который тут прямо просится.

                                      Но вообще в вашем случае, возможно, функциональный подход смотрелся бы органичнее. Так что попробуйте переписать на Haskell)
                          0
                          Как мне кажется книга никак не рассчитана на новичков, только голову заполнит непонятным мусором, который потом придется сортировать еще два года чтобы усвоить что ты прочитал. Если уж и хоть как то знаком с программированием то проще прочитать обзор синтаксиса. ИМХО я как новичок в программировании даже не стал бы ее брать уж лучше Шилдт и Страуструп.
                            +1
                            Думаю, книга для тех, кто знаком с синтаксисом, но не сильно понимает как писать большие и постоянно работающие программы.
                            0
                            Не очень доверяю чуваку, который сделал в 90е одну игру и ушел в преподавание, больше с тех пор ничего не сделав. Если уж читать книжки из геймдева — то от настоящих про, например, все книжки от чуваков из Naughty Dog — очень годные.
                            +1
                            После Вашего поста, за несколько лесных прогулок с ребенком, я прочитал эту книгу. Вначале показалось, что совершенно «мимо кассы», но к концу стало нравиться. Автору действительно удалось затронуть практически все важные темы С++ при написании консольных игр.
                            Как учебник программирования книга определенно понравилась. Перевести ее будет несложно, а людям она будет полезной.
                            P.S. Я читал третье издание, само собой.
                              0
                              Спасибо за отзыв)

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

                            Самое читаемое