Различия между версиями 9 и 10
Версия 9 от 2021-03-02 12:18:57
Размер: 5989
Редактор: FrBrGeorge
Комментарий:
Версия 10 от 2021-03-04 08:27:35
Размер: 5979
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 77: Строка 77:
Пример (''TODO'' переделать): https://github.com/FrBrGeorge/PyGame/tree/Fixupped Пример: https://git.sr.ht/~frbrgeorge/PyGameExample/log
 * /!\ Доделать

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

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. Отрисовка игрового мира (возможно, немедленная)

Пример: https://git.sr.ht/~frbrgeorge/PyGameExample/log

  • /!\ Доделать

Д/З

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

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