Советы падаванам C++ ( Часть 1 )

///////////////////////////////////////////////////

// Начальный курс создания компьютерных игр на C/C++

[0][1][2][2.5][3][4][5][5.5][6][6.2][7][7.2][8][9][9.2][10]


Всем привет! :]


Количество подписчиков в группе перевалило за отметку 256, а значит нужно их чем-то порадовать. :) На полноценные посты об играх у меня сейчас к сожалению нет времени, поэтому попробую себя в новом формате. Встречайте новую рубрику мини-постов "Советы падаванам C++"! :]

Советы падаванам C++ ( Часть 1 ) Программирование, Курсы программирования, Обучение, C++, Dansken, Длиннопост
Советы падаванам C++ ( Часть 1 ) Программирование, Курсы программирования, Обучение, C++, Dansken, Длиннопост
Советы падаванам C++ ( Часть 1 ) Программирование, Курсы программирования, Обучение, C++, Dansken, Длиннопост
Советы падаванам C++ ( Часть 1 ) Программирование, Курсы программирования, Обучение, C++, Dansken, Длиннопост

P.S. Первый блин может быть комом, поэтому напишите пожалуйста в комментариях ваши мнения, пожелания и жалобы. Cya! :)

Лига программистов C/C++

61 пост4.8K подписчиков

Добавить пост

Правила сообщества

Соблюдайте правила Pikabu:

https://pikabu.ru/html.php?id=wtf


Помимо этого ЗАПРЕЩЕНО:

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

4
Автор поста оценил этот комментарий
Потому что любители "цпп и цэ", как правило, с трудом выражают свои мысли в человекочитабельной форме. Легких и доступных, а главное качественных материалов по C/C++ сейчас очень и очень мало, хотя потребность есть. А к Страуструпам с MSDNами заинтересовавшийся все равно еще придет.
раскрыть ветку (1)
3
Автор поста оценил этот комментарий
Блин, красиво сказал :] И не поспоришь :))
показать ответы
1
Автор поста оценил этот комментарий
Прошу прощенья если уже спрашивали, но не мог бы ты как нибудь запилить свои прошлые посты в это сообщество. Или отдельной темкой вывести ссылки.

Спасибо.

раскрыть ветку (1)
3
Автор поста оценил этот комментарий

Эээээээээээээээээээээээээээээээ... В шапке поста жеж :]

показать ответы
1
Автор поста оценил этот комментарий
Нене, в сообществе, отдельной темкой, если нет, то нет, буду довольствоваться тем что есть =)
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Ммм? Зачем? Оо

1
Автор поста оценил этот комментарий

У меня вопрос мимо темы-откуда скины персонажей,которые на пикчах вокруг текста? Больше всего интересует тетрадь смерти. Это из игры какой-то?

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
1
Автор поста оценил этот комментарий

Рок-звезда) Хорошо, если все так и мы просто не поняли нового формата. Будем надеяться, что всякие советы будут выходить время от времени, тогда это сильно меняет дело.

Все же хочется чего-то, пусть мелкого, но такого же цельного)


ЗЫ Слежу за твоей репой на гитхабе и радуюсь, что весь код туда переехал, какая-никакая активность есть.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Та будет и цельное :) Кстати это на самом деле довольно непросто само по себе - придумать новую и цельно завершенную игру используя весь пройденный материал и лишь щепотку чего-то нового для изучения. :)

З.Ы. Я просто поборол свою лень в тот день :]
З.З.Ы. Рок-звезда - это же не что-то обидное? :]

показать ответы
10
DELETED
Автор поста оценил этот комментарий
Комментарий удален. Причина: данный аккаунт был удалён
раскрыть ветку (1)
4
Автор поста оценил этот комментарий
(^^ )
раскрыть ветку (1)
3
Автор поста оценил этот комментарий
Ну что за хейтеры меня минусят? Эээх...
показать ответы
3
Автор поста оценил этот комментарий

Так.. По поводу Совета #3.. Поступили жалобы от тех людей, кто еще не особо познакомился с макросами. И не всем понятна фраза "вырезать в релизе". Поэтому краткий ликбез по приведенному выше коду.

#ifdef некий_макрос
блок1
#else
блок2
#endif

Эта конструкция превратится в блок1, если определен некий_макрос( #define некий_макрос ), иначе же - останется блок2.

_DEBUG - это специальный макрос, который автоматически определен в режиме сборки Debug. И не определен в режиме Release.

Поэтому в коде из Совета #3 в режиме Debug будет сгенерирован код:
#define MY_BREAK_IF( condition ) if( condition ){ __asm { int 3 } }
#define MY_BREAK MY_BREAK_IF( true )

А в режиме Release это превратится в код:
#define MY_BREAK_IF( condition )
#define MY_BREAK

Поэтому если мы потом в коде ставим например вот такой вызов:
MY_BREAK_IF( m_object == nullptr );
То когда мы соберем Debug он заменится на:
if( m_object == nullptr ){ __asm { int 3 } };
А в Release он просто заменится на пустоту :)
Ничего не нужно вырезать руками :)

