Kodomo

Пользователь

ДЗ 5

  • Во всех программах должны быть содержательные имена переменных
  • Во всех программах не должно быть строк длиннее 75 символов, а если такие строки возникли, часть таких строк нужно выносить в отдельные переменные или функции.
  • Функции должны сопровождаться docstring
  • Программа не должна содержать (в разумных пределах) дублирования кода

Вот здесь https://bitbucket.org/dendik/confetti обитает репозиторий с примерами, которые мы делали в классе.

  1. (6 баллов). Напишите программу, которая рисует кружок, который совершает броуновское движение (и не оставляет след на экране). При броуновском движении кружок в каждый момент времени изменяет каждую координату своего положения на случайную величину (распределённую, например, про закону Гаусса с μ=0, σ=3).

  2. (8 баллов). Напишите программу, которая разбрасывает множество разноцветных конфетти, которые затем совершают броуновское движение. Вам потребуется либо сделать ещё один класс "множество всех конфетти" (который хранит все конфетти, а при перерисовке будет сначала стирать всё с экрана, а потом по очереди заставлять каждую конфетти сдвинуться и нарисоваться), либо самостоятельно освоить, как в tk удалить с экрана только один кружок.

  3. (8 баллов). Напишите программу, которая рисует холостую пушку (внешний вид пушки остается на ваше усмотрение), которой можно управлять с клавиатуры стрелочками (события <Up>, <Down>). В программе определён класс "пушка". У пушки есть точка её местонахождения, длина дула (и то, и другое фиксировано) и угол поднятия ствола. При нажатиях на стрелочки угол поднятия ствола увеличивается или уменьшается, и пушка перерисовывается (двигается, соответственно, вверх или вниз). (Δx = L˙cosα, Δy = L˙sinα)

  4. (8 баллов). Напишите программу, которая рисует холостую пушку, которая следит за мышью. Программа реагирует на событие ("<Motion>"), получает из него координаты мыши, высчитывает из них угол наклона пушки (для этого в модуле math есть функция atan2), очищает экран и перерисовывает пушку с высчитанным углом.

  5. (10 баллов). Напишите программу, которая рисует пушку, которая следит за мышью (как в задаче 4) и по клику мыши (событие <1>) запускает снаряд. Начальное положение снаряда совпадает с кончиком дула, а направление скорости совпадает с направлением пушки (т.е. скорость по X совпадает с длиной проекции дула пушки на ось X). По существу, это совмещение задач 4 и 2. Задание не требует навыков сверх имеющихся, но включает выполнение этих двух упомянутых заданий.

  6. (10 баллов). Напишите программу, которая рисует пушку, которой можно управлять с клавиатуры (как в задаче 3). По пробелу (событие '<Space>') пушка запускает снаряд, у которого начальное положение совпадает с кончиком дула, а скорость совпадает с направлением пушки (т.е. скорость по X совпадает с длиной проекции дула пушки на ось X). Это, по сути, совмещение задач 3 и 2. Задание не требует навыков сверх необходимых в предыдущих задачах, но включает выполнение задач 3 и 2.