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

Журнал

18 окт 2023

PS:

///----------------------------------------------------------------------------|

данный проект репроектился тут https://github.com/BDOTimer/Calculattor-2024.Apr

///----------------------------------------------------------------------------|

...

Итак, ... тик-так,

Цель:

уменьшить время, которое я провожу фо флейме.

Напишу ка, я тут, обычный(хз, или необычный) калькулятор.

Сразу о том, что это будет за калькулятор,
он будет НЕ КНОПОЧНЫЙ, а СТРОЧНЫЙ.

на вход подаётся строка текста,
на выходе результат вычисления.

всё просто.

1.
да,
я видел калькулятор у страуструпа,
и чуть ранее писал свои,
и даже пару написал своих.

2.
хочу исправить тамошние недостатки, такие как, например,
- парсинг и вычисление в одной и той же процедуре кода.
- негодность для рисования графиков.
- неочевидная легкость(т.е. сложность) добавления новых операторов.
- ...

3.
В релизе,
собсно форма, на которой два контрола:
- Control ввода строки текта
- Control вывода(рисования) графика
- ...(контролы масштаба и тп..)

4.
не будет никакого дедлайна - т.е. я не буду торопиться.
но я по опыту(возможно кривому) уже знаю, что у меня тут есть только 15 страниц.
в эти 15 страниц я обязуюсь уложиться))

(тутошнюю верстку я обсуждать не буду)

5.
заявить, что я пишу этот журнал для тех кто изучает С++,
будет брехня, ибо С++ ради С++ меня ваще никогда не интересовал,

однако, возможно оно и будет кому то полезно, я не возражаю.
в общем то эти записи чисто ради моего личного фана,
поддержания тонуса, и ясного осознания моей социальной животности.

...

Итого,
конечный желаемый результат разделю на две части:

1.
Сам консольный калькулятор.

2.
Демо вариантов его использования.

Ссылки на инструменты:

версия для винды(то что буду юзать я):

1. Редактор кода: Code::Blocks
2. С++17 компилятор(i686-posix-dwarf-gcc-13.1.0-mingw-w64msvcrt-11).

Вместо хеллоуворлда:

///----------------------------------------------------------------------------|
/// -std=c++17
/// Исходник в utf-8
///----------------------------------------------------------------------------:
#include <iostream>
#include <string>

///----------------------------------------------------------------------------|
/// Calculator.
///----------------------------------------------------------------------------:
namespace Calculator
{
    using T = double;

    struct  Instance
    {       Instance() = default;
            Instance(std::string_view s){ parse(s); }

        ///---------------------|
        /// Парсинг строки.     |
        ///---------------------:
        void parse(std::string_view s)
        {
            /// TODO ...
        }

        ///---------------------|
        /// Само вычисление.    |
        ///---------------------:
        T calc()
        {
            /// TODO ...

            return 0;
        }

        ///---------------------|
        /// Тест.               |
        ///---------------------:
        static bool test(std::string_view s, T r)
        {   Instance instance;
                     instance.parse(s);
            return   instance.calc ( ) == r;
        }

    private:

    };
}

#define TEST(a) Calculator::Instance::test(#a, a)

///-----------------------------|
/// Тесты.                      |
///-----------------------------:
bool tests()
{
    bool   isgood  = true;
           isgood &= TEST(3 - 3);
           isgood &= TEST(4 * 5);
    return isgood;
}

///----------------------------------------------------------------------------|
/// main.
///----------------------------------------------------------------------------:
int main()
{
    setlocale(0, "");

    std::wcout << L"Привет, я ваш Calculator!\n\n";
    std::wcout << L"Тесты: " << (tests() ? L"ОТЛИЧНO"
                                         : L"ПЛОХО\a") << '\n';
}

онлайн компилятор С++17

дальше ...

Ссылка

10 июня 2023

Шаг-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.
Релиз.

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

Изображение

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

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

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

Ссылка | Комментарии [85]

2 ноя 2007

Вот написал первую статью - интересно понадобиться она кому-нибудь или нет. Очень хочу услышать ваши отзывы по этому поводу! Заранее спасибо!

Ссылка

1 ноя 2007

Приветствие
logo | Приветствие

Добро пожаловать!

Одним из первичных вопросов для программировании игр - знание языка программирования. Наиболие распространенным языком для написания игр является C++. Язык довольно сложный, и начинающему будет нелегко самостоятельно овладеть всеми тонкостями. Это сообщество предназначается для начинающих! Тех кто очень хочет создать из ничего что-то!

Для начала я думаю стоит назначить отправную точку. Прежде всего, для ознакомления с общей концепцией программирования на С++, стоит обратить внимание на предка этого мощного инструмента разработки - язык С. Собственно с него мы и начнем!

Для изучения этого языка, а также языка С++ и использования в последующем DirectX или OpenGL. Нам потребуется пакет Visual Studio C++ 6, либо Visual Studio .NET и выше. Все примеры будут проверены в среде Microsoft Visual Studio .NET Enterprise 2003.

Запасайтесь пакетом, желающие мне помогать - помогайте . А я начну писать первую статью!

Ссылка | Комментарии [6]

Архив