P.S. Если что-то еще непонятно - спрашивайте, пожалуйста :)

показать ответы
3
Автор поста оценил этот комментарий

Вернулся! <3

раскрыть ветку (1)
4
Автор поста оценил этот комментарий
(^^ )
показать ответы
22
Автор поста оценил этот комментарий
Пишу субъективное мнеие, потому не обессудь.


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


О языке:

- Правило трех(пяти).

- RAII, умные указатели, исключения.

- C++11(14) особенности и улучшения, как было плохо раньше и как красиво сейчас.

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


Паттерны: цикл статей с объяснением и примерами применения в играх (для поддержания интереса аудитории).


Обзор каких-то базовых возможностей библиотек:

- Boost

- Qt, wxWidgets, GTKmm и прочие

- OpenCV

- ...


Цикл статей на тему создания сетевой игры. Хотя бы модификация танков на два игрока.


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


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

Тут важно, конечно, о чем тебе самому писать интереснее, ибо без мотивации будет ерунда =)

раскрыть ветку (1)
4
Автор поста оценил этот комментарий
Ну это изначально и задумывалось как "что-то между редких практических постов" :) Ибо практические посты значительно выросли в размерах и помимо основной информации обращать внимание на вот такие вот "советы" - слишком долго и громоздко.

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

Я не приукрасил - если говорить о разработке велосипедов и костылей, то я нагородил этого порядочно. :) Я намного больше люблю практику чем теорию. Я не считаю себя ни отличным программистом, ни быдлокодером, скорее всего бы мне подошло определение хаотичный или дикий программист. Более того, чем больше я узнаю и разбираюсь в технологиях, тем больше впадаю в депрессию от того, что ни черта не знаю и также не знаю где найти время всё это изучить и попробовать. :]
Если кто узнал себя в описании выше, то поздравляю: вы - моя целевая аудитория :))

P.S. Мне понадобилось много недель, месяцев, а в некоторых случаях и лет для того, чтобы прийти к некоторым из таких "советов" (slowpoke.jpg). Поэтому надеюсь, что эти посты помогут хоть кому-нибудь прийти к этому намного раньше. :)
P.P.S  И повторюсь - я не забросил тему "Курсов с законченными играми", они продолжатся чуть позжее :)

Предпросмотр
показать ответы
1
Автор поста оценил этот комментарий

Вам случайно лишний программист на с++ за еду не нужен?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Внезапно.. Харьков? :)
показать ответы
1
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Некоторые выучили :) MFC морально устарел как только вышел, так что лучше бы и не выходил :)) Гуглите инфу про Qt. :)

показать ответы
1
Автор поста оценил этот комментарий

Эт по какой такой причине?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Усложнение архитектуры приложения, громоздкость и в некоторых случаях уменьшение производительности. Хотя может просто я и все ребята с которыми я работал до этого просто не доросли до их использования. Кто знает... :)
показать ответы
4
Автор поста оценил этот комментарий

Простое правило про include guards: никогда не используйте include guards

Все современные компиляторы поддерживают #pragma once

1) Это производительней

2) Это понятнее

3) Это не вызовет косяков, если встретятся файлы с одинаковым названием

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

В этом есть смысл :]

5
Автор поста оценил этот комментарий

Но...для этого же есть исключения

Иллюстрация к комментарию
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Так уж случилось, что исключения в геймдеве не очень любят или даже очень не любят :]

показать ответы
2
Автор поста оценил этот комментарий

Для этого есть git и юнит тесты)

раскрыть ветку (1)
Автор поста оценил этот комментарий
Одно другому не мешает :)
1
Автор поста оценил этот комментарий
это из тех, кто в первом посте кричал "не взлетит", и "здесь у нас таких как ты не любят"
Иллюстрация к комментарию
раскрыть ветку (1)
Автор поста оценил этот комментарий

Ээ.. Спасибо, спасибо.. Вы прекрасная публика.. Ммм.. Вы наверное думаете: "Что этот парень со своими костылями может вам рассказать, полезного по коду, да? С костылями, вы поняли, да?".. Хехе.. спасибо.. Вы прекрасная публика.. Да..

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

В производительных системах это спорно настолько же, как и использование C++ вместо чистого С. В игрострое - скорее всего игра стоит свеч, но вот, скажем, в том же Яндекс.Браузере исключения активно используются.

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