403

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

Серия Курсы создания компьютерных игр на C++

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

// Начальный курс создания компьютерных игр на 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++"! :]

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

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

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

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

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

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


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

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

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

Спасибо.

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

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

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

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

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

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

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

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

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


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

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

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

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

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

Так.. По поводу Совета #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. Если что-то еще непонятно - спрашивайте, пожалуйста :)

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

Вернулся! <3

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


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


О языке:

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

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

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

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


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


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

- Boost

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

- OpenCV

- ...


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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества