Советы падаванам 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++"! :]
P.S. Первый блин может быть комом, поэтому напишите пожалуйста в комментариях ваши мнения, пожелания и жалобы. Cya! :)
Блеклый пост на фоне действительно крутых прошлых( Новичкам эти советы еще не нужны, а бывалые уже допетрили до таких очевидных вещей. Потому я предлагаю давать либо серьезные советы (вроде разжевывания с советов с примерами из книг Саттера и Александреску), либо выбрать чуть более емкую тему.
О языке:
- Правило трех(пяти).
- RAII, умные указатели, исключения.
- C++11(14) особенности и улучшения, как было плохо раньше и как красиво сейчас.
- Новые штуки стандартной библиотеки, вроде chrono, многопоточности, насколько это легко и классно.
Паттерны: цикл статей с объяснением и примерами применения в играх (для поддержания интереса аудитории).
Обзор каких-то базовых возможностей библиотек:
- Boost
- Qt, wxWidgets, GTKmm и прочие
- OpenCV
- ...
Цикл статей на тему создания сетевой игры. Хотя бы модификация танков на два игрока.
Еще, как вариант, если уж выбрана студия, подробно рассказать про дебаг. Начиная от отладочной печати и заканчивая условными брейкпоинтами, ассертами и хотя бы простенькими юнит-тестами.
ЗЫ А так, твои статьи были классными потому, что там делались законченные вещи, потому, мне кажется, нужно либо продолжать в том же духе, либо делать редкие практические посты, а между ними что-то по-проще, вроде теоритических типов, с прицелом применения этих знаний в гала-постах.
Тут важно, конечно, о чем тебе самому писать интереснее, ибо без мотивации будет ерунда =)
В стандартной библиотеке есть такая замечательная вещь, как assert, которая конкретно в MSVC реализована через __debugbreak. В Release версии assert превращается в пустую строку. И не надо самому писать кучу макросов для того, чтобы реализовать подобное для разных окружений.
Ну и самый простой пример
void DoSmth(int* pointer)
{
if(pointer == nullptr)
{
assert(!"Unexpected nullptr");
}
...
}P.S. А ещё, если пост для новичков, то следует подробнее разъяснить в каких случаях нужно использовать assert / __debugbreak, а в каких нужно проверять при помощи if и писать полноценную реакцию. Когда впервые с этим сталкиваешься, это не особо понятно.
Кстати, вдруг кто не знает, очень полезно:
макросы __FILE__ __FUNCTION__ __LINE__ - содержат текущее имя файла, текущую функцию и линию в коде.
Простое правило про include guards: никогда не используйте include guards
Все современные компиляторы поддерживают #pragma once
1) Это производительней
2) Это понятнее
3) Это не вызовет косяков, если встретятся файлы с одинаковым названием