С++ ПрограммированиеЖурнал

[C++::Tetris::Console] Version::1

Автор:

Шаг-01: Пролог.

Пишу Тетрис на коленке.
Почему тетрис, а не змейка или арканоид?
Потому что с точки зрения кодинга - БЕЗ РАЗНИЦЫ.

Зачем я пишу этот тетрис?
Потому што я школьник и я учусь.

Если вы ещё не писали свой тетрис, змейку или арканоид то этот пайпер, возможно, будет вам.  интересен.

Я не буду тут учить вас С++ - я буду писать игру Тетрис и по возможности буду проговаривать вслух те мысли, которые неизбежно будут проскакивать в моей голове, пока я буду писать код.

"Итак, у вас есть план, мистер Фикс?"
Да! У меня есть План:

1. Инструменты, которые мне понадобятся.
2. Как должна выглядеть игра.
3. Первый код.
4. Где рисовать
5. Как писать код.
7. Из чего состоит игра.
8. Тесты.
9. Релиз.

В плане нет ничего про С++ кодинг, а вопросов связанный с ним может быть поболя, чем 100500.

Если я быстро пройдусь  по этому плану, то у меня получится вступление. Годно.

Увы не все моменты, которые мне будут интересны я смогу проговорить вслух, поэтому надежда на комменты))

1.
Инструменты, которые мне понадобятся.

Редактор кода Code::Blocks
Компилятор MSYS2 GCC
Это всё.

по мне это лучший выбор для небольших проектов.

2.
Как должна выглядеть игра.

Наикратчайший вариант по скорости написания - консоль.
Консоль безцветная и мигающая, потому что не хочу привязываться к виндосу.
Я уже знаю, мне захочется большего эстетизма,
поэтому, возможно, я добавлю SFML.
Именно добавлю, а не перепишу на SFML.
Почему SFML?
Потому что он для детей - его не надо учить - берёшь и используешь согласно документации.

3.
Первый код.

- проверим русский язык.
- убедимся что у нас есть С++17

+ Показать

4.
Где рисовать

Количество выпущенного железа в разы больше, чем живущих на планете людей.
И ... я не хочу ничего знать про это железо!

Я буду рисовать в абстрактном двумерном(для удобства) массиве, аля, в матрице!
Вместо пикселей - символы ucs-2(внимание - шрифт консоли не все умеет):

вот моя доска матрица, где я и буду рисовать:

unsigned H = 20 ; /// Высота доски.
unsigned W = 30 ; /// Ширина доски.
wchar_t  C = '.'; /// Символ заполнения.

std::vector<std::wstring> scr(H, std::wstring(W, C));

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

struct  Hard
{
    Hard& operator<<(const VScreen& scr)
    {   for(const auto& s : scr.mat)
        {   std::wcout << s << '\n';
        }   std::wcout      << '\n';
        return  *this;
    }
};
+ полный тест:

вот такая доска для рисования:
Изображение

5.
Как писать код.

три способа на вскидку:
1. В один файл.
2. Много файлов *.h и один main.cpp
3. Много файлов *.h + *.cpp + main.cpp

выберу второй, хотя и проект мелковат, но и как бы будет "по взрослому".

Пишем код так, пишем логику, если логика похожа на олимпиадную задачу,
то убираем такой код в общий раздел.

7.
Из чего состоит игра.

Тут получится план на код:
1. Код общий - логически не связан с тетрисом.
2. Код логически связан с тетрисом.
- Падающая фигура.
- Корзина, сама корзина + её содержимое.
- Клавиатура.
- Банеры.
- Игра(главный игровой цикл).


8.
Тесты.

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

9.
Релиз.

Это не первый мой тетрис.
По итогу релиз будет выглядеть примерно так:

Изображение

На самом деле я полностью перепишу код демонстрируемый гифкой выше.

Это было вступление ...

(продолжение ...)

Страницы: 1 2 314 15 Следующая »

#, #C++, #Tetris, #мануал

10 июня 2023 (Обновление: 7 авг 2024)

Комментарии [85]