Различия между версиями 3 и 4
Версия 3 от 2021-02-25 10:25:36
Размер: 7390
Редактор: FrBrGeorge
Комментарий:
Версия 4 от 2021-02-25 12:33:21
Размер: 7391
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 84: Строка 84:
  * '''TODO''' Склонировать тестовый репозиторий/* [[https://github.com/FrBrGeorge/PyGame|Пример]] */   * '''TODO''' Склонировать тестовый репозиторий /* [[https://github.com/FrBrGeorge/PyGame|Пример]] */

Работа с историей и событийное программирование

Git

Структура

  • Содержимое .git

    • .git/objects/??/*

      • Блобы (файлы)
      • Деревья (не деревья! это срезы рабочей копии, как файл называется + его id)

      • Коммиты: какой блоб из какого получился (в действительности — какой срез из какого) + message + родительский коммит
        • см. git log -p --full-index

    • python3 -c "import zlib; import sys; print(zlib.decompress(sys.stdin.buffer.read()).decode())"

      • но проще openssl zlib -d

      • Примеры

⇒ Git хранит все когда-либо бывшие объекты и деревья

Ветки

Базовая статья (читать всю главу)

Деревья — не деревья, а срезы ⇒ ветки — не ветки, а что?

  • Ветка: именованный путь в графе истории изменений, ссылка на ветку отмечает конец такого пути

  • git checkout -b ветка / git checkout ветка — приводит рабочую копию в соответствие последнему срезу ветки

    • HEAD, HEAD^, HEAD^^, …

Merge: объединение историй

К. О.: git merge

  • Если наследование прямое, просто передвигается HEAD
  • Если есть отдельная история, формируется т. н. merge commit
  • Если есть интерференция коммитов (conflicts), формируется diff3, который надо исправлять руками

TODO Пример

Rebase: переписывание истории

  • Переписывание линейной истории с помощью git rebase -i

    • $EDITOR

    • Виды действий с историей
    • (пример)
  • Перенос ветки

    • возможно. потребуется ручное вмешательство
    • (пример)

<!> Общее правило: при rebase меняются все коммиты, начиная с первого сделанного изменения (даже если это только reword и он только один)

PyGame

PyGame = «обёртка» SDL + атомарность

Поверхностное описание:

Событийное программирование

  • Проблемы алгоритмической полноты «событийного ЯП» в части описания среды порождения, передачи и обработки событий вне объектов этой среды (диспетчера).

    • Кто-нибудь знает пример такого ЯП? /!\

  • Модель:
    • среда (игровой мир) = проводник событий + контейнер объектов
  • Варианты реализации
    • Предазданная среда + обработчики событий в объектах (+ средства подписки на события)
    • Моделирование среды с помощью «цикла разбора событий» (mainloop)

Pygame и событийное программирование

  • Понятие «игровых часов» (tick)
    • Классическая организация игрового времени: таймер
      • «доделать всё и подождать тика»
      • Работает на медленных платформах, просто медленно
    • Современная организация игрового времени: такт
      • «тик — это событие»
      • Накопление / сброс необработанных событий
  • Образующий цикл игровой модели
    1. Определение адресата события
    2. Обработка низкоуровневого события (немедленная)
    3. Активность объектов (возможно, немедленная)
    4. Изменение игрового мира (каждый tick)
    5. Отрисовка игрового мира (возможно, немедленная)

Пример (TODO переделать): https://github.com/FrBrGeorge/PyGame/tree/Fixupped

Д/З

  1. Прочитать и прощёлкать

TODO

  1. Задача на PyGame:

    • TODO Склонировать тестовый репозиторий

    • Реализовать гравитацию (это просто приращение скорости)
    • Написать класс «вращающиеся шары разного размера» на базе основного класса
      • можно использовать transform.html

      • поворачивать и масштабировать лучше каждый раз исходное изображение
    • Реализовать соударение
      • просчитывать соударение нескольких не нужно
      • поскольку шар круглый, при принятии решения о соударении можно использовать знание о диаметре шара, в общем случае удобнее pygame.mask

    • Коммиты оформлять сообразно дисциплине, описанной в прошлой лекции
    • Опубликовать склонированный репозиторий
      • (Когда будем изучать инфраструктуру, в Д/З войдут pull-реквесты)

LecturesCMC/PythonDevelopment2021/02_BranchesAndPyGame (последним исправлял пользователь FrBrGeorge 2021-03-04 08:27:35)