ТЕТРИС НА C++. ЧАСТЬ 1 - ПРАКТИКА #2

Поделиться
HTML-код
  • Опубликовано: 8 сен 2024
  • Плейлист со всеми уроками: • ЯЗЫК C++
    Music: Airfox - Final Night
    Поддержать: boosty.to/some...

Комментарии • 28

  • @coolgood8893
    @coolgood8893 5 месяцев назад +8

    4:27 - прочувствовал всю боль)

  • @norskiy9765
    @norskiy9765 6 месяцев назад +5

    Стильно, модно, молодежно!

  • @user-hr9cw6iz3d
    @user-hr9cw6iz3d 6 месяцев назад +3

    полезно, прекрасно, невероятно

  • @ANTONIO_MIPT
    @ANTONIO_MIPT 5 месяцев назад +4

    норм музыка
    повороты можно еще через кватернионы реализовать, но это уже совсем другая история)

    • @someStudentChannel
      @someStudentChannel  5 месяцев назад +2

      Мы же в 2Д находимся, комплексных чисел хватит)

  • @Programmist-ej2ib
    @Programmist-ej2ib 6 месяцев назад +7

    Мы ждали эту практику 6 тысяч лет, ой, т. е. пол года...
    Так, а где...
    Платформер?)

  • @VIX3301
    @VIX3301 5 месяцев назад +1

    мне 15, сначала выучил базовый питон , потом решил что-то новое изучить и выбрал с++ , очень приятно что есть такой бесплатный контент , приятно смотреть на полноценные программы , я еще очень много не понимаю , но надеюсь что в будущем стану программистом , моя цель
    у меня к тебе несколько вопросов:
    1)в каком учебном заведении ты учишься , и почему выбрала именно его
    2)какой вуз посоветуешь для продвижения в этой отрасли , я сейчас только 9 класс оканчиваю
    3) что лучше колледж или институт
    4) твой любимый яп
    P.S заранее спс

    • @someStudentChannel
      @someStudentChannel  5 месяцев назад +3

      Привет, у меня путь тоже где-то лет в 15 начался. ВУЗ особо не решает, разве что вокруг тебя будут такие же люди, любящие программирование, поэтому если так говорить, то выбирай просто топовые вузы страны (мгу спб итд)
      Насчёт любимого яп сложно. Если говорить на чем мне прям кайфово писать, то это ассемблер, а для каких-то прикладных задач обычно хватает питона или иногда плюсов)

    • @VIX3301
      @VIX3301 5 месяцев назад +1

      @@someStudentChannel понял, а где ты учишься?

  • @darkhunter777
    @darkhunter777 4 месяца назад +1

    Нада было сразу SFML подключать. Любителей консоли уже мало осталось 😁

  • @cerpanovmita77Cher
    @cerpanovmita77Cher 6 месяцев назад +5

    я могу только повторить. сам такое придумать не смогу.

    • @someStudentChannel
      @someStudentChannel  6 месяцев назад +3

      Все когда-то только повторяли)

    • @cerpanovmita77Cher
      @cerpanovmita77Cher 5 месяцев назад +2

      Скажи пожалуйста, а тебя как звать?@@someStudentChannel

    • @someStudentChannel
      @someStudentChannel  5 месяцев назад +6

      Ася 😎

    • @cerpanovmita77Cher
      @cerpanovmita77Cher 5 месяцев назад +2

      Меня Дмитрий.
      С++ очень сложный. Я сначала java пробовал освоить, мне он вроде и нравится, но Си по серьёзнее язык, и по сложнее.
      Вот учусь на твоём канале, очень так доходчиво и понятно преподносишь, большое спасибо.
      Тем кто обучает, те потом и сами на взлет идут, тем кто дает, те тем же возвращается, так в жизни во всём, во всех облостях.
      Успехов тебе, и просто счастья в личной жизни!
      @@someStudentChannel

    • @someStudentChannel
      @someStudentChannel  5 месяцев назад +1

      @@cerpanovmita77Cher Спасибо 🙏

  • @Programmist-ej2ib
    @Programmist-ej2ib 6 месяцев назад +3

    Я склоняюсь к тому, что любой текст, который хочется отображать в консоли в рамках проasciii-графики - удобней всего выводить посредством sfml

    • @someStudentChannel
      @someStudentChannel  6 месяцев назад +2

      Там есть некоторые сложности при установке библиотеки, с которыми не каждому новичку повезёт с терпением справиться.
      Сначала 1-2 урока по библиотекам и их подключению запишу и можно будет уже sfml пробовать)

    • @Programmist-ej2ib
      @Programmist-ej2ib 6 месяцев назад +2

      @@someStudentChannel
      Cmake + vcpkg?

    • @someStudentChannel
      @someStudentChannel  6 месяцев назад +1

      ​@@Programmist-ej2ibтсс 😅

    • @Programmist-ej2ib
      @Programmist-ej2ib 6 месяцев назад +1

      ух, триплетики, да смейклистики с таргет либрари, ммм)

  • @stepanzorin7594
    @stepanzorin7594 5 месяцев назад +5

    Сразу видно, что автор видео не имеет коммерческого опыта и знает С++ посредственно, однако лишним для ещё более новичка такой контент не будет. Сам я в плюсах 7 лет, преподаю частно по своему авторскому курсу более 4 лет, 1 в которых в ВУЗе. Также работаю, не учитывая полный опыт работы, 2 года в графической разработки Vulkan API, разработка 3D движка (можно сказать, игрового). + сам пишу свой игровой движок.
    Дам несколько review по коду:
    1) Не используйте магические числа. Если есть числа, которые имеют важный контекст или используются с одинаковой целью в разных местах - обозначьте отдельными переменными. При возможности константами или даже компайл-тайм.
    Например, во функции draw() используются две 4, хотя можно сделать константные поля в классе и просто к ним обращаться. И это не относится к тому, что вы сказали на 4:02, речь о другом. А создание полей для повышения скорости - чушь, даже сама операция копирования примтивных типов не является проблемой, поэтому создавать их заранее для конкретно этой цели не имеет смысла.
    2) Называть детали `details` не самая лучшая идея, потому что в продакшене часто бывают такие неймспейсы в `.cpp` файлах. Лучше назвать, например, `figures`. Помимо этого, для их описания лучше не использовать `std::vector`, потому что он выделяет память исключительно только уже после запуска приложения, из-за чего тратиться время для выделения памяти в динамической памяти. Учитывая, что вы используете `std::vector` с аллокатором по умолчанию, у вас нет StackAllocator`а ( habr.com/ru/articles/590415/ ) кастомного. А операция `new` довольно дрогостоящая по времени. Вместо этого лучше все фигуры сразу перечислить в `std::array`, размер которого известен на этапе компиляции, из-за чего будет эффективней. Это же касается и `std::string`.
    3) При присвоении значений в `min_x` нет смысла усложнять его до написания такого тернарного оператора, когда можно написать просто `int min_x = std::min(min_x, -y)`, внутри которого, в функции, и так уже эта логика реализована.
    4) Метод `draw()` может быть констатным, потому что он не меняет поля у *this (текущего объекта).
    5) Позиции вообще по-хорошему бы вынести в отдельную публичную структуру `Detail::position_s` и работать с полями удобно сразу как через объекты, обращаясь к полям.
    6) Лучше не выносить констатные переменные в глобальную область видимости, а сделать класс Game ( в нём может быть метод `.run()`, в котором будет цикл, внутри которого уже `Game::m_field.show()` ), например, в нём определить поле в виде объекта типа `Field`, внутри которого и будут эти данные. Для их получения можно сделать геттетры на каждый из полей, или возвращать как массив `std::array` из двух значений, а ещё лучше использовать `std::pair`, если Вы уже объясняли. А если даже и нет, то объясните сразу его и потом используйте сразу в готовом проекте. Тема на 1 минуту.
    Вообще есть ещё много грешков, и не только в этом видео, но может быть и смотрящим, и автору будет интересно посмотреть на такие нюансы со стороны опытного С++ разработчика.

    • @someStudentChannel
      @someStudentChannel  5 месяцев назад +3

      Спасибо за уточнения!
      Всё верно, но мне больше важно сделать упор на фундаментальное понимание, остальное придет с опытом.
      Стиль написания кода со временем меняется, а математика нет (ну или очень медленно)

  • @user-ni9tf5yr6m
    @user-ni9tf5yr6m 6 месяцев назад +2

    0:36 ааххахахаха

  • @user-ni9tf5yr6m
    @user-ni9tf5yr6m 2 месяца назад

    100й лайк 🤷‍♀️
    Вот так вот

  • @user-jb2wo7wp5g
    @user-jb2wo7wp5g 5 месяцев назад +3

    медятина