Как стать автором
Обновить

Комментарии 21

У вас много дублированного кода. Вместо создания и копирования методов отличающихся лишь аргументами. Сделайте один метод и пусть он принимает 4-5 параметра. Это методы SFMLWorldTime.

Плюсом будет сделать клас тайм инкапсулирующий функционал time.h и уже данный класс передавать как зависимость в класс SFMLWorldTime. Это разобьёт ваш монолитный класс на два. Что повысит читабельность и упростит отделение рисования времени от вычисления времени.

Привыкайте сразу писать по возможности понятный и читаемый код.

Обязательно продолжайте.

Спасибо большое !

Метод SFMLWorldTime::drawTime тяжело читается. Лучше вынести рисование в отдельный метод с установкой цвета, положения и т. д drawTime(int sec, int minutes, int hours) А в самом drawTime 'е вызывать метод drawDigit(int x, int y, color)

Ещё смущает частое дерганье clock_text.setString и window.draw(clock_text).

В идеале нужно сначала сформировать строку часов минут секунд и потом уже одним вызовом отрисовать.

И делать window.draw(clock_text) один раз в конце цикла событий.

Согласен с Вами! Немного модифицирую и обновлю статью.

Ещё замечу. Залейте примеры на гитхаб и добавьте в проект cmake. Тогда сборка ваших примеров будет элементарна. Клонируем репозиторий и жмём в студии собрать. Красота и минимум телодвижений.

Ок)

Недостаток статьи - используемый стандарт языка на уровне С++03. Многое было бы проще с использованием современного С++.

На вскидку - std::chrono, to_string() вместо ostingstream и т.д.

Ещё замечание, никогда не пишите это в заголовочных файлах:

using namespace sf;

using namespace std;

это считается очень дурным стилем.

Спасибо код уже обновил

Можно код разместить вне класса внутри функций

В примере using размещено в самом начале файла, а не в методах.

http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rs-using-directive

Да и, опять же, сложные методы, требующие using в теле, я бы тоже перенёс в cpp/cxx файл, а для коротких - четыре-пять лишних символов не большая помеха. И в целом, хорошим тоном, даже для методов, считается вкладывать не всё пространство имён, а только нужную часть.

Просто я использую некоторые классы как неймспейсы.
И в итоге в коде может присутствовать типо такого..
using PAGE = tt::Platform::IMemory::PAGE
Так как это определение в начале блока идёт, то визуально оно воспринимается в разы проще

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

Возможно в будущем

Я бы убрал из класса SFMLWorldTime "struct tm newtime" и перенес работу с датой в класс который бы возвращал время в секундах, минутах и часах. SFMLWorldTime переименовал в SFMLTimePainter. SFMLWorldTime может возвращать время по Now

Вот пример.

https://github.com/JordanCpp/Lt/blob/master/src/Lt/Core/DateTime.cpp

Оборачиваете struct tm в DateTime

Это все на ваше усмотрение. Я понимаю, что это всего лишь пример. Может и не стоит настолько мелко разбивать задачу.

Оборачиваете struct tm в DateTime

Но зачем если есть std::chrono?

Потребуется С++20 или внешняя библиотека для предыдущих стандартов

#include <chrono>

int
main()
{
    using namespace std::chrono;

    // Get a local time_point with system_clock::duration precision
    auto now = zoned_time{current_zone(), system_clock::now()}.get_local_time();

    // Get a local time_point with days precision
    auto ld = floor<days>(now);

    // Convert local days-precision time_point to a local {y, m, d} calendar
    year_month_day ymd{ld};

    // Split time since local midnight into {h, m, s, subseconds}
    hh_mm_ss hms{now - ld};

    // This part not recommended.  Stay within the chrono type system.
    int year{ymd.year()};
    int month = unsigned{ymd.month()};
    int day = unsigned{ymd.day()};
    int hour = hms.hours().count();
    int minute = hms.minutes().count();
    int second = hms.seconds().count();
}

https://stackoverflow.com/questions/61190884/current-time-and-date-in-c20-days

библиотека для С++11/14/17

https://github.com/HowardHinnant/date

Попробую С++20

#include <chrono>   
#include <iostream>
#include <thread>

int main() { 
  using namespace std::chrono;
while (true)
{   // получаем локальное время
    auto now = zoned_time{ current_zone(), system_clock::now() }.get_local_time();
    // получаем точность локального времени день
    auto ld = floor<days>(now);
    // получаем точность суточное время 
    hh_mm_ss hms{ now - ld };
    // форматированный вывод времени в консоль часы, минуты, секунды
    std::cout << "\n\n\n\t\t\t" << hms.hours().count() << ":" << hms.minutes().count() << ":" << hms.seconds().count();
    // задержка 500 милисекунд 
    std::this_thread::sleep_for(500ms);
    // очистка экрана
    system("cls");
}

}

Найду время и подрефакторю код. Выложу на гитхаб. Типа как бы я сделал:)

Буду рад )))

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории